2015-09-26 62 views
10

在硬件輔助虛擬化出現之前,有些指令由於各種原因而無法虛擬化。有人可以解釋一下這些說明是什麼以及爲什麼他們不能被虛擬化?什麼是x86架構中的「非虛擬化」指令?

+0

我投票結束這個問題作爲題外話,因爲它不是一個編程問題。試試http://cs.stackexchange.com/ –

回答

26

要虛擬化ISA,必須滿足某些要求。 Popek and Goldberg使用類似下面的:

的機器具有至少兩個模式(a)中用戶模式和(b)系統模式。通常,應用程序在用戶模式中運行,操作系統在系統模式中運行。在系統模式,代碼/程序可以看到和操縱機器沒有限制。在用戶模式中,代碼/程序在它可以做的事上有一些限制,例如,如果沒有獲得許可,它將無法訪問機器的所有內存。

指令要麼是(a)特權或(b)沒有特權特權指令陷阱當在用戶模式執行。陷印意味着機器被迫進入系統模式,由此它執行操作系統的一些代碼來處理這種情況。從某種意義上說,它們在執行時會提醒操作系統。 (a)敏感或(b)不敏感敏感指令修改機器資源的一部分,或者展現出不同的行爲,具體取決於它們是否在用戶模式下執行系統模式

虛擬化ISA時,虛擬機監視器(VMM)可以檢測並平穩處理程序或客戶機操作系統修改機器資源的任何嘗試,這一點很重要。它必須能夠看到何時敏感指令正在執行。要做到這一點,全部敏感指令需要特權並因此執行時陷阱。當被困時,我們可以輸入系統模式並從VMM調用代碼來處理資源修改。

問題是,並非所有的X86的敏感指令是特權說明。這意味着資源修改可能發生在沒有VMM查看和處理它可能是危險的情況下。或者,這可能意味着在客戶操作系統中執行用戶模式中的指令,並且看到與在系統模式中執行它不同的效果。根據this paper在x86中有十七個指令,它們是敏感但是沒有特權。一個例子是POPF根據機器的模式具有不同的語義。

+0

感謝您的好評!清楚的解釋。 –

相關問題