大家好,我是轩辕。
我自己平时写文章、做视频都是用的Macbook,这款2019年的产品,用了4年多后,现在每次一打开剪映准备剪视频,风扇直接就起飞了,非常影响创作体验。
所以一直在等着一个时机把装备给升级了,终于等到苹果发了新款,加上最近有那个政府补贴消费券,直接优惠2000,所以没有犹豫,直接上车了。
11.8号,新款Macbook Pro就快递到了我的手中,这一次直接上了M4Pro+24GB+1TB
的配置,创作力直接拉满!不过这重量也是真的沉。
通过迁移助手,花了两个小时把原来那台Mac上的数据和应用迁移到了新装备上。至于那台旧的MAC,因为是Intel的CPU,我打算给它装个Windows 11系统,这样我就不用再在虚拟机里面玩Windows了。之前录制从零开始学逆向课程的时候就是通过虚拟机来操作,风扇同样起飞。我都不敢同时开剪映和虚拟机,我怕直接炸掉!
这台新设备就舒服多了,剪映剪了半天视频,一摸电脑还是冰凉的,一点热度都没有,相当舒服。
不过用着用着,我想到了一个问题:我的老款MAC是用的Intel的CPU,x86架构的,而这个新款的M4 Pro芯片是ARM架构的,这迁移过来的应用软件居然直接能用!
我随便选了一个迁移后的应用程序,用IDA反编译了一下,确实是x86的指令集:
这是怎么做到的?
原来,苹果搞了一个Rosetta 2
,这个玩意儿实现了把x86应用的指令翻译成了ARM的指令。
Rosetta 2 的工作原理是一种即时翻译
和提前翻译
相结合的技术,可以让Mac上的M系列芯片能够运行为Intel x86架构设计的软件。
当用户在M系列Mac上第一次打开一个为Intel架构开发的应用时,Rosetta 2会介入。它会扫描应用的x86代码,并尝试将其翻译成ARM架构的指令代码。这一步骤通常在应用启动时发生,称为 Ahead-Of-Time Compilation(AOT)
,即提前翻译。在大多数情况下,这样的翻译能够在启动应用时进行,不会显著影响应用的启动速度。
有时应用会在运行时生成一些代码,或者依赖系统的库或外部组件(比如插件)中的代码。对于这些部分,Rosetta 2会使用 Just-In-Time Compilation(JIT)
,就是即时翻译,来实时将这些x86指令翻译成Arm指令。JIT是一种动态翻译方式,它会在代码被执行之前即时进行翻译,从而保证程序的顺利运行。
Rosetta 2 并不是每次都重新翻译相同的代码。它会对已经翻译过的代码进行缓存,并优化存储。这意味着,当用户下次启动同一个应用或执行相同的指令时,Rosetta 2可以直接调用缓存中的翻译代码,从而加快响应速度并减少重复翻译带来的资源消耗。通过这样的智能缓存机制,Rosetta 2提升了整体性能,减少了额外开销。
Rosetta 2 与 macOS 深度集成,能够实时监测和判断应用程序调用的指令集类型。当系统检测到用户打开的程序是基于Intel架构时,会自动启动Rosetta 2,而对于已经为Arm编译的程序,则直接运行本地代码,不涉及翻译步骤。Rosetta 2 的这种集成方式让用户几乎感觉不到差异,一切转换过程在后台自动进行。
Rosetta 2 并不仅仅是简单的指令翻译。它也会处理API层的兼容性,确保x86应用在调用系统服务或API时不会出错。这让x86应用能够调用macOS的各种服务,而不需要做任何改动,进一步提升了应用的兼容性。
有了Rosetta 2的加持,原来x86时代的MAC积累的大量应用就可以直接迁移过来,否则的话,很多用户要购买M系列芯片的Mac,可能就有顾虑了。
看到这里,可能有些小伙伴会疑惑,为啥叫Rosetta 2,难道还有Rosetta 1?
还真有,其实这不是苹果第一次切换CPU架构了,早在2006年,还是乔布斯时代的Macbook主要还是用的PowerPC架构的CPU,而Intel的x86架构正是如日中天,苹果准备将Mac电脑从PowerPC芯片架构转换到Intel架构。考虑到当时大部分Mac应用都基于PowerPC架构开发,为了不让用户在新平台上“寸步难行”,苹果开发了第一代Rosetta。
第一代Rosetta的原理其实和今天的Rosetta 2类似,它会在用户运行PowerPC版应用时,将其转换成可以在Intel芯片上运行的代码。虽然Rosetta在效率上并不完美,尤其是对于一些复杂计算的应用来说,性能可能有所下降,但它的出现依然让那一代Mac用户的转型体验顺畅不少。
有道是江山代有才人出,各领风骚数百年,没想到十多年之后,又开始轮回之旅,只不过这一次x86变成了那个要被替代的角色。
如今信创大势所趋,C端消费级产品和服务器都在逐渐ARM化,x86真的要不行了吗?大家怎么看?欢迎留言讨论。