Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Operating system 如何在虚拟机中处理系统调用?_Operating System_Virtual Machine_System Calls - Fatal编程技术网

Operating system 如何在虚拟机中处理系统调用?

Operating system 如何在虚拟机中处理系统调用?,operating-system,virtual-machine,system-calls,Operating System,Virtual Machine,System Calls,我想知道在虚拟机中使用系统调用时如何处理。它是否通过虚拟化内核发送某种信号,然后再发送到(物理机器的)“真实”内核 我用谷歌搜索了这个主题,但似乎什么也找不到。提前感谢。在虚拟机中,所有硬件都是虚拟化的,它的工作原理与在真实硬件上的工作原理相同。它通过体系结构拥有的任何syscall指令,这些指令由虚拟机监控程序读取,虚拟机监控程序在其虚拟处理器上执行这些指令 但是,在Wine之类的仿真层中,PE可执行文件中的系统调用映射到Linux内核API上的系统调用。有3种常见的策略来处理此问题: 1。H

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


我用谷歌搜索了这个主题,但似乎什么也找不到。提前感谢。

在虚拟机中,所有硬件都是虚拟化的,它的工作原理与在真实硬件上的工作原理相同。它通过体系结构拥有的任何syscall指令,这些指令由虚拟机监控程序读取,虚拟机监控程序在其虚拟处理器上执行这些指令


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

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


资料来源:

根据底层硬件的功能,对它处理这类事情的各种方式有一个很好的描述。好的,我来看看。谢谢你的帮助谢谢你的帮助,我现在明白了。还有一点阅读要做:pvirtualprocessor?如果我错了,但处理器没有虚拟化,请纠正我。这只在模拟器上发生。来宾操作系统的系统调用通过虚拟机监控程序转发到实际硬件,即实际处理器。这并不涉及虚拟处理器,只是来宾操作系统看到了一个“虚拟处理器”。@Nik Lz这绝对正确;我会在有时间的时候更新答案,或者如果你愿意的话,欢迎你。这个答案可以通过描述一个系统调用从头到尾的生命周期来改进,比如说向网络套接字写入一些数据,从在主机操作系统中运行的应用程序中进行系统调用开始,直到调用返回到应用程序为止。