System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內(nèi)的位置。 參數(shù)名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術(shù)實(shí)現(xiàn)步驟摘要】
本專利技術(shù)涉及二進(jìn)制程序兼容性,尤其涉及一種用戶態(tài)二進(jìn)制程序指令集兼容方法和系統(tǒng)及設(shè)備。
技術(shù)介紹
1、在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,操作系統(tǒng)是管理和控制計(jì)算機(jī)硬件與軟件資源的核心程序,它由軟件和配置兩大部分構(gòu)成。軟件部分中,可執(zhí)行二進(jìn)制程序是操作系統(tǒng)執(zhí)行任務(wù)的關(guān)鍵組成部分。這些程序由編譯器從源代碼編譯生成,而編譯過程依賴于特定的架構(gòu)指令集。通常情況下,編譯器使用的是默認(rèn)的指令集,或者開發(fā)者可以通過編譯參數(shù)指定特定的指令集。由此產(chǎn)生的可執(zhí)行二進(jìn)制程序包含了與特定cpu架構(gòu)相對應(yīng)的指令,這些指令只能在支持相應(yīng)指令集架構(gòu)的cpu上運(yùn)行。
2、在特定的cpu架構(gòu)如x86或arm等架構(gòu)中,高版本的指令集往往能夠向后兼容低版本的指令集。例如,基于armv8.2-a指令集開發(fā)的軟件能夠在支持armv8.3-a指令集的cpu上運(yùn)行,但反之則不成立。這種兼容性使得軟件能夠在不同版本的cpu指令集上運(yùn)行,但同時(shí)也帶來了挑戰(zhàn):當(dāng)運(yùn)行環(huán)境的cpu指令集版本低于二進(jìn)制程序所需的cpu指令集時(shí),程序可能會(huì)在運(yùn)行過程中遇到非法指令錯(cuò)誤,導(dǎo)致程序崩潰。
3、為了提高軟件的兼容性,開發(fā)者在構(gòu)建軟件時(shí)通常會(huì)選擇一個(gè)較低版本的指令集,這樣做可以使軟件在低版本和高版本指令集的運(yùn)行環(huán)境中都能執(zhí)行。然而,支持更高版本指令集的cpu通常包含更多的指令,這些指令在性能或能效方面通常優(yōu)于軟件實(shí)現(xiàn)的功能。如果選擇高版本指令集作為編譯環(huán)境,生成的二進(jìn)制程序能夠充分利用這些硬件特性,但代價(jià)是犧牲了在低版本指令集環(huán)境下的兼容性。相反,如果在較低版本指令集的編譯環(huán)境下構(gòu)建
4、在實(shí)際生產(chǎn)中,這種兼容性問題尤為突出。例如,特定版本的chromium軟件在鯤鵬920上運(yùn)行時(shí)出現(xiàn)了非法指令錯(cuò)誤,原因在于chromium軟件包含了paciasp指令,該指令屬于armv8.3-a指令集,而鯤鵬920僅支持armv8.2-a指令集。這一問題導(dǎo)致該版本chromium軟件在所有不支持paciasp指令的arm64環(huán)境下都無法運(yùn)行。問題的根源在于該版本chromium軟件是在支持armv8.3-a指令集的環(huán)境中編譯的,因此其二進(jìn)制程序中包含了armv8.3-a特有的paciasp指令。
5、綜上所述,從兼容性和穩(wěn)定性的角度出發(fā),開發(fā)者通常會(huì)選擇在較低版本的指令集環(huán)境下編譯構(gòu)建軟件,以提高軟件的兼容性和穩(wěn)定性。然而,這種做法限制了軟件充分利用最新硬件特性的能力,從而在性能和能效方面造成了潛在的損失。
6、因此,如何提供一種能夠在不同指令集版本之間靈活切換,同時(shí)保持高性能和高兼容性的軟件構(gòu)建和運(yùn)行機(jī)制,成為亟待解決的技術(shù)問題。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,為了克服現(xiàn)有技術(shù)的不足,本專利技術(shù)旨在提供一種用戶態(tài)二進(jìn)制程序指令集兼容方法和系統(tǒng)及設(shè)備。
2、根據(jù)本專利技術(shù)的第一方面,提供一種用戶態(tài)二進(jìn)制程序指令集兼容方法,該方法包括:
3、在構(gòu)建二進(jìn)制程序的編譯階段,初始化alt?instr指令替換環(huán)境并向源代碼中插入alt?instr指令;
4、在構(gòu)建二進(jìn)制程序的鏈接階段,插入多指令集特性節(jié),在執(zhí)行構(gòu)建的二進(jìn)制程序過程中,對alt?instr構(gòu)造函數(shù)進(jìn)行優(yōu)先級(jí)配置;
5、通過執(zhí)行優(yōu)先級(jí)配置的alt?instr構(gòu)造函數(shù)遍歷多指令集特性節(jié)的alt?instr指令,判斷是否進(jìn)行指令替換,當(dāng)需要進(jìn)行指令替換時(shí),先進(jìn)行指令替換再開始執(zhí)行程序主函數(shù)。
6、優(yōu)選地,本專利技術(shù)的用戶態(tài)二進(jìn)制程序指令集兼容方法中,初始化alt?instr指令替換環(huán)境并向源代碼中插入alt?instr指令,包括:獲取并編譯源代碼,添加alt?instr編譯參數(shù)和alt?instr構(gòu)造函數(shù),通過alt?instr編譯參數(shù)向源代碼中插入alt?instr指令。
7、優(yōu)選地,本專利技術(shù)的用戶態(tài)二進(jìn)制程序指令集兼容方法中,初始化alt?instr指令替換環(huán)境并向源代碼中插入alt?instr指令,還包括:通過對源代碼進(jìn)行硬編碼,向源代碼中插入alt?instr指令。
8、優(yōu)選地,本專利技術(shù)的用戶態(tài)二進(jìn)制程序指令集兼容方法中,多指令集特性節(jié)用于存放alt?instr元數(shù)據(jù)和指令并標(biāo)記alt?instr元數(shù)據(jù)和指令的位置信息。
9、優(yōu)選地,本專利技術(shù)的用戶態(tài)二進(jìn)制程序指令集兼容方法中,在執(zhí)行構(gòu)建的二進(jìn)制程序過程中,對alt?instr構(gòu)造函數(shù)進(jìn)行優(yōu)先級(jí)配置,包括:為alt?instr構(gòu)造函數(shù)配置constructor?隱藏優(yōu)先級(jí),所述constructor?隱藏優(yōu)先級(jí)高于用戶可編碼的其他constructor優(yōu)先級(jí)。
10、優(yōu)選地,本專利技術(shù)的用戶態(tài)二進(jìn)制程序指令集兼容方法中,通過執(zhí)行優(yōu)先級(jí)配置的alt?instr構(gòu)造函數(shù)遍歷多指令集特性節(jié)的alt?instr指令,包括:執(zhí)行優(yōu)先級(jí)配置的altinstr構(gòu)造函數(shù),根據(jù)alt?instr元數(shù)據(jù)和指令的位置信息標(biāo)記,遍歷多指令集特性節(jié)中的alt?instr指令。
11、優(yōu)選地,本專利技術(shù)的用戶態(tài)二進(jìn)制程序指令集兼容方法中,判斷是否進(jìn)行指令替換,包括:將運(yùn)行環(huán)境的cpu特性與alt?instr指令的cpu特性進(jìn)行匹配,當(dāng)運(yùn)行環(huán)境的cpu特性與alt?instr指令的cpu特性相匹配,判定需要進(jìn)行指令替換;當(dāng)運(yùn)行環(huán)境的cpu特性與altinstr指令的cpu特性不匹配,判定不需要進(jìn)行指令替換。
12、優(yōu)選地,本專利技術(shù)的用戶態(tài)二進(jìn)制程序指令集兼容方法中,當(dāng)需要進(jìn)行指令替換時(shí),先進(jìn)行指令替換再開始執(zhí)行程序主函數(shù),包括:當(dāng)替換后指令的長度小于替換前指令的長度時(shí),采用空指令對替換后指令的長度進(jìn)行補(bǔ)齊。
13、根據(jù)本專利技術(shù)的第二方面,提供一種用戶態(tài)二進(jìn)制程序指令集兼容系統(tǒng),該系統(tǒng)包括指令集兼容服務(wù)端,所述指令集兼容服務(wù)端用于:在構(gòu)建二進(jìn)制程序的編譯階段,初始化alt?instr指令替換環(huán)境并向源代碼中插入alt?instr指令;在構(gòu)建二進(jìn)制程序的鏈接階段,插入多指令集特性節(jié),在執(zhí)行構(gòu)建的二進(jìn)制程序過程中,對alt?instr構(gòu)造函數(shù)進(jìn)行優(yōu)先級(jí)配置;通過執(zhí)行優(yōu)先級(jí)配置的alt?instr構(gòu)造函數(shù)遍歷多指令集特性節(jié)的alt?instr指令,判斷是否進(jìn)行指令替換,當(dāng)需要進(jìn)行指令替換時(shí),先進(jìn)行指令替換再開始執(zhí)行程序主函數(shù)。
14、根據(jù)本專利技術(shù)的第三方面,提供一種計(jì)算機(jī)設(shè)備,包括存儲(chǔ)器、處理器及存儲(chǔ)在所述存儲(chǔ)器上并可在所述處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述程序時(shí)實(shí)現(xiàn)本專利技術(shù)第一方面所述的方法。
15、本專利技術(shù),通過用戶態(tài)二進(jìn)制程序指令集兼容方法和系統(tǒng)及設(shè)備,在軟件構(gòu)建階段,通過在鏈接腳本中插入?alt?instr相關(guān)節(jié),實(shí)現(xiàn)在程序中遍歷?alt?instr數(shù)據(jù)結(jié)構(gòu);在編譯階段引入隱藏的最高優(yōu)先級(jí)構(gòu)造函數(shù),并使用此最高優(yōu)先級(jí)構(gòu)造函數(shù)實(shí)現(xiàn)二進(jìn)制程序指令替換;在程序運(yùn)行前,在構(gòu)造函數(shù)中通過寫/proc/self/mem進(jìn)行指令替換,用以支持二進(jìn)制程序針對指令集架構(gòu)本文檔來自技高網(wǎng)...
【技術(shù)保護(hù)點(diǎn)】
1.一種用戶態(tài)二進(jìn)制程序指令集兼容方法,其特征在于,所述方法包括:
2.根據(jù)權(quán)利要求1所述的用戶態(tài)二進(jìn)制程序指令集兼容方法,其特征在于,初始化altinstr指令替換環(huán)境并向源代碼中插入alt?instr指令,包括:獲取并編譯源代碼,添加altinstr編譯參數(shù)和alt?instr構(gòu)造函數(shù),通過alt?instr編譯參數(shù)向源代碼中插入alt?instr指令。
3.根據(jù)權(quán)利要求1所述的用戶態(tài)二進(jìn)制程序指令集兼容方法,其特征在于,初始化altinstr指令替換環(huán)境并向源代碼中插入alt?instr指令,還包括:通過對源代碼進(jìn)行硬編碼,向源代碼中插入alt?instr指令。
4.根據(jù)權(quán)利要求1所述的用戶態(tài)二進(jìn)制程序指令集兼容方法,其特征在于,多指令集特性節(jié)用于存放alt?instr元數(shù)據(jù)和指令并標(biāo)記alt?instr元數(shù)據(jù)和指令的位置信息。
5.根據(jù)權(quán)利要求1所述的用戶態(tài)二進(jìn)制程序指令集兼容方法,其特征在于,在執(zhí)行構(gòu)建的二進(jìn)制程序過程中,對alt?instr構(gòu)造函數(shù)進(jìn)行優(yōu)先級(jí)配置,包括:為alt?instr構(gòu)造函數(shù)配置constructo
6.根據(jù)權(quán)利要求1所述的用戶態(tài)二進(jìn)制程序指令集兼容方法,其特征在于,通過執(zhí)行優(yōu)先級(jí)配置的alt?instr構(gòu)造函數(shù)遍歷多指令集特性節(jié)的alt?instr指令,包括:執(zhí)行優(yōu)先級(jí)配置的alt?instr構(gòu)造函數(shù),根據(jù)alt?instr元數(shù)據(jù)和指令的位置信息標(biāo)記,遍歷多指令集特性節(jié)中的alt?instr指令。
7.根據(jù)權(quán)利要求1所述的用戶態(tài)二進(jìn)制程序指令集兼容方法,其特征在于,判斷是否進(jìn)行指令替換,包括:將運(yùn)行環(huán)境的CPU特性與alt?instr指令的CPU特性進(jìn)行匹配,當(dāng)運(yùn)行環(huán)境的CPU特性與alt?instr指令的CPU特性相匹配,判定需要進(jìn)行指令替換;當(dāng)運(yùn)行環(huán)境的CPU特性與alt?instr指令的CPU特性不匹配,判定不需要進(jìn)行指令替換。
8.根據(jù)權(quán)利要求1所述的用戶態(tài)二進(jìn)制程序指令集兼容方法,其特征在于,當(dāng)需要進(jìn)行指令替換時(shí),先進(jìn)行指令替換再開始執(zhí)行程序主函數(shù),包括:當(dāng)替換后指令的長度小于替換前指令的長度時(shí),采用空指令對替換后指令的長度進(jìn)行補(bǔ)齊。
9.一種用戶態(tài)二進(jìn)制程序指令集兼容系統(tǒng),其特征在于,所述系統(tǒng)包括指令集兼容服務(wù)端,所述指令集兼容服務(wù)端用于:在構(gòu)建二進(jìn)制程序的編譯階段,初始化alt?instr指令替換環(huán)境并向源代碼中插入alt?instr指令;在構(gòu)建二進(jìn)制程序的鏈接階段,插入多指令集特性節(jié),在執(zhí)行構(gòu)建的二進(jìn)制程序過程中,對alt?instr構(gòu)造函數(shù)進(jìn)行優(yōu)先級(jí)配置;通過執(zhí)行優(yōu)先級(jí)配置的alt?instr構(gòu)造函數(shù)遍歷多指令集特性節(jié)的alt?instr指令,判斷是否進(jìn)行指令替換,當(dāng)需要進(jìn)行指令替換時(shí),先進(jìn)行指令替換再開始執(zhí)行程序主函數(shù)。
10.一種計(jì)算機(jī)設(shè)備,其特征在于,其特征在于,所述計(jì)算機(jī)設(shè)備包括存儲(chǔ)器、處理器及存儲(chǔ)在所述存儲(chǔ)器上并可在所述處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述程序時(shí)實(shí)現(xiàn)權(quán)利要求1-8中任一項(xiàng)所述方法的步驟。
...【技術(shù)特征摘要】
1.一種用戶態(tài)二進(jìn)制程序指令集兼容方法,其特征在于,所述方法包括:
2.根據(jù)權(quán)利要求1所述的用戶態(tài)二進(jìn)制程序指令集兼容方法,其特征在于,初始化altinstr指令替換環(huán)境并向源代碼中插入alt?instr指令,包括:獲取并編譯源代碼,添加altinstr編譯參數(shù)和alt?instr構(gòu)造函數(shù),通過alt?instr編譯參數(shù)向源代碼中插入alt?instr指令。
3.根據(jù)權(quán)利要求1所述的用戶態(tài)二進(jìn)制程序指令集兼容方法,其特征在于,初始化altinstr指令替換環(huán)境并向源代碼中插入alt?instr指令,還包括:通過對源代碼進(jìn)行硬編碼,向源代碼中插入alt?instr指令。
4.根據(jù)權(quán)利要求1所述的用戶態(tài)二進(jìn)制程序指令集兼容方法,其特征在于,多指令集特性節(jié)用于存放alt?instr元數(shù)據(jù)和指令并標(biāo)記alt?instr元數(shù)據(jù)和指令的位置信息。
5.根據(jù)權(quán)利要求1所述的用戶態(tài)二進(jìn)制程序指令集兼容方法,其特征在于,在執(zhí)行構(gòu)建的二進(jìn)制程序過程中,對alt?instr構(gòu)造函數(shù)進(jìn)行優(yōu)先級(jí)配置,包括:為alt?instr構(gòu)造函數(shù)配置constructor?隱藏優(yōu)先級(jí),所述constructor?隱藏優(yōu)先級(jí)高于用戶可編碼的其他constructor優(yōu)先級(jí)。
6.根據(jù)權(quán)利要求1所述的用戶態(tài)二進(jìn)制程序指令集兼容方法,其特征在于,通過執(zhí)行優(yōu)先級(jí)配置的alt?instr構(gòu)造函數(shù)遍歷多指令集特性節(jié)的alt?instr指令,包括:執(zhí)行優(yōu)先級(jí)配置的alt?instr構(gòu)造函數(shù),根據(jù)alt?instr元數(shù)據(jù)和指令的位置信息標(biāo)...
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:榮濤,
申請(專利權(quán))人:中電云計(jì)算技術(shù)有限公司,
類型:發(fā)明
國別省市:
還沒有人留言評(píng)論。發(fā)表了對其他瀏覽者有用的留言會(huì)獲得科技券。