qemu原始碼分析之四--dyngen動態翻譯技術
阿新 • • 發佈:2019-01-06
由於剛剛接觸qemu,所以前面幾篇文章僅僅是膚淺的介紹qemu的一些背景知識,今天突然感覺前面說的太沒有條理了,而且大部分是讀別人的文章,一知半解,沒有自己的總結體會,今天感覺稍微有點心得,敬請指教。
1. 明確guest和host
對於qemu而言,被模擬的平臺成為guest或者說target;很明顯,執行qemu的平臺就稱為host。
2. 瞭解qemu動態翻譯技術的發展
qemu運用動態翻譯的技術將guest binary instructions動態翻譯成host binary instructions,之後由host執行翻譯後的指令。在qemu-0.9之前的版本都採用dyngen的動態翻譯技術,而從qemu-0.10開始的版本開始採用TCG(Tiny Code Generator)的翻譯技術。
採用dyngen 動態翻譯技術的資料主要有以下兩篇文章,是瞭解動態翻譯技術入門的好文章(在後續的分析中,會簡單介紹dyngen技術):
- QEMU, a Fast and Portable Dynamic Translator
-
Porting QEMU to Plan 9: QEMU Internals and Port Strategy
介紹TCG技術的文章則相對較少,主要是閱讀qemu原始碼和qemu官網上的相關資料。
3. dyngen簡單介紹
圖1簡單說明了qemu採用dyngen動態翻譯技術將目標平臺指令翻譯成主機平臺指令的簡單過程。
假設target為PowerPC,host為x86,說明整個翻譯過程:
(2)暫存器分配 target平臺的暫存器被對映到host的固定暫存器或指定的記憶體地址 (3)條件程式碼的優化