我想了解虛擬機監視器(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處於用戶模式下的用戶程序執行特權指令,會發生什麼?
- 當用戶程序執行系統調用時會發生什麼?
不知道這屬於這裏...... –
謝謝,我標記它節制 – datwelk
@YuvalFilmus我不相信這是這裏的主題,並且沒有密切的投票。如果你認爲這個問題是無關緊要的,請[在meta上提出問題](http://meta.cs.stackexchange.com/questions/ask?tags=discussion+scope+specific-question)。 – Gilles