64位Linux操作系統(tǒng)兼容32位應用軟件的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計算機軟件領(lǐng)域,尤其涉及一種能夠在64位Linux操作系統(tǒng)中兼容32位應用軟件的方法。
【背景技術(shù)】
[0002]在同一個Linux操作系統(tǒng)中,如Windows、Linux、Unix等操作系統(tǒng)中,通常存在32位和64位兩個版本,32位計算機Linux操作系統(tǒng)由來已久,為技術(shù)日益成熟的過程中發(fā)展起很多讓人所熟知并且應用的應用程序,然而64位系統(tǒng)更能滿足需要大量內(nèi)存和浮點性能的客戶,并且在機械設計與分析、三維動畫、視頻編輯和創(chuàng)作以及科學計算和高性能計算等領(lǐng)域大放光芒,64位Linux操作系統(tǒng)比32位Linux操作系統(tǒng)有著更大的尋址能力和數(shù)據(jù)處理能力,因此64操作位系統(tǒng)在大數(shù)據(jù)處理和復雜計算方面有著天然的優(yōu)勢,同時得到了越來越多的用戶的認可與好評。
[0003]基于服務器Linux操作系統(tǒng)運行環(huán)境和所需要提供的服務類型,在服務器領(lǐng)域64位Linux操作系統(tǒng)淘汰32位Linux操作系統(tǒng)已經(jīng)成為必然趨勢,然而在計算機發(fā)展史中,32位Linux操作系統(tǒng)作為主流的系統(tǒng)版本已經(jīng)相當長的時間,然而當前的64位操作系統(tǒng)為龍芯平臺64位Linux操作系統(tǒng)架構(gòu)圖,如圖1所示,對32位軟件并不兼容,而在軟件從32位過渡到64位的這該段時間內(nèi),32位Linux操作系統(tǒng)上出現(xiàn)了大量與之相匹配的軟件,這些軟件在在短時間內(nèi)向64位Linux操作系統(tǒng)遷移暫時無法實現(xiàn)與完成,而且客戶可能對這些32位軟件有特殊的需求而不愿做出改變,這就對64位Linux操作系統(tǒng)對32位應用程序的兼容性提出了新的要求,即可以在64位Linux操作系統(tǒng)完全取代32位之間的過渡時間段內(nèi),在這樣一個相當長的時間段內(nèi),使64位Linux操作系統(tǒng)保持對32位Linux操作系統(tǒng)的兼容特性,而目前還沒有解決這些問題的產(chǎn)品或者方法出現(xiàn)。
【發(fā)明內(nèi)容】
[0004]針對現(xiàn)有技術(shù)中存在的不足,本發(fā)明的目的在于提供一種64位Linux操作系統(tǒng)兼容32位應用軟件的方法,64位Linux操作系統(tǒng)裝入32位子Linux系統(tǒng),從而使32位程序能夠完全應用在64位Linux操作系統(tǒng)中,從而提高了 64位Linux操作系統(tǒng)的資源利用率以及運行效率,完全實現(xiàn)了對32位應用程序的兼容。
[0005]本發(fā)明的技術(shù)方案如下:
一種64位Linux操作系統(tǒng)下兼容32位應用軟件的方法,包括以下步驟:
步驟S1:于所述64位處理器對應地設有64位操作系統(tǒng),在所述64位操作系統(tǒng)的內(nèi)核中設計一 32位系統(tǒng)調(diào)用接口,與該系統(tǒng)調(diào)用接口對應的32位運行庫、鏈接器以及程序加載器均設計于該64位操作系統(tǒng)中,所述32位運行庫、鏈接器、程序加載器以及32位系統(tǒng)調(diào)用接口共同形成32位子操作系統(tǒng);
步驟S2:對運行的應用程序進行判斷,并選擇與程序相對應的操作系統(tǒng),調(diào)用與該程序位數(shù)相對應的加載器、鏈接器以及運行庫進行執(zhí)行。
[0006]上述的方法,進一步地,還包括判斷步驟:
聲明一個指針判斷,對運行的應用程序格式進行判斷:
(1)若判斷結(jié)果是32位應用程序,則調(diào)用32位子操作系統(tǒng)中的32位加載器來裝載該應用程序;
(2)若判斷結(jié)果是64位應用程序,則調(diào)用64位Linux操作系統(tǒng)中的64位加載器來裝載該應用程序。
[0007]基于本發(fā)明又一方面在64位Linux操作系統(tǒng)中兼容32位應用軟件的方法,進一步地,還包括判斷步驟:
在所述操作系統(tǒng)的內(nèi)核上一層為虛擬系統(tǒng)調(diào)用中間層,用于識別32位與64位應用程序;
獲取-運行的應用程序所屬的系統(tǒng)調(diào)用的格式,由該中間層對該格式進行判斷,若判斷為32位系統(tǒng)調(diào)用,則對該系統(tǒng)調(diào)用的數(shù)據(jù)結(jié)構(gòu)進行轉(zhuǎn)換,進而執(zhí)行該系統(tǒng)調(diào)用;
若判斷為64位系統(tǒng)調(diào)用,則直接執(zhí)行該系統(tǒng)調(diào)用。
[0008]上述的方法,所述應用程序在裝載應用結(jié)束后,根據(jù)該應用程序在編譯時標定的運行庫位置來裝載該應用程序所對應的運行庫。
[0009]上述的方法,應用程序裝載結(jié)束以后,32位應用程序的裝載器調(diào)用32位動態(tài)鏈接器來完成內(nèi)存中的應用程序與運行庫的鏈接工作,64位應用程序的裝載器調(diào)用64位動態(tài)鏈接器完成內(nèi)存中的應用程序與所屬運行庫的鏈接工作。
[0010]上述的方法,所述操作系統(tǒng)采用龍芯64位處理器。
[0011]上述的方法,所述操作系統(tǒng)調(diào)用虛擬系統(tǒng)調(diào)用中間層以上的運行庫、裝載器、鏈接器均為兩份,其中一份為32位,另一份為64位。
[0012]上述的方法,所述運行庫具有標準接口定義,由運行庫中的函數(shù)間接地使用系統(tǒng)調(diào)用。
[0013]上述的方法,所述內(nèi)存為內(nèi)核的一個組成部分,應用程序執(zhí)行時,首先裝載形成應用程序的內(nèi)存鏡像以及運行庫的內(nèi)存鏡像,然后由鏈接器鏈接內(nèi)存鏡像中的應用程序以及運行庫鏡像,同時加載共享庫到內(nèi)存中,之后執(zhí)行編寫的代碼執(zhí)行。
[0014]本發(fā)明的有益效果是:
(1)能夠保證一些在短時間內(nèi)無法在龍芯64位Linux操作系統(tǒng)如Linux平臺上部署,或是從32位Linux操作系統(tǒng)向64位遷移比較繁瑣,甚至一些不適合64位平臺的應用程序,完全運行在64位Linux操作系統(tǒng)中的32位子兼容子系統(tǒng),從而保證了資源利用率以及運行效率;
(2)提高了系統(tǒng)的兼容性以及可應用程序的數(shù)量,從而推動了普及64位Linux操作系統(tǒng)的應用;
(3)64位Linux操作系統(tǒng)能夠自動識別應用程序所屬種類并且選擇讓該應用程序在相應的Linux操作系統(tǒng)中運行,做到了 64位Linux操作系統(tǒng)和32位Linux操作系統(tǒng)的無縫切換;
(4)64位Linux操作系統(tǒng)的內(nèi)核能夠同時接受并執(zhí)行64位Linux操作系統(tǒng)以及32位子Linux操作系統(tǒng)的調(diào)用;
(5)64位Linux操作系統(tǒng)的龍芯64位處理器作為新興發(fā)展起來的處理器,能夠兼容32位指令和兼容32位數(shù)據(jù)結(jié)構(gòu),這也是先決條件之一。
【附圖說明】
[0015]圖1為現(xiàn)有的龍芯平臺64位Linux操作系統(tǒng)架構(gòu)圖。
[0016]圖2為龍芯平臺附帶32位子系統(tǒng)的64位Linux操作系統(tǒng)架構(gòu)圖。
[0017]圖3為龍芯平臺64位Linux操作系統(tǒng)中32位和64位應用程序執(zhí)行流程圖。
[0018]圖4為龍芯平臺64位Linux操作系統(tǒng)系統(tǒng)調(diào)用內(nèi)核執(zhí)行流程圖。
【具體實施方式】
[0019]實施例1
本發(fā)明實施例所述的一種64位操作系統(tǒng)下兼容32位應用軟件的方法,能夠讓64位操作系統(tǒng)同時運行64位程序與32位應用程序,在運行應用程序時,操作系統(tǒng)變換系統(tǒng)調(diào)用或者聲明一個函數(shù)來識別出應用程序為64位應用程序還是32位應用程序,進而選擇在64位操作系統(tǒng)還是32位操作子系統(tǒng)中運行。
[0020]在正常系統(tǒng)啟動和執(zhí)行64位應用程序過程當中,32位子Linux系統(tǒng)并不產(chǎn)生作用,只有當系統(tǒng)需要運行32位程序的時候,32位程序?qū)⒈蛔覮inux系統(tǒng)當中的32位鏈接器和加載器,加載到內(nèi)存,并由32位系統(tǒng)庫提供功能調(diào)用支撐。
[0021]64位Linux操作系統(tǒng)裝入32位子Linux系統(tǒng),所述32位子Linux系統(tǒng)包括32位鏈接庫,32位加載器,32位運行庫,以及32位系統(tǒng)調(diào)用接口。
[0022]如圖2、圖3所示,其中圖3中的黑色實心箭頭表示應用程序被裝載的過程,帶有箭尾的空心箭頭表示運行庫被裝載的過程,首先,步驟SI的前提是采用龍芯平臺的64位處理器,或者是其它能夠兼容32位指令的64位處理器,這是執(zhí)行本發(fā)明所述方法的先決條件。
[0023]修改龍芯平臺64位Linux操作系統(tǒng)的內(nèi)核,在內(nèi)核當中添加中間層,中間層用來識別出32位系統(tǒng)調(diào)用與64位系統(tǒng)調(diào)用,如果是64位系統(tǒng)調(diào)用則正常執(zhí)行,如果是32位系統(tǒng)調(diào)用,則需要首先被路由到內(nèi)核當中提供兼容性的函數(shù),由提供兼容性的函數(shù)進行相應轉(zhuǎn)換,將系統(tǒng)調(diào)用當中32位數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為64相應的位數(shù)據(jù)結(jié)構(gòu),然后再將轉(zhuǎn)換后的32位系統(tǒng)調(diào)用路由到64位系統(tǒng)調(diào)用進行處理。
[0024]如圖4所示,32位程序進行系統(tǒng)調(diào)用時,系統(tǒng)調(diào)用穿過32位運行庫,最終抵達內(nèi)核,內(nèi)核判斷調(diào)用類型,如果是64位程序的系統(tǒng)調(diào)用,則正常執(zhí)行內(nèi)核當中的系統(tǒng)調(diào)用程序。如果是32位程序的系統(tǒng)調(diào)用則需要將調(diào)用路由到處理相關(guān)處理函數(shù),處理函數(shù)負責將32位系統(tǒng)調(diào)用當中的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為64位模式,再執(zhí)行內(nèi)核當中的系統(tǒng)調(diào)用程序。
[0025]在該64位處理器中裝入一 64位Linux操作系統(tǒng),該64位Linux操作系統(tǒng)內(nèi)核兼容32位系統(tǒng)調(diào)用,該內(nèi)核能夠同時執(zhí)行并調(diào)用64位或者32位的系統(tǒng)調(diào)用。
[0026]當該64位Linux操作系統(tǒng)中加入了 32位兼容子系統(tǒng)以后,架構(gòu)由圖1變?yōu)榱藞D2,操作系統(tǒng)內(nèi)核以上各應用層,從系統(tǒng)調(diào)用中間層以上均為兩份程序