百科问答小站 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所谓的兼容性仅仅体现在用户态。




  

相关话题

  在嵌入式商用里面哪款RTOS(实时操作系统)比较多人用? 
  如何看待程序员的三大浪漫被认为是操作系统、编译原理和图形学? 
  为什么 macOS 没有看到 Windows 的一些远古遗留设计? 
  如何能配置一台 “静音”的台式机? 性价比要高 
  能不能通过主动限制 CPU 的频率或者功耗之类,来减少发热? 
  鸿蒙系统对中国的意义有多大? 
  怎样自己写一个简单的操作系统? 
  计算机专业 CPU 应该用 AMD 还是 Intel? 
  为什么我国的计算机科技领域发展了十几年水平依旧落后国外这么多? 
  为什么英特尔要坚持在他的i系列中央处理器上集成显卡? 

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





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