2013-01-06 54 views
0

在完全虛擬化中,guest虛擬機操作系統的CPL是什麼? 在虛擬化中,guest OS的CPL爲1(ring 1) 在全虛擬化中是否一樣?Xen二進制重寫方法

,我聽說一些特權的x86指令 不容易處理,因此需要「二進制重寫」的方法...

請問這個「二進制重寫」發生? 我明白,在虛擬化中,CPU不是被仿真的。 那麼在CPU執行它們之前,hypervisor如何更改二進制指令代碼 ?他們是否預測下一條內存指令,並在CPU達到之前更新內存內容? 如果這是真的,我認爲虛擬機管理程序代碼(執行二進制重寫) 需要每次在客戶操作系統的某些指令執行之前攔截CPU。我認爲這是荒謬的。

將會理解具體的解釋。 預先感謝您.. !!

回答

2

如果完全虛擬化,你的意思是硬件支持的虛擬化,然後將客人的CPL是相同的,如果它是在裸機上運行。

Xen從不重寫二進制文件。

這是VMWare(據我瞭解)。盡我的理解(但我從來沒有見過的VMWare的源代碼),該方法包括的基本上是做的,需要運行不同的代碼的運行時補丁 - 通常情況下,這涉及到用別的東西代替現有的操作碼 - 要麼造成虛擬機管理程序陷阱,或者「做正確事情」的替代代碼集。如果我沒有理解它是如何工作在VMWare是虛擬機監控程序「學習」,由單步通過一個塊中的代碼,並且或者應用二進制補丁或標記部分爲「清除」(不需要改變)。下次執行代碼時,它已經被修補或清除,所以它可以「全速」運行。

在Xen的,使用半虛擬化(環壓縮),然後在OS的代碼已被修改爲知曉虛擬化環境的,並且因此是「可信的」來理解某些事情。但是,虛擬機管理程序仍將陷阱例如寫入頁表(否則有人可以編寫惡意內核模塊修改頁表在另一個客人的內存映射,或一些這樣的)。

HVM方法確實攔截了某些指令 - 但其餘代碼以正常全速運行,這要歸功於現代處理器中的硬件支持,例如AMD中的SVM和Intel處理器中的VMX。 ARM在其處理器的最新型號中擁有類似的技術,但我不確定它的名稱。

我不知道如果我回答了相當的所有問題,如果我錯過了什麼,或者它不夠清晰,隨意問...

+0

感謝你們,這是非常有幫助! – daehee