模擬器(simulator)是用于分析研究目標(biāo)系統(tǒng)本身,模擬器系統(tǒng)本身要跟目標(biāo)系統(tǒng)保持一致。例如飛行模擬器對于用戶來講其本身要跟真正的飛機(jī)一致;再比如gem5模擬器,其本身要跟CPU所有內(nèi)部行為一致(包括內(nèi)部運(yùn)行原理都要一致)。好的模擬器本身也可以仿真其目標(biāo)系統(tǒng),但不是所有模擬器都有這個特性。
仿真器(emulator)的目的是作為目標(biāo)系統(tǒng)的替代品,可以完全替代目標(biāo)系統(tǒng),完成其對外的功能,即仿真器系統(tǒng)只需要保證呈現(xiàn)給外部的行為跟目標(biāo)系統(tǒng)一致(不需要保證內(nèi)部運(yùn)行原理一致)。例如想在電腦上玩小時候玩的街機(jī)游戲,就需要在電腦上安裝一個街機(jī)仿真器(雖然很多人喜歡稱其為“街機(jī)模擬器”)。使用仿真器的目的是模擬目標(biāo)系統(tǒng)呈現(xiàn)出的運(yùn)行環(huán)境,仿真器保證的是完成目標(biāo)系統(tǒng)相同的行為,不在乎其內(nèi)部實現(xiàn)原理,再例如EMU8086仿真器,可以在另一臺非8086電腦上仿真8086微處理器的行為。即使再好的仿真器也不能作為模擬器用于研究目標(biāo)系統(tǒng)內(nèi)部運(yùn)行原理。針對gem5,其本身是一個CPU模擬器,但是因為其也能做到仿真器可以完成的工作(gem5運(yùn)行于Atmoic模式), 盡管其運(yùn)行速度相比真正CPU差很多,也可以認(rèn)為其是一個類似于EMU8086的CPU仿真器。但是盡管gem5運(yùn)行于亂序(Out Of Order, 簡稱O3)時,gem5可以被看做CPU模擬器,其內(nèi)部模擬的CPU各個模塊也不是完全一樣,所以也可以任務(wù),gem5是由仿真多個部件的仿真器構(gòu)成的??傊M器針對目標(biāo)系統(tǒng)內(nèi)部進(jìn)行模擬,仿真器用于仿真目標(biāo)系統(tǒng)對外的行為。
仿真器和模擬器的不同----程序運(yùn)行區(qū)別
在線仿真器ICE(In\ Circuit Emulator)能檢查運(yùn)行程序的處理器的狀態(tài)。實際上,ICE取代了(或仿真了)目標(biāo)板上的處理器,是一種強(qiáng)有力的工具。程序在ICE中可以實時運(yùn)行、調(diào)試。 模擬器(simulator)是完全基于主機(jī)程序的。它模擬了目標(biāo)處理器的功能和指令系統(tǒng),其用戶界面通常和仿真器的一樣或比較類似。模擬器最大的缺點(diǎn)是它僅能模擬處理器,而嵌入式系統(tǒng)經(jīng)常包含一個或更多重要的外圍部件。模擬器無能為力而且不能實時運(yùn)行程序。它只能起輔助作用進(jìn)行軟件粗調(diào)試,是純軟件的工具;而仿真器是硬件工具。
仿真器和模擬器的不同----工作過程區(qū)別
模擬器是模擬出原系統(tǒng)的一個抽象模型,而不需要真的去做真實系統(tǒng)要做的事情。因此它其實不具備真實系統(tǒng)的功能,只是當(dāng)某一功能執(zhí)行時,通常不必輸出功能執(zhí)行的結(jié)果,只是在simulator中記錄下由此引發(fā)的狀態(tài)變化。因此它通常用于設(shè)計初期的模型驗證。
仿真器則更進(jìn)一步,要真正地去做所有真實系統(tǒng)能做的事情,只不過做的“過程”不同,它一般用于處理兼容性問題和在資源有限的條件下完成系統(tǒng)原型的實現(xiàn)。
如果把真實系統(tǒng)比作一個人的話,simulator就是這個人的一幅肖像畫,而emulator則是這個人的一個克隆人。
舉個例子,我們要實現(xiàn)一個p2p文件分發(fā)系統(tǒng)。
最開始的時候我們可以實現(xiàn)一個simulator:它用一個函數(shù)來模擬節(jié)點(diǎn)間的通信,這個函數(shù)的輸入是網(wǎng)絡(luò)性能(帶寬,跳數(shù)),輸出是通信時延————注意,并沒有真正的數(shù)據(jù)在傳輸和拷貝,甚至都沒有真正的節(jié)點(diǎn),我們只是模擬了通信時延這個“特征(feature)”。
接下來,我們把這個分發(fā)系統(tǒng)實現(xiàn)了,編譯成一個exe文件,但這時我們發(fā)現(xiàn)我們沒有足夠多的計算機(jī)來組成一個真實的、具有足夠規(guī)模的網(wǎng)絡(luò)來進(jìn)一步測試(通常p2p網(wǎng)絡(luò)的節(jié)點(diǎn)數(shù)成百上千),這時,我們可以寫一個emulator:它可以區(qū)分同一個計算機(jī)上的不同進(jìn)程,因此我們可以在一臺計算機(jī)上開100個進(jìn)程,這樣可以用100臺計算機(jī)模擬出10000臺計算機(jī)的網(wǎng)絡(luò)————注意,此時數(shù)據(jù)真的是通過Socket在傳輸,只不過有的數(shù)據(jù)走的是loopback口,并沒有真的進(jìn)網(wǎng)卡。
-
仿真器
+關(guān)注
關(guān)注
14文章
1017瀏覽量
83721 -
模擬器
+關(guān)注
關(guān)注
2文章
874瀏覽量
43208
發(fā)布評論請先 登錄
相關(guān)推薦
評論