[發(fā)明專利]一種棧解析方法和裝置有效
| 申請?zhí)枺?/td> | 201611145387.5 | 申請日: | 2016-12-13 |
| 公開(公告)號: | CN106802785B | 公開(公告)日: | 2019-07-09 |
| 發(fā)明(設(shè)計(jì))人: | 殷羅英;李祥云;王超 | 申請(專利權(quán))人: | 北京華為數(shù)字技術(shù)有限公司 |
| 主分類號: | G06F9/30 | 分類號: | G06F9/30 |
| 代理公司: | 深圳市深佳知識產(chǎn)權(quán)代理事務(wù)所(普通合伙) 44285 | 代理人: | 王仲凱 |
| 地址: | 100085 *** | 國省代碼: | 北京;11 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 解析 方法 裝置 | ||
本發(fā)明實(shí)施例公開了一種棧解析的方法和裝置,可以在棧解析過程中,通過獲取一個棧幀例如第一棧幀的最低位地址,可以從這個棧幀中得到第二函數(shù)調(diào)用這個棧幀所對應(yīng)的第一函數(shù)的調(diào)用關(guān)系,并可以根據(jù)固定偏移從第一棧幀中得到第一棧幀的長度信息,從而可以依據(jù)第一棧幀的長度信息和第一棧幀的最低位地址確定出第二棧幀的最低位地址,以此往復(fù)可以得到各函數(shù)的調(diào)用關(guān)系,在獲取調(diào)用棧時不需要使用BP寄存器,也不需要在棧幀中保存寄存器值,而所使用的SP寄存器在各個應(yīng)用場景中基本都屬于專用于棧幀的寄存器,SP寄存器不會被優(yōu)化作為其他用處,能正確獲取,從而在獲取調(diào)用棧的過程中節(jié)約了寄存器資源,不會影響系統(tǒng)性能。
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,特別是涉及一種棧解析方法和裝置。
背景技術(shù)
在通過計(jì)算機(jī)進(jìn)行數(shù)據(jù)處理的過程中,可以通過執(zhí)行進(jìn)程來實(shí)現(xiàn)該進(jìn)程所對應(yīng)的功能。在計(jì)算機(jī)系統(tǒng)中,一個進(jìn)程可以包括有一個或多個線程,每個線程可以被配置對應(yīng)的棧,該棧可以作為該線程的私有空間,用于存儲該線程的私有資源。根據(jù)一個線程的復(fù)雜程度,在執(zhí)行該線程時,需要順序執(zhí)行若干個函數(shù)以實(shí)現(xiàn)該線程的功能,故這些函數(shù)的私有資源也保存在該線程所對應(yīng)棧的棧幀中,一般情況下,可以將一個棧幀作為一個函數(shù)的私有空間,用于存儲該函數(shù)的私有資源。根據(jù)函數(shù)之間的調(diào)用關(guān)系,函數(shù)對應(yīng)的棧幀在棧中的位置也有不同,以幀地址的高低以及棧幀相鄰關(guān)系區(qū)分,被調(diào)用函數(shù)的棧幀一般位于調(diào)用函數(shù)的棧幀下一層,即被調(diào)用函數(shù)的棧幀地址較低。
若要實(shí)現(xiàn)一個線程的功能,需要通過從該線程對應(yīng)的棧中獲取與該線程相關(guān)的各個函數(shù)之間的調(diào)用關(guān)系,一般情況下,從棧的最內(nèi)層棧幀即地址最低的棧幀開始,獲取該最內(nèi)層棧幀所對應(yīng)的函數(shù)與上一層棧幀所對應(yīng)函數(shù)之間的調(diào)用關(guān)系,依據(jù)棧地址從低向高,一層一層的獲取棧幀中保存的函數(shù)調(diào)用關(guān)系,獲取一個線程中各函數(shù)的調(diào)用關(guān)系的過程可以稱為獲取該線程的調(diào)用棧的過程。線程運(yùn)行過程中獲取調(diào)用棧是重要的調(diào)測手段,若獲取調(diào)用棧的方式能夠有很高的、可靠的性能,可以減少對線程性能的影響,提高其應(yīng)用范圍。
傳統(tǒng)的獲取調(diào)用棧的方法為棧回溯算法,在該算法中,需要在棧幀中保存基數(shù)指針(base pointer,BP)寄存器值,一個棧幀中保存的BP寄存器值用于標(biāo)識這個棧幀與上一層棧幀之間的關(guān)聯(lián)關(guān)系,故可以根據(jù)該BP寄存器值推導(dǎo)出這個棧幀的上一層棧幀。可見,獲取調(diào)用棧的過程中,其難點(diǎn)在于如何根據(jù)當(dāng)前棧幀中的內(nèi)容確定出上一層棧幀的位置,而傳統(tǒng)算法需要在棧幀中額外保存BP寄存器值,且需要BP寄存器專用于推棧才能根據(jù)BP寄存器值才能實(shí)現(xiàn),由此浪費(fèi)了CPU寶貴的寄存器資源,影響性能。
發(fā)明內(nèi)容
為了解決上述技術(shù)問題,本發(fā)明實(shí)施例提供了一種幀解析方法和裝置,在獲取調(diào)用棧的過程中節(jié)約了寄存器資源,不會影響系統(tǒng)性能。
第一方面,本發(fā)明提供了一種棧解析方法,應(yīng)用于一個線程所對應(yīng)的棧,所述棧中具有多個棧幀,所述方法包括:
獲取第一棧幀的最低位地址,所述第一棧幀為所述多個棧幀中的一個棧幀,所述第一棧幀為用于保存第一函數(shù)私有資源的棧幀,所述第一函數(shù)為所述線程使用到的一個函數(shù);
根據(jù)所述第一棧幀的最低位地址,從第一棧幀中獲取第二函數(shù)的指令地址,所述第二函數(shù)用于在所述線程中調(diào)用第一函數(shù),所述第二函數(shù)的指令地址用于指示第二函數(shù)調(diào)用第一函數(shù)的調(diào)用關(guān)系;
根據(jù)固定偏移以及所述第一棧幀的最低位地址所指示的位置,從所述第一棧幀中獲取第一棧幀的長度信息;
根據(jù)所述第一棧幀的最低位地址以及所述第一棧幀的長度信息確定出第二棧幀的最低位地址,所述第二棧幀為用于保存所述第二函數(shù)私有資源的棧幀。
在第一方面的第一種可能的實(shí)現(xiàn)方式中,所述獲取第一棧幀的最低位地址,包括:
從所述第一棧幀對應(yīng)的棧指針SP寄存器中獲取所述第一棧幀的最低位地址。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于北京華為數(shù)字技術(shù)有限公司,未經(jīng)北京華為數(shù)字技術(shù)有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201611145387.5/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





