不兼容是什么意思??数据不兼容是什么意思( 二 )


英特尔移除 32 位模式,确实不等于移除 32 位程序支持 。甚至移除了 32 位模式,还能让 32 位程序的运行速度变快 。。。
话说到这块儿,我们就得聊一聊英特尔现在是怎么设计处理器的了 。
首先,一块最新的英特尔 i9 处理器,运行效率可以媲美苹果 M1 处理器 。
但是大家猜猜,它在运行一个最新开发的 64 位程序时,第一步执行的操作是什么?
是把自己模拟成一颗1978 年的 8086 处理器,然后以 16 位模式开始运行程序代码 。。。
别问,问就是 “兼容性考虑” 的一部分 。
但是,模拟出来的 16 位模式是肯定执行不了 64 位程序 。
所以处理器会退出 16 位模拟 —— 再切换进 32 位模拟 。。。
32 位模拟自然也是跑不了的,这时候处理器才会最终回到 64 位工作模式,再次开始执行 。
OK,这次程序终于跑起来了 。
是不是很抽象 。。。
所以为什么,处理器里会有这么抽象的一个 “逐级切换” 的过程呢 ——因为 1985 年,英特尔设计首颗 32 位架构处理器 80386 的时候,就是这么定义 “兼容的运行规范” 的 。
别问,问就是 “兼容性考虑” 的一部分 。
虽然以如今处理器的性能来说,“逐级模拟” 的性能损耗也不是那么大 。
但由于操作系统的调度方式,它每秒都要发生几十上百次!
积少成多,这得多浪费啊 。。。
就这样英特尔还能把 i9 的运行效率做到苹果 M1 的水平,对不起英子,以前是我误会你了 。
我向你道歉!!!
咳咳,好了我们言归正传:
而这次的 x86S 最重要的一点变化,就是砍掉了这个 “逐级模拟” 模式,起手直接进入 64 位模式干活 。
这不简单多了!
而且没有了 16 位和 32 位模拟,不仅是代码执行流程得到了精简,处理器设计也能得到简化 。
要知道,这些功能实现的根本,是光刻机在芯片上刻出来了相应的电路 。
把这些爷爷辈电路砍掉之后,腾出来的地方自然可以给更新、更宝贵的功能模块使用 。
OK,英特尔做了什么我们搞明白了,可是另一个问题还是没解决:
为什么处理器里都没有 32 位模式了,未来的 x86S 也还是能无伤运行 32 位程序?
这件事,功劳其实在微软 。
早在 WinXP 64 位版发布的时候,微软的程序员们就在系统里内置好了 “32 位 Windows 子系统”,能够以近乎无损且无感的方式转译 32 位程序到 64 位系统中执行 。
换句话说,现在我们电脑里的 32 位程序,其实也没用到处理器的 32 位模式 。
它们一直都是被 Windows 系统自己转译执行的 。。。
emmmm,显得英特尔之前的兼容操作更蠢了 。
假如你是个一直使用最新 Windows 系统的普通用户,那么英特尔接下来要推广的 x86S 对你是百利无一害的 。
等新的 x86S 处理器发布之后,冲就完事了。
现在大家应该能看出来,作为一个沿用了小半个世纪的架构,每一颗英特尔 x86 处理器都是一个小小的 “屎山堆” 。
上面提到的 16-32-64 的兼容模式,是对处理器性能比较有影响的一个设计,但它其实还只是 x86 这坨屎山的一个侧面 。
事实上,英特尔这次为了列举 x86 里有多少 “ 过时特性 ”,花掉了十多页 pdf 。。。

推荐阅读