【问题标题】:How are system calls handled in a virtual machine?在虚拟机中如何处理系统调用?
【发布时间】:2013-01-03 02:46:03
【问题描述】:

我想知道在虚拟机中使用系统调用时如何处理。它是否通过虚拟化内核发送某种信号,然后到(物理机的)“真实”内核?

我用谷歌搜索了这个主题,但我似乎找不到任何东西。提前谢谢你。

【问题讨论】:

  • VirtualBox documentation 中有一个很好的描述,它根据底层硬件的能力处理这类事情的各种方式。
  • 好的,我去看看。感谢您的帮助

标签: operating-system virtual-machine system-calls


【解决方案1】:

在所有硬件都被虚拟化的虚拟机中,它就像在真实硬件上一样工作。它通过体系结构具有的任何系统调用指令,这些指令由管理程序读取,管理程序在其虚拟处理器上执行指令。

但是,在 Wine 等仿真层中,PE 可执行文件中的系统调用被映射到 Linux 内核 API 上的系统调用。

【讨论】:

  • 谢谢你的帮助,我现在明白了。还有一点阅读要做:P
  • 虚拟处理器?如果我错了,请纠正我,但处理器没有虚拟化。这只发生在模拟器上。来宾操作系统的系统调用通过管理程序转发到真实硬件,即。实际的处理器。那是不涉及虚拟处理器,只是来宾操作系统看到了一个“虚拟处理器”。
  • @Nik-Lz 这绝对是真的;有时间我会更新答案,或者如果您愿意,欢迎您来
  • 这个答案可以通过描述系统调用从开始到结束的生命周期来改进,比如从在主机操作系统中运行的应用程序中进行系统调用开始,将一些数据写入网络套接字并完成调用返回到应用程序。
【解决方案2】:

有 3 种常见的策略来处理这个问题:
1.管理程序捕获来自客户的系统调用:管理程序检查特权指令(实际上是系统调用)是来自客户操作系统本身,还是来自客户操作系统中的用户空间程序。如果是前一种情况,那么管理程序实际上会将调用转发给硬件,尽管是通过虚拟化指令。如果是后者,管理程序会将调用重定向到客户操作系统,然后继续。
2。二进制翻译:在这里,管理程序检查来宾操作系统中所谓的“基本块”中的代码,扫描特权指令。无论在哪里找到它们,它都会用调用它自己的系统调用过程来替换它们。然后它继续缓存这些块并最终构建一整套这样的块。
3。半虚拟化:这里修改了客户操作系统本身,因此它不是调用硬件,而是通过 API 调用管理程序来完成其硬件 I/O。

来源:Modern Operating Systems by Andrew Tanenbaum

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 2014-12-10
    • 2013-05-10
    • 2019-08-13
    • 1970-01-01
    • 2015-03-23
    相关资源
    最近更新 更多