高可移植性x86模擬器的指令翻譯和系統(tǒng)態(tài)實(shí)現(xiàn)框架
發(fā)布時(shí)間:2020-05-15 16:32
【摘要】:過(guò)去的三十多年來(lái),無(wú)論是在商用領(lǐng)域還是個(gè)人家用領(lǐng)域,基于Intelx86[7]架構(gòu)的服務(wù)器和個(gè)人主機(jī)都具有很高的市場(chǎng)份額[8]。不過(guò)近些年來(lái),隨著消費(fèi)者對(duì)智能手機(jī)和平板電腦等移動(dòng)計(jì)算設(shè)備的需求越來(lái)越大,以ARM[4]為領(lǐng)頭羊的RISC[1]芯片因?yàn)槠涫‰、開(kāi)發(fā)周期短、芯片尺寸小等優(yōu)勢(shì),對(duì)x86芯片發(fā)起了挑戰(zhàn)。另一方面,出于對(duì)國(guó)家安全和科技發(fā)展的戰(zhàn)略角度考慮,中國(guó)也自主研發(fā)出了“龍芯”[26]和“眾志Unicore-2"[27]等一批RISC處理器。倘若ARM、“龍芯”和“眾志Unicore-2"等RISC處理器能夠兼容流行架構(gòu)x86的操作系統(tǒng)和應(yīng)用程序的話,則能夠更容易地獲得終端用戶的接受。 為了使得異體系架構(gòu)處理器對(duì)x86上運(yùn)行的軟件可兼容,x86模擬器是個(gè)理想的解決方案。它可以運(yùn)行在非x86體系架構(gòu)的平臺(tái)上,模擬出符合x(chóng)86標(biāo)準(zhǔn)的虛擬硬件環(huán)境,使得專(zhuān)門(mén)針對(duì)x86架構(gòu)編寫(xiě)的軟件可以通過(guò)模擬器建立的虛擬x86環(huán)境,運(yùn)行在異體系架構(gòu)的處理器上。 口前,支持多種微處理器架構(gòu)宿主硬件平臺(tái)的x86模擬器都是運(yùn)行在用戶態(tài)的,而可運(yùn)行在系統(tǒng)態(tài)的x86模擬器都是專(zhuān)門(mén)針對(duì)特定宿主硬件平臺(tái)開(kāi)發(fā)的。因此,針對(duì)中國(guó)自主研發(fā)的微處理器架構(gòu)的系統(tǒng)態(tài)x86模擬器需要專(zhuān)門(mén)研發(fā)。 本文章要介紹一個(gè)高可移植性的x86模擬器PEX86 (Portable Emulator for x86)的動(dòng)態(tài)二進(jìn)制指令翻譯方法和該模擬器在系統(tǒng)態(tài)實(shí)現(xiàn)的軟件框架。PEX86的解釋型動(dòng)態(tài)二進(jìn)制指令翻譯技術(shù)具有較好的可移植性。它運(yùn)行在計(jì)算機(jī)的系統(tǒng)態(tài),即PEX86無(wú)需操作系統(tǒng)的支持,直接管理所有的系統(tǒng)硬件資源。由于要模擬整個(gè)x86硬件平臺(tái)的工作量較大,PEX86現(xiàn)階段僅支持x86硬件平臺(tái)工作在實(shí)模式下的模擬。不過(guò),這為今后進(jìn)一步支持x86硬件平臺(tái)工作在保護(hù)模式下的模擬打下了堅(jiān)實(shí)基礎(chǔ)。 本文的主要貢獻(xiàn)如下: 1、探索了針對(duì)中國(guó)自主研發(fā)的微處理器面向x86操作系統(tǒng)和應(yīng)用程序的可兼容問(wèn)題的解決方法。 2、使用了具有較好可移植性的動(dòng)態(tài)二進(jìn)制指令翻譯技術(shù)和模擬器在系統(tǒng)態(tài)的實(shí)現(xiàn)框架,令運(yùn)行在系統(tǒng)態(tài)的模擬器可較容易地支持不同微處理器架構(gòu)的宿主硬件平臺(tái)。 3、使用按功能分層和抽象化、模塊化的系統(tǒng)態(tài)實(shí)現(xiàn)框架,使得虛擬外設(shè)和宿主平臺(tái)外設(shè)之間的映射關(guān)系靈活、可配置,也使得在模擬器中增加和修改一個(gè)虛擬外設(shè)的工作變得簡(jiǎn)單。
【圖文】:
內(nèi)存訪問(wèn)地址對(duì)齊(ByteAl19恤ent)所有處理器能處理的數(shù)據(jù)長(zhǎng)度都是2的n次方(n為大于等于O的整數(shù))字節(jié)。比如一個(gè)典型的x8632位處理器能處理的數(shù)據(jù)類(lèi)型有Byte類(lèi)型(l個(gè)節(jié)),WORD類(lèi)型(2個(gè)字節(jié))和Dw0RD類(lèi)型(4個(gè)字節(jié)),若是64位處理器的還能處理長(zhǎng)度是8個(gè)字節(jié)或者16個(gè)字節(jié)的數(shù)據(jù)。因此有些處理器會(huì)要求存放個(gè)x個(gè)字節(jié)長(zhǎng)度的數(shù)據(jù)時(shí),其內(nèi)存地址必須也是x個(gè)字節(jié)對(duì)齊的。例如當(dāng)程序求存放一個(gè)占據(jù)4字節(jié)的整型時(shí),該整型一定要存放在4字節(jié)對(duì)齊的地址(即內(nèi)存地址必須能被4整除)。為什么會(huì)有上述的限制呢?理解了內(nèi)存組織,就會(huì)清楚了。CPU通過(guò)地址線來(lái)存取內(nèi)存中的數(shù)據(jù),32位的CPU的地址總線寬度為32位,標(biāo)為A【O:31〕。一個(gè)總線周期內(nèi),CPU從內(nèi)存讀/寫(xiě)32位。但是每次CPU只能在能夠被4整除地址進(jìn)行內(nèi)存訪問(wèn),這是因?yàn)?2位CPu不使用地址總線的A1和A2。比如ARM,的A[O:l]用于字節(jié)選擇,用于邏輯控制,而不和存儲(chǔ)器相連,存儲(chǔ)器連接A〔2:31〕。當(dāng)一個(gè)32位的CPU從內(nèi)存中要取出一個(gè)char類(lèi)型的數(shù)據(jù)(占1個(gè)
接下來(lái)我們研究一下一個(gè)在ARM上運(yùn)行的x86模擬器動(dòng)態(tài)地翻澤一條MOVEAX,〔EBX〕指令(將EBX寄存器內(nèi)所指的內(nèi)存地址的32位數(shù)據(jù)讀取到EAX寄存器,卜,【23])的流程,如圖2.3所示。盡叩code盡mod-翻翻譯指令令 XXX86RAMMM寫(xiě)寫(xiě)操作數(shù)數(shù) 數(shù)模擬計(jì)算 算 MMMOVEAX,[EBXIII尸一一一少\}{月ov‘一,/!’“r 11llOVr7,r2r6,,X86--RAM一BASE+r7 f1.r6圖2.3動(dòng)態(tài)指令翻譯的工作流程一個(gè)二進(jìn)制指令翻譯模塊一般都會(huì)被設(shè)計(jì)成一個(gè)包含了取指令、翻譯指令、取出操作數(shù)(從被模擬的X86內(nèi)存中)、模擬計(jì)算、寫(xiě)回操作數(shù)(向被模擬的x86內(nèi)存)這5個(gè)階段的無(wú)限循環(huán)。除非遇到一些特殊情況,比如產(chǎn)生了x86的硬件或者軟件中斷等,否則這個(gè)無(wú)限循環(huán)會(huì)一直進(jìn)行下去。為了模擬 x86CPU取指令的行為,x86模擬器中也會(huì)有一個(gè)EIP寄存器
【學(xué)位授予單位】:復(fù)旦大學(xué)
【學(xué)位級(jí)別】:碩士
【學(xué)位授予年份】:2011
【分類(lèi)號(hào)】:TP332
【圖文】:
內(nèi)存訪問(wèn)地址對(duì)齊(ByteAl19恤ent)所有處理器能處理的數(shù)據(jù)長(zhǎng)度都是2的n次方(n為大于等于O的整數(shù))字節(jié)。比如一個(gè)典型的x8632位處理器能處理的數(shù)據(jù)類(lèi)型有Byte類(lèi)型(l個(gè)節(jié)),WORD類(lèi)型(2個(gè)字節(jié))和Dw0RD類(lèi)型(4個(gè)字節(jié)),若是64位處理器的還能處理長(zhǎng)度是8個(gè)字節(jié)或者16個(gè)字節(jié)的數(shù)據(jù)。因此有些處理器會(huì)要求存放個(gè)x個(gè)字節(jié)長(zhǎng)度的數(shù)據(jù)時(shí),其內(nèi)存地址必須也是x個(gè)字節(jié)對(duì)齊的。例如當(dāng)程序求存放一個(gè)占據(jù)4字節(jié)的整型時(shí),該整型一定要存放在4字節(jié)對(duì)齊的地址(即內(nèi)存地址必須能被4整除)。為什么會(huì)有上述的限制呢?理解了內(nèi)存組織,就會(huì)清楚了。CPU通過(guò)地址線來(lái)存取內(nèi)存中的數(shù)據(jù),32位的CPU的地址總線寬度為32位,標(biāo)為A【O:31〕。一個(gè)總線周期內(nèi),CPU從內(nèi)存讀/寫(xiě)32位。但是每次CPU只能在能夠被4整除地址進(jìn)行內(nèi)存訪問(wèn),這是因?yàn)?2位CPu不使用地址總線的A1和A2。比如ARM,的A[O:l]用于字節(jié)選擇,用于邏輯控制,而不和存儲(chǔ)器相連,存儲(chǔ)器連接A〔2:31〕。當(dāng)一個(gè)32位的CPU從內(nèi)存中要取出一個(gè)char類(lèi)型的數(shù)據(jù)(占1個(gè)
接下來(lái)我們研究一下一個(gè)在ARM上運(yùn)行的x86模擬器動(dòng)態(tài)地翻澤一條MOVEAX,〔EBX〕指令(將EBX寄存器內(nèi)所指的內(nèi)存地址的32位數(shù)據(jù)讀取到EAX寄存器,卜,【23])的流程,如圖2.3所示。盡叩code盡mod-翻翻譯指令令 XXX86RAMMM寫(xiě)寫(xiě)操作數(shù)數(shù) 數(shù)模擬計(jì)算 算 MMMOVEAX,[EBXIII尸一一一少\}{月ov‘一,/!’“r 11llOVr7,r2r6,,X86--RAM一BASE+r7 f1.r6圖2.3動(dòng)態(tài)指令翻譯的工作流程一個(gè)二進(jìn)制指令翻譯模塊一般都會(huì)被設(shè)計(jì)成一個(gè)包含了取指令、翻譯指令、取出操作數(shù)(從被模擬的X86內(nèi)存中)、模擬計(jì)算、寫(xiě)回操作數(shù)(向被模擬的x86內(nèi)存)這5個(gè)階段的無(wú)限循環(huán)。除非遇到一些特殊情況,比如產(chǎn)生了x86的硬件或者軟件中斷等,否則這個(gè)無(wú)限循環(huán)會(huì)一直進(jìn)行下去。為了模擬 x86CPU取指令的行為,x86模擬器中也會(huì)有一個(gè)EIP寄存器
【學(xué)位授予單位】:復(fù)旦大學(xué)
【學(xué)位級(jí)別】:碩士
【學(xué)位授予年份】:2011
【分類(lèi)號(hào)】:TP332
【相似文獻(xiàn)】
相關(guān)期刊論文 前10條
1 馬平濤;;淺析公司服務(wù)器虛擬化[J];中國(guó)新技術(shù)新產(chǎn)品;2009年21期
2 安建峰;樊曉椏;;x86指令集兼容處理器中微指令的設(shè)計(jì)與驗(yàn)證[J];西北工業(yè)大學(xué)學(xué)報(bào);2010年02期
3 張倫;;X86虛擬機(jī)的實(shí)現(xiàn)[J];計(jì)算機(jī)與網(wǎng)絡(luò);2007年10期
4 俞建新;PowerPC發(fā)展綜述[J];工業(yè)控制計(jì)算機(jī);2000年02期
5 王愛(ài)榮;;防火墻三大硬件體系市場(chǎng)未來(lái)分析[J];信息安全與通信保密;2006年02期
6 陳q
本文編號(hào):2665324
本文鏈接:http://sikaile.net/kejilunwen/jisuanjikexuelunwen/2665324.html
最近更新
教材專(zhuān)著