我受到 Fabrice Bellard 实现 x86 virtual machine in Javascript 的启发。 ,我想尝试编写能够运行 Linux 内核的最简单的虚拟机。这纯粹是一种教育性的努力,除了理解和共享使这成为可能的代码之外别无其他目的。
浏览了x86 specification ,我怀疑我可能会尝试编写一个能够模拟完整 x86 指令集的虚拟机,从而将自己陷入深渊。相反,我正在寻找一种可以尝试模仿的更简单的架构。
我已通读 this question其中询问如何模拟 x86 架构,答案建议从更简单的东西开始,例如 ARM 架构。我的问题更具体:我可以尝试模拟的最简单的架构是什么,它可以运行 Linux 内核?
我对完全模拟整个机器感兴趣,而不是简单地将指令传递回主机(例如,如果我正在编写 x86 模拟器,这将是可能的)。我有相当数量的 16 位汇编知识和一些操作系统理论背景,所以只要有足够的工作,这应该是可以实现的。
请您参考如下方法:
最简单的架构将是从易于实现的角度来看。由于您正在构建一个完全模拟机器的模拟器,因此具有最简单的指令集设计/体系结构的模拟器将是合适的。 RISC 架构无疑更好。但是选择一个没有广泛使用的架构也不好,如果你需要支持,很少有人能够帮助你。编写模拟器不是小菜一碟。我会说要么选择 ARM 要么 MIPS,两者都很受欢迎:
此外,您必须知道 Fabrice Bellard 的 javascript 虚拟机使用 32 位 x86 兼容 CPU,Linux 原生支持这种功能。您必须自己为 ARM 或 MIPS 移植 linux 内核(使用工具链)。请参阅有关如何使用 linux 内核的链接
对于 MIPS:
对于 ARM :