代码之家  ›  专栏  ›  技术社区  ›  eSurfsnake

裸机hypervisor和它所承载的操作系统在系统调用上是如何协同工作的?

  •  0
  • eSurfsnake  · 技术社区  · 5 年前

    我读了很多关于裸机管理程序的文章,但从来没有完全了解它们与托管的操作系统的交互方式。

    假设Unix本身在裸机上。在用户模式下,您不能触摸或影响操作系统内部。你可以通过一个被困的系统调用来完成任务,将机器设置为内核模式,然后为你完成任务。例如,在C中,您可能需要malloc()一堆,然后最终耗尽最初分配的内存。如果内存对我有用,malloc—当它知道内存不足时—必须对我认为的break()进行系统调用。一旦进入内核模式,进程的页表就可以扩展,然后返回,malloc()就有了所需的额外内存(或者类似的东西)。

    0 回复  |  直到 5 年前
        1
  •  0
  •   mevets    5 年前

    在大多数架构中,除了supervisor之外还添加了另一个级别,而supervisor在某种程度上被降级了。内核认为自己可以控制机器,但这是hypervisor制造的假象。

    在大多数体系结构中,hypervisor安装一组额外的页表,这些页表在guest的页表安装之后生效。因此,您的unix内核认为它是在1M物理位置加载的,可以是任意地址,并且您的unix内核认为在页面边界上相邻的每个地址都可能分散在大量的实际(总线)地址上。

    即使您的体系结构不允许额外级别的页表,hypervisor也可以直接“捕获和模拟”来宾构建的页表,并以完全透明的方式维护一个实际的集。然而,向较长管道的连续移动增加了每个陷阱的成本,因此额外的级别页表非常受欢迎。

    因此,您的UNIX认为它自己拥有全部的8M内存;然而在它不知情的情况下,一个鬼鬼祟祟的hypervisor可能会将这8M内存分页到一个非常大的软盘驱动器上,只给它一个微不足道的640K真正的RAM。所有正常的unix-y都工作得很好,只是它可能有一种相当混乱的时间感,时间在交替的阶段减慢和加快,因为hypervisor试图假装一个250毫秒的软盘访问在一个60毫微秒的dram访问时间内完成。

    这就是hypervisor变得困难的地方。

    推荐文章