百科问答小站 logo
百科问答小站 font logo



64位操作系统(CPU)如何兼容32位程序/软件?请看详情。? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

要保证64位兼容性,无非就是两点:

1. 硬件兼容(指令层面上);

2. 软件兼容(操作系统);

因为以上两点都能保证,所以自然32位程序能在兼容32位程序的操作系统+CPU上跑。

具体的形式:

1. 硬件兼容

现有的x86架构的CPU,操作系统进入64位的工作模式都是兼容32位的,即使在long-mode模式下,汇编指令的默认操作数大小不全是64位的,实际上多数都是32位的。所以硬件指令直接平移过来就可以了。

比如汇编指令TEST EAX,EAX;
在32位下编码是 0x85 0xC0
在64位下编码也是 0x85 0xC0

硬件兼容提供了软件兼容的基础。

2. 软件兼容

Windows和Linux都提供了32位的用户态运行库,所以用户调用各种系统API都可以直接兼容。

系统调用方面,虽然系统内核是64位的,但因为CPU对32位程序发起系统调用时处理的流程不同,所以操作系统能感知到系统调用是从什么状态发起的,剩下的工作就是专门对32位做一下处理即可。

-------------------------------------------

实际应用中,还有一些特殊的情况,比如:

1. 硬件不提供对早期指令的支持,或者操作系统不想用这种方式,那么操作系统也可以采用虚拟机的方式用软件模式,比如Win2000-WinXP时代里的控制台(cmd)在运行16位程序时就是完全模拟出来的(比如debug命令)

2. 绝大多数64位操作系统对32位的兼容仅仅做到了应用程序,而不是驱动(内核态),因为在内核态提供32位支持是一个很麻烦并且有风险的事情,而且内核态程序对CPU拥有完整的控制权,很容易让系统崩溃,所以64位Windows和Linux所谓的兼容性仅仅体现在用户态。




  

相关话题

  第12代英特尔中央处理器营销满天飞,超威半导体(AMD)的产品会再次获得消费者认可吗? 
  未来内存和硬盘会合并吗? 
  华为的海思能不能替代龙芯? 
  为什么游戏本的标压 CPU 会配备核显呢? 
  德国的半导体巨头英飞凌发声称,核心知识产权在德国等,愿为中国供应芯片,是真的吗,是突破美国封锁了么? 
  2018年12月vivo问心无愧吗? 
  为什么现代电脑游戏无法对cpu的多核充分利用? 
  Linux和Windows可以安装在任何个人电脑上,而安卓却需要为每台设备定制一个版本的原因是什么? 
  如何评价 AMD 线程撕裂者 3990X? 
  华为海思是完全自主研发么? 

前一个讨论
为什么显卡在内存中的映射是0b8000H?
下一个讨论
如何看待男子坐火车突发心脏病晕倒请求停车遭拒后死亡?





© 2024-06-04 - tinynew.org. All Rights Reserved.
© 2024-06-04 - tinynew.org. 保留所有权利