繁体   English   中英

我将如何创建自己的VM?

[英]How would I go about creating my own VM?

我想知道如何创建一个最小的虚拟机,该虚拟机将按照Intel 16位系统进行建模。 这将是我的第一个实际的C项目,我的大部分代码都在100行以内,但我掌握了基本的基础知识,阅读了K&R并了解了事情应该如何工作,因此这几乎是对智慧的考验。

任何人都可以向我提供有关如何执行此操作的文档,工具,教程或简单的旧提示/指针的指导,到目前为止,我了解我需要在某个地方存储数据,各种CPU和某种起作用的机制作为中断控制器。

我这样做是为了学习:系统内部,ASM内部和C-我想在单个项目中学习的三个计算方面。

请足够友善,不要告诉我做一些简单的事情-那只会很烦。 :)

感谢您的阅读,并希望能写作!

虚拟机分为两类:一次解释代码指令的虚拟机和将代码编译为本地指令的虚拟机(例如“ JIT”)。

解释类别通常围绕指令执行循环构建,使用switch语句,计算得到的goto或函数指针来确定如何执行每条指令。

有一个有趣的平台因其简单和有趣而值得研究:Corewars。

Corewars是一款编程挑战游戏,其中以“ Redcode ”编写的程序在MARS VM上运行。 有很多MARS VM ,通常用C编写。

它还启发了基于8086的版本,这些版本中使用8086汇编程序编写的程序在这里展开战斗。

好吧,对于初学者来说,我将为您打算虚拟化的处理器(如80286或类似产品)挑选一本有关汇编语言的参考书。

对于JIT,您可能需要动态生成并执行x86代码

如果要使用x86 VMM技术编写虚拟机,则需要做很多事情。

有一些重要的指令,例如VM_ENTER / VM_EXIT(名称可能会因芯片而异,AMD和INTEL使用不同的名称,但功能相同)。 这些指令实际上是特权用户,因此,您将需要编写一个内核模块来使用它们。

要启动您的VM,第一步是引导它,因此,您将需要加载一个“ BIOS”。 然后,您需要模拟设备等。如果愿意,您甚至可以在这样的VM中运行旧版本的MSDOS。

总而言之,这显然不是一件容易的事,需要大量时间和精力。

现在,您可以执行类似于虚拟机就绪的CPU出现之前VMWare所做的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM