2012-10-15 43 views
1

最近,我正在做關於虛擬化的作業。我的問題是,VMM如何將控制權轉移給來賓內核並在環1中運行該代碼?1類VMM和環1

1類VMM:這是經典的陷阱和模擬VMM。 VMM直接在硬件上運行,充當Ring 0中的「主機操作系統」。客戶內核和客戶機應用程序分別在VMM上運行,分別位於Ring 1和Ring 3中。

  1. 當客戶應用程序進行系統調用,它將陷阱0環VMM(CPU是專門做這個)。

  2. 那麼VMM會檢測到,這是一個系統調用,然後在環1

  3. 當它完成控制轉移到客機內核SYSCAL處理程序並執行它,客戶內核執行syscall-返回,這是一個特權呼叫,它將再次陷入VMM。

  4. VMM然後做環3.真正迴歸到來賓用戶空間(CPU的設計也做到這一點。)

我的問題是關於步驟2 如何進行VMM轉移控制來賓內核並強制CPU響1?它不可能是一個簡單的「調用」,因爲來賓內核代碼將在環0中運行。它必須是某種「系統調用返回」或一些特殊的上下文切換指令。

你有什麼想法嗎?謝謝!

+0

你在說什麼hypervisor?這可能會因VMM而異。 – hsalimi

+0

@hsalimi謝謝!但實際上我沒有特定的VMM。一般來說,有多少種方法可以實施? –

回答

0

Xen是在環1中運行來賓操作系統的VMM之一。在Xen中,諸如HLT指令(來賓操作系統的環1中的指令)等指令被超級調用所取代。在這種情況下,不是象在Linux內核中最終完成的那樣調用HLT指令,而是調用xen_idle()方法。它執行超級調用,即管理權限環切換的HYPERVISOR_sched_op(SCHEDOP_block,0)超級調用。欲瞭解更多信息,請參閱:

http://www.linuxjournal.com/article/8909

1

只需運行的客戶操作系統與CS選擇與RPL = 1(在x86雖然)。從更有特權的環回到更低的環通常使用iret完成。