dat*_*elk 13 virtualization x86 operating-system computer-architecture
我试图了解虚拟机监视器(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指令不应该导致陷阱,而应该导致保护错误中断.
所以我的两个具体问题是:
Wan*_*gic 20
没有特别的顺序:
您的困惑主要是由于操作系统社区没有标准化的词汇表.以下是一些被抛弃的术语,有时意味着同样的事情,有时不是:异常,故障,中断,系统调用和陷阱.任何个体作者通常会一致地使用这些术语,但不同的作者对它们的定义不同.
有3种不同类型的事件会导致进入特权模式.
int在x86上).(更一般地说,在x86手册中,这些被称为陷阱,并包含一些其他指令(主要用于调试器.))每个中断,陷阱或故障都有一个与之关联的不同编号.
在所有情况下:
iret.在x86)(这是一个错误,并在x86陷阱之间的微妙区别:故障恢复导致该故障的指令,陷阱返回指令后的陷阱.)注意令人困惑的名称"中断向量表".即使它被称为中断表,它也用于故障和陷阱.(这导致一些作者将所有内容称为中断.)
这个popf问题相当微妙.这本质上是x86架构中的一个错误.当popf从用户模式中执行它并不会导致陷阱或故障(或异常或中断或任何你想调用它.)它只是作为一个空操作.
这有关系吗?那么,对于正常的操作系统来说,这并不重要.另一方面,如果您正在实施虚拟机监视器(如VMWare或Xen或Hyper-V),则VMM以受保护模式运行,并且您希望以用户模式运行客户机操作系统并高效模拟任何保护模式代码.当客户机操作系统使用popf指令时,您希望它生成一般保护错误,但事实并非如此.(如果从用户模式调用,则cli和sti指令会生成一般保护错误,这是您想要的.)
Min*_*Liu 13
我不是计算机架构方面的专家.但我有几点意见供你考虑:
load/store从受保护的存储器等启动I/O.system calls.如果用户程序调用它们,这将导致异常(抛出一个软件中断),中断向量的内核处理器,trap以内核模式和切换上下文.trap| 归档时间: |
|
| 查看次数: |
12393 次 |
| 最近记录: |