C 我将如何创建自己的虚拟机?
我想知道如何创建一个仿照Intel 16位系统的最小虚拟机。这将是我的第一个实际的C项目,我的大部分代码不超过100行,但我已经掌握了核心基础知识,阅读了K&R,理解了事情应该如何运作,所以这几乎是对智慧的测试 有没有人能为我提供文档、工具、教程或简单的老提示/指针,让我了解如何实现这一点,到目前为止,我知道我需要一个存储数据的地方,一个CPU,以及某种作为中断控制器的机制 我这样做是为了学习:系统内部、ASM内部和C——我想在一个单一项目中学习计算的三个方面 请不要告诉我做更简单的事,那只会让人讨厌。:)C 我将如何创建自己的虚拟机?,c,assembly,x86,virtualization,C,Assembly,X86,Virtualization,我想知道如何创建一个仿照Intel 16位系统的最小虚拟机。这将是我的第一个实际的C项目,我的大部分代码不超过100行,但我已经掌握了核心基础知识,阅读了K&R,理解了事情应该如何运作,所以这几乎是对智慧的测试 有没有人能为我提供文档、工具、教程或简单的老提示/指针,让我了解如何实现这一点,到目前为止,我知道我需要一个存储数据的地方,一个CPU,以及某种作为中断控制器的机制 我这样做是为了学习:系统内部、ASM内部和C——我想在一个单一项目中学习计算的三个方面 请不要告诉我做更简单的事,那只会让
感谢您的阅读,并希望您的写作 首先,我会为您打算虚拟化的处理器挑选一本汇编语言参考书,如80286或类似产品。虚拟机分为两类:一类是一次解释代码指令,另一类是将代码编译为本机指令(例如“JIT”) 解释类别通常围绕指令执行循环构建,使用switch语句、计算goto或函数指针来确定如何执行每条指令 有一个有趣的平台,它简单有趣,值得研究:Corewars 是一款编程挑战游戏,其中以“”编写的程序在火星虚拟机上运行。有许多s,通常用C编写
它还启发了一些版本,在这些版本中,8086汇编程序中编写的程序会发生冲突。对于JIT,您可能需要。如果您想使用x86 VMM技术编写虚拟机,您将需要很多东西 有一些指令非常关键,例如VM_ENTER/VM_EXIT(名称可能会因芯片而异,AMD和INTEL使用不同的名称,但功能相同)。这些指令实际上是特权指令,因此,您需要编写一个内核模块来使用它们 启动虚拟机的第一步是启动它,因此,需要加载“BIOS”。然后,您需要模拟设备等。如果您愿意,您甚至可以在这样的虚拟机中运行旧版本的MSDOS 总而言之,这显然不是一件小事,需要大量的时间和精力
现在,您可以做一些类似于VMWare在支持虚拟化的CPU出现之前所做的事情 您描述的不是虚拟机,而是模拟器。@E.T好的,第一行是“虚拟机(VM)是对特定计算机系统的模拟”。那么,你想做什么区别呢?我的意思是,一个仿真器(如果你考虑JIT作为一个例子)解释代码字节,并执行一些编译的代码本身。VMM,特别是那些使用硬件特性的VMM,可以让原始代码像在物理机器上一样运行。事实上,唯一被模仿的就是设备。当人们谈论虚拟机时,首先想到的是与之配套的虚拟机监控程序。@E.T你的意思是JVM命名错误吗?您会说Bochs或QEMU是vm吗?QEMU是一个虚拟机(KVM是Type-II虚拟机监控程序)。Bochs是一个模拟器。虚拟机在其中运行。