寫了自己的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的動態翻譯功能不知道還有否支持?