网上能看到苹果笔记本MAC把Intel的CPU换了自研的M1,这样MacOs上的应用软体要进行适配。我个人的理解是,这次换晶元,指令集由X86 CISC指令集换成了ARM的精简指令集,所以操作系统MacOs需要进行适配。为什么运行在操作系统之上的应用软体也需要适配呢?只要操作系统暴露给应用软体的API不变,应用软体也不需要变吧?


你想的太简单了,能跑是一回事情,跑得效率高能充分利用到CPU的各种特性又是一回事。

Intel刚出386支持保护模式需要软体适配,出mmx需要软体适配,出奔腾需要软体适配,amf出64位架构也需要适配。

仅仅体现在能跑上那不叫适配,明白了不?


应用软体除了使用操作系统曝露的API,也使用处理器用户态的指令集。比如ADD,在x86和在ARM的指令集编码是不一样的。也有一此x86有的指令ARM没有,所以换处理器架构,软体要适配。


API介面不变,最好的情况应用软体源码不需要改动,但是需要使用ARM编译器重新编译成ARM格式的二进位程序(未适配前是X86二进位程序)。


这。。。

以前的Mac用的都是x86架构的处理器,指令集和现在的苹果晶元是不一样的,M1是arm指令集。

老的软体都用x86指令集,软体可以适配硬体,硬体要是适配软体,那M1也不是现在的M1了。

M1的使命在于将现有的x86平台的生态迁移到ARM。这是苹果擅长的领域,毕竟iphone的处理器已经平稳运行了多年,而它释放的性能优势多年来也是有目共睹的。

苹果在桌面系统上苦微软久矣,而在移动端的软体生态优势如果可以利用起来的话,借此机会翻身跻身桌面操作系统No.1不是梦。

另外牙膏厂的膏量和节奏不满足苹果的节奏,苹果自己也想拜托英特尔的限制。毕竟经常打架不是个事。硬体用自己的可以进一步提高利润,护城河更深,产品发布节奏更可控。

有了推硬体的理由,那只能软体适配M1咯。


因为应用程序不是完全运行在操作系统上,而是需要直接在CPU上直接运行的。

(编程显然不是完全调API,而是需要你自己的逻辑的)


指令集和编译器本身不一样


你把源代码和编译后的可执行文件搞混了。api不变只能说源代码不用变,软体里用的是平台「原生」的指令集,操作系统只是调度软体运行,最终还是要靠软体自己在cpu上运行的,所以换cpu架构了软体需要重新编译,但是不见得你原来针对x64的代码就能完美地重新编译到amd64上,越是底层的代码越是如此。所以所谓的适配你可以理解成软体源代码需要重新编译,编译问题少的能很快出适配版,比如ps;问题多的或者开发者懒的,Rosetta2转译也够用


api只定义了介面的输入输出,实际运行还是要靠cpu,m1应该是arm v8.3架构,x64的可执行文件没法直接在arm机器上跑。

代码层面的适配可能有几个原因:

1.软体使用了x64内嵌汇编

2.使用了某些intel独有的指令/特性

3.暂时没想到...

至少来看,如果不用Rosetta2,代码得重新编译成arm架构的可执行文件。

(里面有没有其他坑没研究过)


推荐阅读:
相关文章