2013-05-18 138 views
9

我想了解虚拟机监视器(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处于用户模式下的用户程序执行特权指令,会发生什么?
  • 当用户程序执行系统调用时会发生什么?
+0

不知道这属于这里...... –

+0

谢谢,我标记它节制 – datwelk

+0

@YuvalFilmus我不相信这是这里的主题,并且没有密切的投票。如果你认为这个问题是无关紧要的,请[在meta上提出问题](http://meta.cs.stackexchange.com/questions/ask?tags=discussion+scope+specific-question)。 – Gilles

回答

13

没有特定的顺序:

你的困惑主要是由于一个事实,即操作系统社区没有标准化的词汇。下面是得到周围挂着有时意味着同样的事情,有时候不是一些术语:例外故障中断系统调用陷阱。任何作者个人一般都会使用这些术语,但不同的作者对它们的定义是不同的。

有3种不同的事件会导致进入特权模式。

  1. 一个异步中断(引起的,例如,通过一个I/O设备需要的服务。)
  2. 的系统调用指令(int在x86)。 (更一般地,在x86手册中,这些被称为陷阱,并且包括一些其他指令(主要用于调试器)。)
  3. 一个指令可以做一些例外的事情(非法指令,保护错误,除以0,页故障......)。 (不同的作者称这些例外故障陷阱。x86的手册称这些故障

每个中断,陷阱或故障都有与之相关的不同的数字。

在所有情况下:

  1. 处理器进入特权模式。
  2. 用户模式寄存器保存在某处。
  3. 处理器找到中断向量表的基地址,并使用中断/陷阱/故障号作为表中的偏移量。这给出了该中断/陷阱/故障的服务程序的指针。
  4. 处理器跳转到服务程序。现在我们处于保护模式,用户级别状态全部保存在我们可以获取的地方,并且我们正在操作系统内的正确代码中。
  5. 当服务程序完成时,它会调用中断返回指令(x86上的iret)。(这是x86上故障和陷阱之间的细微区别:故障返回到导致故障的指令,陷阱返回到指令的陷阱。)

注意混淆名称“中断向量表”。即使它被称为中断表,它也用于故障和陷阱。 (这导致一些作者致电一切中断。)

popf问题是相当微妙的。这实质上是x86体系结构中的一个错误。当popf从用户模式执行时,它会执行而不是会导致陷阱或错误(或者异常或中断,或者您想调用它的任何内容)。它只是用作noop。

这有关系吗?那么,对于一个正常的操作系统来说,这并不重要。另一方面,如果您正在实施虚拟机监视器(如VMWare或Xen或Hyper-V),则VMM将以受保护模式运行,并且您希望以用户模式运行来宾操作系统,并且有效地模拟任何保护模式代码。当客户操作系统使用popf指令时,需要它会生成一般性保护错误,但不会。 (该clisti指令做产生一般性保护错误,如果从用户模式,这是你想要的调用。)

9

我不是计算机体系结构方面的专家。但是,我有你的考虑几个意见:

  1. 的CPU有两种指令
    • 正常指令,例如,ADD,SUB等
    • 特权指令,例如启动I/O,load/store来自受保护的存储器等。
  2. 机器(CPU)有两种模式(由保护寄存器R):
    • 用户模式:处理器执行在用户的程序正常指令
    • 内核模式:处理器执行两个正常特权指令(OS ==内核)
  3. 操作系统隐藏特权指令为system calls。如果用户程序调用它们,则会引发异常(抛出软件中断),其中 向量指向内核处理程序,trap内核模式和切换上下文。
  4. 在遇到特权指令用户模式,处理器trap到内核模式。根据发生的情况,它将是几个陷阱之一,例如内存访问冲突,非法指令冲突或者注册访问冲突。陷阱将处理器的执行切换到内核模式,并将控制切换到操作系统,操作系统然后决定操作过程。该地址由操作系统启动时设置的trap vector定义。
+1

很好的答案,谢谢。接受另一个,因为它更广泛。 – datwelk

+0

@datwelk不用担心,因为您的评论,我赞成它。 –

相关问题