• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于龍芯的Windows軟件運行環(huán)境的設(shè)計與實現(xiàn)

    2014-03-07 08:28:06靳國杰王金雙
    關(guān)鍵詞:指令集龍芯二進(jìn)制

    蘇 煜,張 濤,靳國杰,榮 輝,王金雙,趙 敏

    (1.解放軍理工大學(xué)指揮信息系統(tǒng)學(xué)院,江蘇南京210007)(2.龍芯中科技術(shù)有限公司,北京100098)

    核心軟硬件的自主化對于國家信息安全至關(guān)重要.目前,國產(chǎn)處理器主要有龍芯、飛騰等;操作系統(tǒng)主要代表是中標(biāo)麒麟;數(shù)據(jù)庫主要有人大金倉、神通和達(dá)夢等.龍芯處理器采用MIPS指令集,運行類Unix操作系統(tǒng),由于該平臺上應(yīng)用軟件還相對匱乏,且Windows程序無法直接在該平臺上運行,這對傳統(tǒng)應(yīng)用的移植以及該平臺的推廣與應(yīng)用造成一定的影響.

    傳統(tǒng)的軟件移植的主要類型通常是二進(jìn)制移植(移植可執(zhí)行文件)和源代碼移植(移植源語言表達(dá)式)[1].源代碼移植是通過對軟件源代碼進(jìn)行分析,找出其相關(guān)于目標(biāo)環(huán)境的代碼,并進(jìn)行修改,使其符合環(huán)境的運行要求,但有些時候源代碼無法獲得.二進(jìn)制移植是指可執(zhí)行文件通過向目標(biāo)環(huán)境移植,達(dá)到在目標(biāo)環(huán)境正常運行的移植方法.虛擬化技術(shù)是常用的二進(jìn)制移植方法,但目前龍芯處理器的性能還難以克服當(dāng)前虛擬化技術(shù)帶來的性能影響.

    因此,文中提出了在龍芯處理器上交叉編譯Wine軟件,使其提供Windows應(yīng)用軟件運行環(huán)境的輕量級解決方案,并通過Wine與Bochs模擬器相結(jié)合實現(xiàn)了X86指令集向龍芯MIPS指令集的解釋執(zhí)行,從而實現(xiàn)了Windows程序向龍芯平臺的零修改遷移.

    1 相關(guān)技術(shù)的研究與展望

    指令集仿真是解決不同指令集之間軟件二進(jìn)制移植的主要方法.當(dāng)前,對指令集的仿真主要分為兩種方式:一種是指令解釋執(zhí)行,一種是二進(jìn)制翻譯[2].解釋執(zhí)行通過對源指令進(jìn)行取指、譯碼和仿真,實現(xiàn)源指令集體系結(jié)構(gòu)ISA(instruction set architecture)向目標(biāo)ISA的映射.Bochs便是一個開源的指令集解釋器,它可以通過對不同設(shè)備進(jìn)行模擬,實現(xiàn)應(yīng)用對虛擬化的不同要求,而不需要對整個系統(tǒng)進(jìn)行仿真.二進(jìn)制翻譯是把源指令塊翻譯成執(zhí)行同樣功能的目標(biāo)指令,因為是指令塊之間的對應(yīng),相對于解釋執(zhí)行,效率會更高.QEMU(quick EMUlator)是目前較為先進(jìn)的支持多元多目標(biāo)平臺的動態(tài)二進(jìn)制翻譯系統(tǒng)[3].為了實現(xiàn)Windows應(yīng)用程序在跨操作系統(tǒng),跨指令集的平臺下運行,不僅需要對用戶指令進(jìn)行翻譯,同時還需要仿真Windows的系統(tǒng)調(diào)用.單純的使用指令集仿真無形當(dāng)中加重了虛擬化的負(fù)擔(dān),影響了使用效率.因此,將Wine編譯到MIPS環(huán)境,由Wine來提供Windows應(yīng)用程序所需的部分API,同時通過Bochs實現(xiàn)在MIPS環(huán)境下用戶指令和部分Windows原生動態(tài)庫的解釋執(zhí)行,構(gòu)建Bochs+Wine方式提高運行效率.未來可考慮實現(xiàn)QEMU+Wine的方式來進(jìn)一步優(yōu)化系統(tǒng),提高效率.

    采用分層思想的計算機(jī)體系結(jié)構(gòu)存在ISA和ABI(application binary interface)[4]兩個重要接口.ISA由用戶ISA和系統(tǒng)ISA組成,ABI主要由系統(tǒng)調(diào)用接口和用戶ISA組成[5].X86與MIPS分別有不同的ISA且相互不兼容.同時為了提高軟件在不同ISA的運行效率,面臨著系統(tǒng)調(diào)用跨平臺執(zhí)行的性能優(yōu)化問題.

    2 系統(tǒng)的設(shè)計與實現(xiàn)

    2.1 系統(tǒng)架構(gòu)

    為了迎合自主化的需要,該虛擬結(jié)構(gòu)運行在搭載Linux操作系統(tǒng)的龍芯3A處理器上.龍芯3A是國家自主研制的基于MIPS指令集的處理器.在該平臺上運行X86指令的Windows應(yīng)用程序既跨體系結(jié)構(gòu)又跨操作系統(tǒng)平臺.本系統(tǒng)采用開源軟件Wine和Bochs來完成此任務(wù),整體設(shè)計方案如圖1.

    圖1 跨平臺中間件的整體設(shè)計方案Fig.1 Overall design of cross platform middleware

    該系統(tǒng)通過虛擬化技術(shù)構(gòu)造一個進(jìn)程虛擬機(jī),該虛擬機(jī)通過Wine提供并實現(xiàn)應(yīng)用程序運行所需的動態(tài)庫.結(jié)合X86模擬器對應(yīng)用程序調(diào)用的Windows原生動態(tài)庫以及Wine的初始化指令進(jìn)行翻譯執(zhí)行,通過X86模擬器實現(xiàn)Wine在不同ISA平臺下對Windows系統(tǒng)庫的兼容.

    虛擬化是構(gòu)建一個將虛擬的客戶系統(tǒng)映射到真實的主機(jī)系統(tǒng)上的同態(tài).通過虛擬化技術(shù),可以實現(xiàn)依賴于客戶系統(tǒng)的軟件在主機(jī)系統(tǒng)上良好運行.虛擬化過程包含兩個部分:①把虛擬資源或狀態(tài)映射成底層機(jī)器中的真實資源;②使用真實機(jī)器上的指令和/或系統(tǒng)調(diào)用來執(zhí)行虛擬機(jī)的指令和/或系統(tǒng)調(diào)用規(guī)定的活動[6].虛擬機(jī)便是通過虛擬化技術(shù),構(gòu)建一個介于主機(jī)和客戶系統(tǒng)的中間件實現(xiàn)仿真平臺的設(shè)計架構(gòu).通過虛擬機(jī)ABI或ISA的仿真,實現(xiàn)可執(zhí)行文件的跨平臺移植.

    2.2 ABI仿真虛擬機(jī)Wine

    Wine通過Window API仿真實現(xiàn)Windows軟件在類UNIX系統(tǒng)中運行[7].與一般的模擬器不同,它并不提供虛擬cpu以及I/O設(shè)備的仿真,而是通過Winelib把Windows API(應(yīng)用程序接口)用標(biāo)準(zhǔn)的Unix和X接口重新實現(xiàn)(圖2).Windows應(yīng)用程序的運行主要依賴于 NTDLL,KERNEL32,GDI32和USER32 4個動態(tài)庫.Wine已經(jīng)基本實現(xiàn)該DLL動態(tài)庫與UNIX API的對應(yīng).Wine與Windows NT架構(gòu)對應(yīng)關(guān)系如圖 3[8].

    圖2 Wine實現(xiàn)相同指令集下的虛擬機(jī)架構(gòu)Fig.2 Virtual machine architecture of Wine implementation

    圖3 Wine架構(gòu)以及與Windows NT架構(gòu)的對應(yīng)關(guān)系Fig.3 Corresponding relation between Wine architecture and Windows NT architecture

    2.3 ISA仿真虛擬機(jī)Bochs

    Bochs是開源的X86仿真平臺.它能夠支持多種不同指令集實現(xiàn)跨指令集的X86仿真.Bochs通過在不同的操作系統(tǒng)與指令集和目標(biāo)應(yīng)用之間構(gòu)建一個虛擬的仿真層(圖4),將目標(biāo)軟件執(zhí)行的代碼指令解釋為主機(jī)可識別指令.Bochs可以模擬Intel X86 CPU、通用I/O設(shè)備和客戶BIOS,還能夠模擬運行大部分的操作系統(tǒng),如Linux,DOS,Windows 95/98,Windows NT/2000/XP 等[9].Bochs 能夠被編譯和使用為多種模式,通常使用Bochs來提供完整的X86 PC模擬器,包括X86處理器,硬件設(shè)備和內(nèi)存.

    圖4 利用Bochs實現(xiàn)在MIPS架構(gòu)下的Windows應(yīng)用Fig.4 Application of Windows in MIPS framework using Bochs

    2.4 Wine和Bochs交互設(shè)計

    由上文可以得出,Windows應(yīng)用程序在運行中,可能會調(diào)用Wine內(nèi)置動態(tài)庫,或者Windows原生動態(tài)庫.在本系統(tǒng)中,由于應(yīng)用程序和Windows原生動態(tài)庫是X86指令集的二進(jìn)制制品,他們都要通過Bochs來模擬執(zhí)行.

    系統(tǒng)在運行Windows應(yīng)用程序時,整個進(jìn)程地址空間中存在著如下幾種形態(tài)的線性區(qū):①Windows應(yīng)用程序,PE格式,X86指令;②Windows原生動態(tài)庫,PE格式,X86指令;③Wine內(nèi)置動態(tài)庫,ELF格式,MIPS指令;④Bochs模塊,ELF格式,MIPS指令.相應(yīng)的,系統(tǒng)在運行時,有兩種執(zhí)行形態(tài):①Wine內(nèi)置動態(tài)庫和Bochs模塊,在龍芯CPU上直接執(zhí)行;②Windows應(yīng)用程序和Windows原生動態(tài)庫,通過Bochs模擬執(zhí)行.

    系統(tǒng)在運行時,需要在線性區(qū)之間進(jìn)行交互,由一個線性區(qū)到另一個線性區(qū)的切換往往通過函數(shù)調(diào)用.根據(jù)線性區(qū)類型和函數(shù)調(diào)用方式,文中把交互分為如下4種類型,并針對每種類型,進(jìn)行相應(yīng)的接口設(shè)計.

    1)從X86指令線性區(qū)調(diào)用到X86指令線性區(qū).X86指令的線性區(qū)都是在Bochs上執(zhí)行,這種類型的調(diào)用方式在X86指令內(nèi)部已經(jīng)完成,并不需要多余的操作.

    2)從MIPS指令線性區(qū)調(diào)用到MIPS指令線性區(qū).MIPS指令的線性區(qū)是在龍芯CPU上直接執(zhí)行,這種類型的調(diào)用方式也不需要二進(jìn)制指令外的多余的操作.

    3)從X86指令線性區(qū)調(diào)用到MIPS指令線性區(qū).X86指令的線性區(qū)是在Bochs上執(zhí)行的,在本系統(tǒng)中,這種類型的調(diào)用存在于兩個地方:Bochs對指令JMP和CALL的模擬,系統(tǒng)需要在這兩處地方進(jìn)行相應(yīng)的判斷,如果判斷為到MIPS指令線性區(qū)的調(diào)用,則跳轉(zhuǎn)到MIPS指令執(zhí)行.

    4)從MIPS指令線性區(qū)調(diào)用到X86指令線性區(qū).回調(diào)就是這種類型的一個典型.當(dāng)回調(diào)發(fā)生時,一部分回調(diào)會跳轉(zhuǎn)到Wine內(nèi)置動態(tài)庫,另一部分會跳轉(zhuǎn)到X86指令部分.除了回調(diào),Wine的內(nèi)置動態(tài)庫中也會有向X86指令部分的調(diào)用.

    系統(tǒng)設(shè)計了相應(yīng)的調(diào)用方式,如圖5所示.

    圖5 Wine和Bochs交互設(shè)計框圖Fig.5 Interaction design of Wine and Bochs

    2.5 Wine和Bochs執(zhí)行的雙向調(diào)用機(jī)制實現(xiàn)

    2.5.1 X86指令線性區(qū)調(diào)用MIPS指令函數(shù)

    系統(tǒng)開始運行時,會統(tǒng)計所有MIPS動態(tài)庫中API的名字、地址、參數(shù)個數(shù)等,并把它們記錄在數(shù)據(jù)表中.Bochs在對指令JMP和CALL模擬時,首先獲得要跳轉(zhuǎn)到的指令的地址,該地址存儲在EIP(extended instruction pointer)寄存器中,系統(tǒng)判斷該EIP是指向X86指令空間,還是MIPS指令空間.Bochs在初始化時,遍歷了該進(jìn)程空間中所有的MIPS動態(tài)庫,查表獲取每個MIPS動態(tài)庫的基地址和大小.系統(tǒng)通過將EIP的值和該數(shù)據(jù)表中地址空間范圍比較,來確定該EIP是否指向MIPS指令空間.如果該EIP屬于MIPS指令空間,則進(jìn)行相應(yīng)的處理,跳轉(zhuǎn)到MIPS函數(shù)執(zhí)行;否則繼續(xù)按照Bochs的方式執(zhí)行.

    2.5.2 MIPS指令線性區(qū)調(diào)用X86指令函數(shù)

    這種類型的調(diào)用主要分為兩種情況:①回調(diào)函數(shù);②PE格式的動態(tài)庫在加載完成后,要執(zhí)行它的入口函數(shù),執(zhí)行入口函數(shù)需要進(jìn)入X86指令空間.

    在Bochs中,本文設(shè)計了開啟Bochs模擬執(zhí)行的接口.每個接口都是一個X86指令空間的函數(shù)調(diào)用,根據(jù)調(diào)用的參數(shù)個數(shù)設(shè)計不同的接口類型.接口內(nèi)部的實現(xiàn)中,首先要找到 Bochs的虛擬CPU,然后進(jìn)行相應(yīng)的現(xiàn)場保護(hù),之后進(jìn)行函數(shù)調(diào)用,調(diào)用完成后返回.2.6 多線程的實現(xiàn)

    Wine中的程序通過createThread創(chuàng)建新的線程,由Wineserver進(jìn)行線程調(diào)度,并發(fā)起線程的執(zhí)行.新創(chuàng)建的線程從一個入口開始執(zhí)行,線程可能會執(zhí)行到X86指令,需要Bochs來模擬執(zhí)行.

    由于每個線程都要有一個獨立的模擬執(zhí)行部件,而且在執(zhí)行的時機(jī)上是物理并發(fā)的,因此需要創(chuàng)建多個Bochs模擬CPU,每個模擬CPU用于執(zhí)行一個線程中的X86指令.

    3 系統(tǒng)評估

    本文測試評估時基于龍芯3A硬件平臺實現(xiàn)了一個原型系統(tǒng).實驗系統(tǒng)的運行環(huán)境為龍芯3A 8核心1Ghz處理器,DDR800 2G內(nèi)存的服務(wù)器,中標(biāo)麒麟高級服務(wù)器版V6.0操作系統(tǒng).系統(tǒng)評估實驗設(shè)置了系統(tǒng)功能和系統(tǒng)性能兩種類型的測試,其中:

    1)系統(tǒng)功能測試:通過在原型系統(tǒng)中運行Delphi,VC++開發(fā)的簡單單線程程序和多線程程序,以及復(fù)雜的MIS系統(tǒng)程序來評估系統(tǒng)功能的完善性.

    2)系統(tǒng)性能測試:以Windows下運行記事本程序的響應(yīng)時間作為基準(zhǔn),通過本原型系統(tǒng)運行Windows下編譯的記事本程序和 Linux下通過Wine交叉編譯生成的記事本程序的響應(yīng)時間來評估系統(tǒng)性能.

    3.1 系統(tǒng)功能測試

    采用虛擬執(zhí)行環(huán)境運行一個delphi程序,該程序繪制基本的delphi控件,并多線程的運行(圖6a)),采用該虛擬執(zhí)行環(huán)境運行貪吃蛇,如圖6b).采用該虛擬執(zhí)行環(huán)境運行一個數(shù)據(jù)庫客戶端,該客戶端采用ODBC的方式訪問遠(yuǎn)程數(shù)據(jù)庫服務(wù)器(如圖6c)).該數(shù)據(jù)庫客戶端可以正常讀寫服務(wù)器里的數(shù)據(jù).

    圖6 功能測試Fig.6 Function test

    3.2 系統(tǒng)性能測試

    獲得 Windows記事本可執(zhí)行文件 notepad.exe,在Linux終端上使用命令Wine notepad.exe運行notepad.exe程序(圖7).測試該應(yīng)用在運行速度、響應(yīng)時間、穩(wěn)定性等性能是否能夠達(dá)到一般用戶的使用要求.測試中與Windows平臺進(jìn)行比較,測試實例如表1,測試結(jié)果如表2.

    表1 測試實例Table 1 Test case

    表2 測試結(jié)果Table 2 Test results

    3.3 測試結(jié)果分析

    經(jīng)系統(tǒng)功能測試,該虛擬環(huán)境支持Delphi,C,C++等多種語言開發(fā)的程序,以及支持網(wǎng)絡(luò)、數(shù)據(jù)庫等多種功能.經(jīng)系統(tǒng)性能測試,系統(tǒng)運行notepad.exe基本滿足使用要求,但需要進(jìn)一步改進(jìn).同時,用oprofile軟件分析影響虛擬環(huán)境性能的函數(shù),為以后的優(yōu)化提供了參考.

    4 結(jié)論

    文中設(shè)計的零修改軟件移植中間件可以很好地完成Windows程序跨平臺移植,基本實現(xiàn)了簡單程序(notepad.exe)在龍芯平臺上的運行.通過優(yōu)化結(jié)構(gòu),目標(biāo)實現(xiàn)Office軟件在龍芯平臺上的正常運行.這將使國家機(jī)關(guān)在自主化平臺上的辦公得以實現(xiàn).同時,可以基于該系統(tǒng)架構(gòu)進(jìn)行信息流的分析與追蹤,提高系統(tǒng)安全保障.

    References)

    [1] 陳丹丹.軟件移植實踐[D].杭州:浙江大學(xué),2007.

    [2] Cifuentes C,Malhotra V.Binary translation:static,dynamic,retargetable[C]∥Proceedings of International Conference on Software Maintenance.Monterey CA USA:IEEE -CS Press.1996:340 -349.

    [3] 陳喬,蔣烈輝,董衛(wèi)宇,等.基于動態(tài)二進(jìn)制翻譯技術(shù)的仿真器研究[J].計算機(jī)工程,2011,37(20):277-279.Chen Qiao,Jiang Liehui,Dong Weiyu,et al.Simulator research based on dynamic binary translation technology[J]].Computer Engineering,2011,37(20):277 -279.(in Chinese)

    [4] 黃聰會,陳靖,羅樵,等.面向二進(jìn)制移植的虛擬化技術(shù)[J].計算機(jī)應(yīng)用研究,2012,29(11):4185 -4187.Huang Conghui,Chen Jing,Luo Qiao,et al.Virtualization technology for binary migration[J].Application Research of Computer,2012,29(11):4185 - 4187.(in Chinese)

    [5] Smith E,Nair R.The architecture of virtual machines[J].Computer,2005,38(5):32 -38.

    [6] Smith J E,Nair R.虛擬機(jī):系統(tǒng)與進(jìn)程的通用平臺[M].北京:機(jī)械工業(yè)出版社,2009:4-7.

    [7] Wine User’s Guide.Chapter 1 Introduction.[DB/OL].http:∥www.winehq.org/docsen/wineusr-guide.html#introduction.

    [8] Wine Developer’s Guide.Chapter Ⅱ.Wine architect[DB/OL].http:∥www.winehq.orgsite/docs/winedevguide/×2884.

    [9] Bochs User Manual.Chapter 1 Introduction to Bochs[DB/OL].http:∥bochs.sourceforge.net.

    猜你喜歡
    指令集龍芯二進(jìn)制
    基于國產(chǎn)化龍芯的動環(huán)數(shù)據(jù)采集系統(tǒng)
    用二進(jìn)制解一道高中數(shù)學(xué)聯(lián)賽數(shù)論題
    3DNow指令集被Linux淘汰
    電腦報(2021年49期)2021-01-06 18:36:55
    有趣的進(jìn)度
    二進(jìn)制在競賽題中的應(yīng)用
    實時微測量系統(tǒng)指令集及解析算法
    “龍芯之父”胡偉武
    華人時刊(2016年13期)2016-04-05 05:50:06
    龍芯發(fā)布新一代處理器產(chǎn)品
    什么是AMD64
    基于覆蓋率驅(qū)動的高性能DSP指令集驗證方法
    大余县| 神农架林区| 贵州省| 荃湾区| 潼关县| 丹东市| 三江| 广南县| 阿勒泰市| 河北省| 南涧| 比如县| 仁寿县| 梁河县| 乃东县| 田林县| 平武县| 上蔡县| 惠来县| 吉隆县| 中山市| 泸溪县| 凌源市| 增城市| 虹口区| 木兰县| 本溪| 浪卡子县| 甘洛县| 萨迦县| 灵武市| 雅江县| 繁昌县| 怀柔区| 武隆县| 瓮安县| 哈密市| 德庆县| 拉孜县| 阿合奇县| 梅州市|