e头裸机管理程序及其托管的操作系统会在系统调用时协调吗?

时间:2019-08-03 23:28:49

标签: hypervisor

我已经阅读了很多有关裸机管理程序的信息,但从未完全了解它们与托管的操作系统的交互方式。

假设您在裸机上拥有Unix本身。在用户模式下,您无法触摸或影响操作系统内部。您可以通过系统调用来完成工作,该系统调用会被捕获,将计算机设置为内核模式,然后为您完成工作。例如,在C语言中,您可能会malloc()一堆,然后最终用尽最初分配的内存。如果内存对我来说没问题,则malloc-当它知道内存不足时-必须对我认为是break()的系统进行调用。进入内核模式后,可以扩展进程的页表,然后返回该表,并且malloc()具有所需的额外内存(或类似的内存)。

但是,如果您在裸机虚拟机管理程序之上安装了Unix,这实际上是如何发生的?虚拟机管理程序似乎必须具有整个系统的实际页表(甚至跨OS)。因此,当对Unix进行系统调用时,Unix不能处于内核模式,否则它可能会与同时运行的其他OS发生混乱。另一方面,如果它在用户模式下运行,那么实现的代码将如何中断,从而使系统管理程序知道它需要更多的内存而无需重写Unix代码?

1 个答案:

答案 0 :(得分:0)

在大多数体系结构中,除了超级用户之外,还添加了另一个级别,并且超级用户有所降低。内核认为自己可以控制机器,但这是系统管理程序制造的一种幻觉。

在ARM中,用户模式为0,系统为1,系统管理程序为2。Intel有点近视(gasp),用户为3,系统管理员为0,因此系统管理程序为-1。显然,它不是-1,但这是他们为此处理构造的非常丑陋的界面的便捷方式。

在大多数体系结构中,虚拟机管理程序必须安装一组额外的页表,这些页表将在访客的页表生效之后生效。因此,您的unix内核认为它是在1M物理负载下加载的,可以位于任意地址,并且您的unix内核认为在页面边界连续的每个地址都可能分散在大量实际(总线)地址上。

即使您的体系结构不允许额外级别的页表,对于管理程序而言,它也非常简单,可以“捕获并模拟”来宾构建的页表,并以完全透明的方式维护实际的表集。但是,向更长的管线的不断运动增加了每个陷阱的成本,因此,非常感谢额外的级别页表。

因此,您的UNIX认为它本身具有全部8M的内存;但是,它鲜为人知,一个偷偷摸摸的管理程序可能会将8M分页到一个非常大的软盘驱动器上,并且仅给它提供了640K的真正RAM。所有正常的unix-y东西都可以正常工作,除了它可能具有令人迷惑的时间感之外,在这种情况下,时间变慢并在交替的阶段加速,因为他们的虚拟机管理程序试图假装在250毫秒内完成250毫秒的软盘访问。 60nsec dram访问。

这是管理程序很难解决的地方。