弱问一下64位OS和app的初级问题,希望大家给扫盲。
1,那些标明 amd64的OS 使用的是 64位模式 还是 兼容模式 啊?ps,我觉得是 64位模式。
2,如果是 64位模式,32位的app 怎么运行的啊?不是 兼容模式 可以运行 32位的OS和app吗?ps,比如那个flashplugin要装什么nsplugin什么的,怎么回事啊?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
1, 64
2, 64位,统称long mode。 CPU也还分成两个模式, 一个叫64-bit mode,跑纯64位的程序; 另一个叫compatible mode, 用来给64位OS跑32位的应用程序。
既然是64-bit mode(需要64位OS和工具链),32位的app怎么运行的?32位flashplayer可以用,的据说32位的Adobe Reager也可以用
CPU 处于 64 位下, OS 是 64 位。
64 位代码运行在 Long Mode 的 64 bit 环境。 32 位代码则运行中 Long Mode 的 compatibility mode 下。
其实现原理是很简单的:
1、64 位模式下,address 缺省是 64 位,操作数缺省是 32 位,CS/DS descriptor 是无效的,除了 CS 几个特殊标志外。
2、long mode 的 cs 的 L 指示代码运行在64位模式还是兼容模式。CS.L 标志在 32 位传统模式下是保留未用的。
基于32位OS的应用程序,其 CS.L 为 0。
3、当 32 位程序无修改地直接在 64 位OS下运行时,CPU 读取 CS.L 为 0,那么判断这个程序是在兼容下模式下运行。
此时,兼容模式下的 CS/DS descriptor 是有效的。 操作数大小与及 address 大小则取决 CS.D 标志。
3、兼容模式下的程序 address 缺省为 32/16 位, 操作数为 32/16, 那么,processor 能就直接运行 32 位应用代码。
老大你搞不搞Linux, BSD, Solaris之类的内核, 像arch代码或者PCI驱动什么的?
以你对x86/x64的研究, 不到Intel/Sun/AMD去赚点美钞实在太可惜了
谢谢,你说的比AMD的文档清楚
1. ILP : int, long, 和 pointer 都是 64bit。
2. LP : int 是 32bit,long 和 pointer都是 64bit。
3. LLP: int 和 long 都是 32bit,pointer 和 long long 是 64bit。
VC 遵循 LLP 模式。大部分平臺上的GCC都使用 LP 模式,但是Windows平臺上的GCC(MinGW)遵循 VC,使用LLP。