2013-05-18 137 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不用擔心,因爲您的評論,我贊成它。 –

相關問題