simulation和emulation的區(qū)別和聯(lián)系
做模擬器首先就要搞清楚“Simulation”、“Emulation”、模擬和仿真這四者的區(qū)別和關(guān)系,下面我談?wù)勎覀€人的理解。
??????? Simulation,是指用軟件去模擬某個系統(tǒng)的功能,并不要求實現(xiàn)該系統(tǒng)的內(nèi)部細節(jié),只要在同樣的輸入下,軟件的輸出和所模擬系統(tǒng)的輸出一致就可以了。比如你在PC機上用一個軟件去simulate紅白機的游戲“超級瑪莉”,你只要讓你的軟件運行出來的效果和紅白機上“超級瑪莉”游戲一樣就可以,至于這個軟件你是怎么實現(xiàn)則無關(guān)緊要。
??????? Emulation,是指用軟件去模擬出某個系統(tǒng)中各個部件的組成,真實地模擬出系統(tǒng)的運行機制。這就要求軟件的作者需要非常了解所模擬系統(tǒng)的內(nèi)部結(jié)構(gòu),能夠利用各種數(shù)據(jù)結(jié)構(gòu)實現(xiàn)出各個部件的模型。同樣去emulate紅白機的游戲“超級瑪莉”,首先就要用軟件模擬出紅白機中的各種硬件,如CPU、內(nèi)存、圖形處理芯片、聲音處理芯片以及游戲手柄等,再通過將加載游戲的ROM來運行該游戲?,F(xiàn)在各種游戲模擬器,如MAME、VirtualNes都是采用emulation的手段去實現(xiàn)游戲的模擬,所以它們又叫做emulator。
????????模擬就是指用在某個平臺上用純軟件的方法去模擬另一個平臺上程序的運行,模擬包含“Simulation”和“Emulation”,通過上面對這兩者的分析大家可以知道,“Simulation”是一種高層次上的模擬,類似于“黑盒”,而“Emulation”更注重于對底層的模擬,類似于“白盒”。
??????? 仿真的解釋就比較多了,有的說仿真是指用機器底層的微指令來解釋執(zhí)行另一個平臺的指令,有的說仿真是軟件結(jié)合硬件來模擬另一種平臺程序的運行,即“硬件仿真+軟件模擬”。其實這兩者是針對不同仿真對象和宿主平臺而言的:前者具體的是講系統(tǒng)仿真,是以大型機CPU(現(xiàn)在也可以指PC機)為仿真對象的,通常在研制CPU的過程中,用宿主機的CPU去仿真其軟件的運行,這樣可以使硬件和軟件的研發(fā)過程同步,加快整體系統(tǒng)的研發(fā)進度;后者一般指嵌入式仿真,做過嵌入式開發(fā)的朋友都知道,開發(fā)過程中經(jīng)常要用仿真器去調(diào)試程序,我們可以在PC機上調(diào)試嵌入式系統(tǒng)中的某個程序,通過仿真器向嵌入式微控制器發(fā)送調(diào)試信號(如JTAG),使微控制器執(zhí)行某條指令,而PC機上會相應(yīng)地顯示出該條指令執(zhí)行的結(jié)果,看上去似乎是PC在“執(zhí)行”這條指令一樣,這樣來達到仿真的目的。但不管怎樣,仿真總是與硬件相關(guān)的,這一點與模擬是有區(qū)別的。
??????? 現(xiàn)在還出現(xiàn)了“虛擬機”一詞,在我看來,虛擬機更多地采用了模擬技術(shù),而不是仿真,但是虛擬機相對于一個模擬器而言要復(fù)雜很多,像Bochs這樣的虛擬機實質(zhì)上應(yīng)該是一個emulator,而像VirtualPC、VMWare和VirtualBox這樣的虛擬機,則采用了更為復(fù)雜的技術(shù),既有simulation,也有emulation,甚至還有系統(tǒng)仿真,所以不能單純地將它認(rèn)為是一個模擬器。