我试图理解虚拟机监视器(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指令不应导致陷阱,而应导致保护故障中断。
因此,我的两个具体问题是:
我不是计算机架构方面的专家。但我有几个意见供你考虑:
从受保护内存加载/存储
等无特定顺序:
你的困惑主要是因为操作系统社区没有标准化的词汇。这里有一些术语,它们有时意味着同样的事情,有时不是:异常、故障、中断、系统调用和陷阱。任何单个作者通常会一致使用这些术语,但不同的作者对它们的定义不同。
有3种不同类型的事件导致进入特权模式。
int
)。(更一般地说,在x86手册中,这些被称为陷阱,并包括一些其他指令(主要用于调试器)。) 每个中断、陷阱或故障都有不同的编号。
在所有情况下:
iret
on x86.)(这是x86上故障和陷阱之间的微妙区别:故障返回到导致故障的指令,陷阱返回到陷阱后的指令。)请注意令人困惑的名称“中断向量表”。尽管它被称为中断表,但它也用于故障和陷阱。(这导致一些作者将一切都称为中断。)
popf
问题相当微妙。这本质上是x86体系结构中的一个缺陷。当popf
从用户模式执行时,它不会导致陷阱或故障(或异常、中断或任何您想调用它的东西)。它只是充当noop。
这有关系吗?嗯,对于一个普通的操作系统来说,这并不重要。另一方面,如果您正在实施虚拟机监视器(如VMWare、Xen或Hyper-V),则VMM正在保护模式下运行,并且您希望在用户模式下运行来宾操作系统,并高效地模拟任何保护模式代码。当来宾操作系统使用popf
指令时,您希望它生成一般保护故障,但它不会。(如果从用户模式调用,则cli
和sti
指令会生成一般保护故障,这正是您想要的。)
前言:异常控制流 每个进程对应的程序文件由一条一条的指令组成。进程在执行的时候,会将程序文件加载到进程的内存空间中,这些指令在内存空间中是相邻的。进程会通过调整程序计数器 PC 的值,一条一条地执行指令。我们将进程执行的指令序列叫做处理器的「控制流」。 正常情况下,进程可能会顺序执行相邻的指令(“平滑的”序列),也可能通过跳转、调用和返回等程序指令转移到另一个位置开始执行(平滑流的突变)。无论是前
while (<STDIN>) 一定要小心这点。如果你不知怎么回事地得到了假值(如:空行),你的文件可能 停止处理了。假如你在处理文件读取(除非修改了 $/),这种事一般不会发生, 但却可能发生。 你更喜欢这样运行: while (readdir(DIR)) { 假设你有文件名为 0 的话,那么程序将停止,且不会继续处理文件。 更合适的 while 循环看起来像这样: while ( defin
只是想澄清一下制度之间的关系。cpu。计数度量和系统。cpu。SpringBoot 2.3.1致动器指标endpoint的使用指标。 例如,在我的案例中: /actuator/metrics/system.cpu.count的值为:2 /执行器/指标/系统的价值。cpu。用法为:0.024765603908878 这是否意味着我的cpu利用率百分比为:0.024765603908878/2*100
这里归纳了Keras使用过程中的一些常见陷阱和解决方法,如果你的模型怎么调都搞不对,或许你有必要看看是不是掉进了哪个猎人的陷阱,成为了一只嗷嗷待宰(?)的猎物 Keras陷阱不多,我们保持更新,希望能做一个陷阱大全 内有恶犬,小心哟 TF卷积核与TH卷积核 Keras提供了两套后端,Theano和Tensorflow,这是一件幸福的事,就像手中拿着馒头,想蘸红糖蘸红糖,想蘸白糖蘸白糖 如果你从无到
这里归纳了Keras使用过程中的一些常见陷阱和解决方法,如果你的模型怎么调都搞不对,或许你有必要看看是不是掉进了哪个猎人的陷阱,成为了一只嗷嗷待宰(?)的猎物 Keras陷阱不多,我们保持更新,希望能做一个陷阱大全 内有恶犬,小心哟 TF卷积核与TH卷积核 Keras提供了两套后端,Theano和Tensorflow,这是一件幸福的事,就像手中拿着馒头,想蘸红糖蘸红糖,想蘸白糖蘸白糖 如果你从无到
这一章将会介绍使用python自动执行系统命令,我们将使用python展示两个执行命令的方式(os,subprocess). 当你开始创建一个脚本的时候,你会发现os.system和subprocess.Popen都是执行系统命令,它们不是一样的吗?其实它们两个根本不一样,subprocess允许你执行命令直接通过stdout赋值给一个变量,这样你就可以在结果输出之前做一些操作,譬如:输出内容的格