为何M1芯片的MacBook上能运行X86指令的CBrother?

今天接着上次的话题,聊一聊关于M1芯片的问题

为何M1芯片能运行X86指令集程序?

要解释这个问题,要先从CPU架构谈起。

CPU架构一般分为精简指令集(RISC)和复杂指令集(CISC),精简指令集通常只支持一些取、存等使用频率很高的基础指令,复杂指令集除了这些基础指令外还支持了很多的复合指令,即一条指令干了很多事情,但复杂指令集性能比精简指令集高得多。所以精简指令集因为简单,造价上也低廉很多。

X86架构的CPU,属于复杂指令集。

Arm架构的CPU,属于精简指令集。

为了更清楚的了解两种架构的区别,这里我们做一个比喻,把两种CPU比作两个厨子。

为何M1芯片的MacBook上能运行X86指令的CBrother?

厨子A年纪比较轻,会做的菜不多,你必须告诉他什么时候倒油,什么时候放盐,最终才能做出菜,优点是工资特别低,很便宜。


为何M1芯片的MacBook上能运行X86指令的CBrother?

厨子B年纪比较大,会做很多菜,你只需要告诉他菜名他就可以做出菜,但是工资很高,很贵。


雇佣了厨师A的饭店,工作流程如下:

为何M1芯片的MacBook上能运行X86指令的CBrother?

餐厅老板告诉厨师A每一个详细的步骤,最终做成了西红柿炒鸡蛋。


再来看看雇佣了厨师B的饭店,工作流程如下:

为何M1芯片的MacBook上能运行X86指令的CBrother?

餐厅老板只需要说出菜名就可以了。

这里厨师A就是精简指令集,只支持一些最基础的指令,厨师B就是复杂指令集,有一些指令看着只有一条,但是CPU做了很多事情。那么两个餐厅的老板就是调度CPU的程序,对于精简指令集的CPU,运算时要用基础指令组合复杂的运算过程。而对于复杂指令集,复杂的运算可以直接使用CPU支持的复杂指令完成。

从去年开始,苹果的电脑开始使用了自研的M1芯片,就好比餐厅的厨子从厨师B换到了厨师A,但是我们之前编写的程序没有变,还是针对厨师B的,那么会出现什么情况呢?

为何M1芯片的MacBook上能运行X86指令的CBrother?

按道理来说,厨师A是完全听不懂经理B的指令的。但是实际情况却是正常运行了。什么原因呢?

这就要说到指令翻译了,经理B发现厨师A听不懂自己的指令,于是请了一位翻译过来,结果如下:


为何M1芯片的MacBook上能运行X86指令的CBrother?


这样,经理B的指令没变,厨师A收到的指令也没变,但是正常出菜了。

这个翻译就是苹果的Rosetta2技术,他是一个跑在苹果系统里的软件系统,x86指令能在M1芯片上运行,就是因为Rosetta2翻译了指令,这才让X86指令的CBrother在M1芯片上正常跑起来。

聊点题外话

为什么叫Rosetta2,因为早期苹果从PowerPC 向x86过渡时候就引入了翻译技术,起名为Rosetta,这次从x86向Arm过渡又旧技重施,直接起名Rosetta2。很佩服苹果的工程师这么随意,感觉就跟我自己写了个测试工程test,创建第二个测试工程时懒得起名字直接叫test2一样,瞬间感觉自己跟国际接轨了。

CBrother升级至v2.4.6

展开阅读全文

页面更新:2024-05-01

标签:指令   芯片   厨子   厨师   架构   餐厅   老板   苹果   文件   基础

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top