主机如何真正“托管”虚拟机?如何给它自己的内核?虚拟机的指令和系统调用是否已转换为机器语言并传递给主机?它是作为字节流传递的吗?是否有将系统调用从虚拟操作系统转换为主机操作系统的解释器?
我对虚拟机的思考越多,它就会越混乱。
任何这些问题的答案都会很棒!
答案 0 :(得分:1)
令人困惑的部分原因是“虚拟机”一词已经被用来描述不同的东西,因此每个都需要不同的答案。例如,'Java虚拟机(JVM)'实际上只是一个程序,用于解释为支持Java而定制的字节码指令集(当然,除此之外还有更多内容),所以任何尝试回答你的问题在这种情况下的问题是解释口译员的工作方式。我要做的是回到“虚拟机”的原始含义并解释一下。 (注意:我不知道我要描述的内容有多少适用于现代虚拟机)
术语虚拟机最初描述了一种多编程操作系统技术,用于为大量用户中的每一个提供他们自己的完整计算环境。 “完整”我的意思是:通常每个用户都有一个“空间”来运行程序,但每个程序只能通过固定的通用操作系统到达其空间之外;在这种技术中,每个用户都会获得一个“空间”,出现是整个裸机,所以特别是每个用户都可以运行他们自己的多个任务操作系统如果他们这样选择的话。
实现这一目标取决于硬件的两个特性:(1)程序可以以两种模式之一运行 - 用户模式或系统模式; (2)某些指令是特权(为操作系统保留),并且只能在系统模式下使用 - 否则机器“陷阱”并尝试执行非法指令处理程序例程。这是通过让基本操作系统将每个用户的空间实现为相同硬件的模拟,模拟用户模式和模拟系统模式等来利用的。所有用户代码始终是无论模拟模式如何,都以实际用户模式运行。这意味着每条指令的执行都是由实际硬件本身模拟的,没有解释开销。特权指令是一个例外:它们总是“陷阱”到实际的操作系统,它将根据用户的模拟模式处理中断。如果用户的“机器”处于模拟用户模式,则实际操作系统将模拟硬件中断,调整模拟机器状态并将控制转移到指令处理程序 - 在模拟中 - (即在用户空间中);如果用户的“机器”处于模拟系统模式,实际操作系统将模拟特权指令,相应地改变用户的“机器状态”。