【发布时间】:2013-05-15 00:41:50
【问题描述】:
我正在尝试了解虚拟机监视器 (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 处于用户模式时执行特权指令时会发生什么?
- 当用户程序执行系统调用时会发生什么?
【问题讨论】:
-
不确定这属于这里...
-
谢谢,我已将其标记为审核
-
@YuvalFilmus 我不相信这是题外话,也没有接近投票。如果你认为这个问题跑题了,请raise the issue on meta。
-
@Gilles 您介意将问题移至 Stack Overflow 吗?我认为这不是正确的地方,因为对于任何拥有 CS 学位的人来说,这应该是一个非常简单的问题。
标签: operating-system x86 virtualization computer-architecture