我想了解虚拟机监视器(VMM)如何虚拟化CPU。特权指令,陷阱和系统调用之间的关系
我现在的理解是,当CPU处于用户模式时即将执行特权指令时,CPU会发出保护错误中断。在C这样的高级语言中,特权指令被封装在系统调用中。例如,当应用程序需要当前日期和时间(与I/O设备交互的指令有特权时),它会调用某个库函数。这个库函数的汇编版本包含一个叫做'int'的指令,它在CPU中产生一个陷阱。 CPU从用户模式切换到特权模式并跳转到操作系统提供的陷阱处理程序。每个系统调用都有自己的陷阱处理程序。在本例中,陷阱处理程序从硬件时钟读取日期和时间并返回,然后CPU将自身从特权模式切换到用户模式。 (来源:http://elvis.rowan.edu/~hartley/Courses/OperatingSystems/Handouts/030Syscalls.html)
但是,我不太确定这种理解是否正确。本文提到了(特权)x86 popf指令不会导致陷阱的概念,从而使VMM变得复杂:http://www.csd.uwo.ca/courses/CS843a/papers/intro-vm.pdf。在我的理解中,当由用户程序明确调用而不是通过系统调用时,popf指令不应该导致陷阱而是保护错误中断。
所以我的两个具体问题是:
- 时,当CPU处于用户模式下的用户程序执行特权指令,会发生什么?
- 当用户程序执行系统调用时会发生什么?
不知道这属于这里...... –
谢谢,我标记它节制 – datwelk
@YuvalFilmus我不相信这是这里的主题,并且没有密切的投票。如果你认为这个问题是无关紧要的,请[在meta上提出问题](http://meta.cs.stackexchange.com/questions/ask?tags=discussion+scope+specific-question)。 – Gilles