寫了自己的arm仿真平台,也用了一段時間bochs,斷斷續續地接觸qemu,似乎一直在虛擬的世界裡游走,樂而忘返。
bochs是x86的全仿真平台,用的人不計其數,但好的文檔卻幾乎不存在,畢竟寫虛擬機的是少數人。http://wiki.cs.uiuc.edu/cs427/Architecture+of+Bochs 《Architecture of Bochs》算是比較清晰的文檔。
看虛擬機,總得先從cpu入手。bochs的cpu子目錄裡文件較多,但稍微看看名字,就知道bochs仿處理器時把處理器拆分成很多小模塊來實現,這樣復雜性就降低了,而且硬件也的確就該這麼做的。
bochs裡用宏來決定類裡的一個函數和變量是靜態的還是非靜態的,如果一個類只會定義一個對象,那麼bochs就把類裡的函數和變量定義為靜態的,這樣編譯之後,由於不需要傳遞this指針,從而可以稍微提高一點效率,這麼做簡直讓人覺得不舒服了,仿佛從c++退化到半c半c++的狀態,但虛擬機效率是第一位的,不是嗎?
bochs裡的dynamic tranlation應該在dynamic子目錄下,但作者把這個目錄下的東西統統刪掉了,時間是1999年,bochs的動態翻譯功能不知道還有否支持?