1. 程式人生 > >看作業系統虛擬化原理總結篇——基於軟體的完全虛擬化——cpu

看作業系統虛擬化原理總結篇——基於軟體的完全虛擬化——cpu

qemu則是採用動態翻譯的技術,先將目的碼翻譯成一系列等價的被稱為“微操作”(micro-operations)的指令,然後再對這些指令進行拷貝,修改,連線,最後產生一塊原生代碼。這些微操作排列複雜,從簡單的暫存器轉換模擬到整數/浮點數學函式模擬再到load/store操作模擬,其中load/store操作的模擬需要目標作業系統分頁機制的支援。

         qemu對客戶程式碼的翻譯是按塊進行的,並且翻譯後的程式碼被快取起來以便將來重用。在沒有中斷的情況下,翻譯後的程式碼僅僅是被連結到一個全域性的連結串列上,目的是保證整個控制流保持在目的碼中,當非同步的中斷產生時,中斷處理函式就會遍歷串連翻譯後代碼的全域性連結串列來在主機上執行翻譯後的程式碼,這就保證了控制流從目的碼跳轉到qemu程式碼。簡單概括下:指定某個中斷來控制翻譯程式碼的執行,即每當產生這個中斷時才會去執行翻譯後的程式碼,沒有中斷時僅僅只是個翻譯過程而已。這樣做的好處就是,程式碼是是按塊翻譯,按塊執行的,不像Bochs翻譯一條指令,馬上就執行一條指令。