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