为了提高问题的质量,我做了一些研究。
参考资料:
1 - https://dougallj.wordpress.com/2022/11/09/why-is-rosetta-2-fast/
2 - https://en.wikipedia.org/wiki/Binary_translation#Dynamic_binary_translation
3 - https://github.com/laniku/sys71src
Rosetta 1/2 的技术,主要是动态二进制转译( Dynamic Binary Translation )。资料 1 中提到,系统在转译 x86-64 的二进制文件的时候,首次会把所有内容都转译成 ARM 的代码,所以首次启动比较慢。我在 ycombinator 也看到有人说 Total store ordering (TSO)是 Rosetta 2 高速最重要的原因,不过说实话没看懂是为什么。
我觉得 x86-64 -> ARM 对我来说太复杂了,而且也没有源代码看,所以想找点稍微简单点的例子。资料 2 中提到苹果在每一次更换 CPU 架构的时候都会做类似的事情。第一次是在 Power PC 架构的苹果电脑 rom 里放置了一个 M68K emulator 。但是我找来找去也没找到源代码,甚至在资料 3 ( System 7.1 ,应该是首个有 M68K emulator 的操作系统)中也没有,可能 rom 的源代码是分开的。
我想请教一下做类似工作的大佬(我猜想龙芯或者华为可能有做这个的朋友?),如何上手研究这项技术?有没有什么比较简单易懂的项目可以先做起来?我琢磨着,如果转译比如说 6502 到 z80 ,是不是会容易一些?这两个架构都是相对简单一些的,而且可能差别不大,但是寄存器数量不一样( 5 vs 16 ),感觉还是会有些头疼。
多谢!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.