在硬件輔助虛擬化出現之前,有些指令由於各種原因而無法虛擬化。有人可以解釋一下這些說明是什麼以及爲什麼他們不能被虛擬化?什麼是x86架構中的「非虛擬化」指令?
回答
要虛擬化ISA,必須滿足某些要求。 Popek and Goldberg使用類似下面的:
的機器具有至少兩個模式(a)中用戶模式和(b)系統模式。通常,應用程序在用戶模式中運行,操作系統在系統模式中運行。在系統模式,代碼/程序可以看到和操縱機器沒有限制。在用戶模式中,代碼/程序在它可以做的事上有一些限制,例如,如果沒有獲得許可,它將無法訪問機器的所有內存。
指令要麼是(a)特權或(b)沒有特權。 特權指令陷阱當在用戶模式執行。陷印意味着機器被迫進入系統模式,由此它執行操作系統的一些代碼來處理這種情況。從某種意義上說,它們在執行時會提醒操作系統。 (a)敏感或(b)不敏感。 敏感指令修改機器資源的一部分,或者展現出不同的行爲,具體取決於它們是否在用戶模式下執行或系統模式。
虛擬化ISA時,虛擬機監視器(VMM)可以檢測並平穩處理程序或客戶機操作系統修改機器資源的任何嘗試,這一點很重要。它必須能夠看到何時敏感指令正在執行。要做到這一點,全部的敏感指令需要特權並因此執行時陷阱。當被困時,我們可以輸入系統模式並從VMM調用代碼來處理資源修改。
問題是,並非所有的X86的敏感指令是特權說明。這意味着資源修改可能發生在沒有VMM查看和處理它可能是危險的情況下。或者,這可能意味着在客戶操作系統中執行用戶模式中的指令,並且看到與在系統模式中執行它不同的效果。根據this paper在x86中有十七個指令,它們是敏感但是沒有特權。一個例子是POPF
根據機器的模式具有不同的語義。
感謝您的好評!清楚的解釋。 –
- 1. 什麼是指令集架構(ISA)
- 2. 虛擬化支持x86 debugctl
- 3. 爲什麼`boost :: multi_array_ref`的析構函數是非虛擬的?
- 4. x86虛擬化指令集(VT-x,AMD-V)是否有其他用途?
- 5. 爲什麼RDTSC是現代處理器上的虛擬化指令?
- 6. phpInfo:「虛擬服務器」是指什麼?
- 7. x86架構中的「EU」是什麼? (計算有效地址?)
- 8. 「leal 0x10(%ebx),%eax」x86彙編指令中的0x10是什麼?
- 9. x86中「PAUSE」指令的用途是什麼?
- 10. x86 ENTER指令有什麼問題?
- 11. 什麼是虛擬DOM?
- 12. 什麼是虛擬內存?
- 13. 什麼是oracle虛擬表?
- 14. 什麼是虛擬代理?
- 15. 這個x86指令是怎麼回事?
- 16. 虛擬虛擬foo(...)=「0」中的「...」是什麼意思?
- 17. 虛擬化NET框架
- 18. 什麼是phpmyadmin中的`虛擬性'?
- 19. 什麼是PHP中的「虛擬()」功能?
- 20. 深度在Isar虛擬機輸出中指的是什麼?
- 21. 指令在虛擬機中的表示
- 22. x86-64架構上的gnu程序集RET指令失敗
- 23. C++中虛擬表的結構是什麼?
- 24. 順序和障礙:x86上'lwsync'的等效指令是什麼?
- 25. 「rep stos」x86彙編指令序列的作用是什麼?
- 26. 「.align」x86彙編程序指令是做什麼的?
- 27. 什麼是Windows中的虛擬化目錄?
- 28. ARM架構中的GT和HI指令有什麼區別?
- 29. 這個apache虛擬主機指令有什麼問題?
- 30. 爲什麼IntelliJ構建與x86架構不兼容的Android APK
我投票結束這個問題作爲題外話,因爲它不是一個編程問題。試試http://cs.stackexchange.com/ –