【发布时间】:2019-08-03 23:28:49
【问题描述】:
我已经阅读了大量有关裸机虚拟机管理程序的内容,但从未完全了解它们与托管的操作系统交互的方式。
假设您在裸机上安装了 Unix。在用户模式下,您无法触摸或影响操作系统内部。你通过一个被困的系统调用来完成工作,将机器设置为内核模式,然后为你完成工作。例如,在 C 中,您可能会 malloc() 一堆,然后最终用完最初分配的内存。如果内存对我有用,malloc - 当它知道内存不足时 - 必须对我认为是 break() 的系统调用。一旦进入内核模式,您的进程的页表可以扩展,然后它返回并且 malloc() 具有所需的额外内存(或类似的东西)。
但是,如果您在裸机虚拟机管理程序之上安装 Unix,这实际上是如何发生的?看起来,管理程序必须具有整个系统的实际页表(甚至跨操作系统)。因此,当对 Unix 进行系统调用时,Unix 不能处于内核模式,否则它可能会与同时运行的其他操作系统混淆。另一方面,如果它在用户模式下运行,实现 break 的代码如何让管理程序知道它需要更多内存而不重写 Unix 代码?
【问题讨论】:
标签: hypervisor