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




  

相关话题

  如何看待arm版的win10? 
  听说CPU性能=IPC×频率,IPC怎么查询呢? 
  龙芯现在怎么样? 
  macOS 与 Windows 哪个更强,强在何处? 
  什么是虚拟寄存器,有何作用? 
  有无必要买台高端电脑,只为几年不换? 
  预算 5000 以内,送男友什么 CPU 比较好? 
  CPU的一级缓存为什么不能做得大一点? 
  为什么很少听到有人在用 Windows 编程? 
  如果现在携带一颗英特尔 12 代酷睿 i9 12900k 回到 20 年前,会对人类科技带来多大影响? 

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





© 2024-11-23 - tinynew.org. All Rights Reserved.
© 2024-11-23 - tinynew.org. 保留所有权利