请问如何学习苹果 Rosetta 的技术?

4 天前
 levelworm

为了提高问题的质量,我做了一些研究。

参考资料:

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 ),感觉还是会有些头疼。

多谢!

2864 次点击
所在节点    程序员
27 条回复
secondwtq
3 天前
levelworm
3 天前
@secondwtq #21
呃,这个就是我的第一个链接。
DIMOJANG
3 天前
@Avn #17 巧了,我现在确实在这么用,其实性能还 OK 。拿来写嵌入式的代码是没啥问题的,就是烧录和编译的速度比较慢( M2 Air 8+256 ,windows 7 x64 )。( Parallels Desktop 模拟出来的 Arm windows 11 不支持 x86 的驱动,太差劲了)
LanhuaMa
3 天前
@Avn #1 Wine 是通过包装 API ,Rosetta 是通过转译 CPU 指令。你这话有点像,想学习 TCP/IP 通讯吗?没问题,你把 HTTP 搞懂了就可以了,这里面应该有类似的技术
wangyzj
3 天前
谢谢 OP 替我问出了我一直想问的问题
levelworm
2 天前
@wangyzj 问出了大海。。。说实话太难了,我还是看看早期类似的实现比较现实。Rosetta 2 估计大部分是汇编写的?
wangyzj
2 天前
@levelworm #26 难是肯定的,尤其是对于不是从事这个方向的,单纯是兴趣想了解的人
但 OP 也算是做了很多功课
你们都给了我很多方向

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1095833

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX