[發明專利]一種SPARC平臺任務棧溢出檢測算法有效
| 申請號: | 201410060928.9 | 申請日: | 2014-02-21 |
| 公開(公告)號: | CN103870244B | 公開(公告)日: | 2017-01-11 |
| 發明(設計)人: | 卓保特;李尚杰;程勝;許開維 | 申請(專利權)人: | 北京神舟航天軟件技術有限公司 |
| 主分類號: | G06F9/30 | 分類號: | G06F9/30;G06F21/52 |
| 代理公司: | 北京世譽鑫誠專利代理事務所(普通合伙)11368 | 代理人: | 孫國棟 |
| 地址: | 100094*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 sparc 平臺 任務 溢出 檢測 算法 | ||
技術領域
本發明屬于嵌入式實時操作系統開發領域,具體地說,涉及一種SPARC平臺任務棧溢出檢測算法。
背景技術
SPARC是一種開源的RISC處理器架構技術,在國內廣泛的應用在航天領域。同時,隨著航天任務的復雜化,嵌入式實時操作系統在航天領域的應用也越來越廣泛。為保證系統的實時性與安全性,嵌入式實時操作系統中任務使用的堆棧一般都靜態分配,對于基于RTOS的應用開發人員,由于缺乏對底層硬件及編譯器編譯規則的了解,通常難以給任務分配合適的棧大小,導致任務棧溢出,開發人員需花大量時間查找原因。因此現在有些嵌入式實時操作系統提供了任務棧溢出的檢測函數,在系統空閑時調用,可以在任務棧將要溢出或已經溢出時給出報警,幫助應用開發人員了解任務棧的使用情況,并調整任務棧大小,預防任務棧的溢出。
現有技術存在的主要問題:
1、現有的任務棧溢出檢測算法簡單、通用,但由于SPARC平臺的特殊性,不能給出運行在SPARC平臺的任務棧溢出的準確判定結果。如目前在國內航天領域廣泛使用的SPARC?V7、V8架構,硬件并不提供棧溢出檢測的支持,該算法在就緒任務運行之前,比較其SP指針與棧最大使用量限制指針StkLimitPtr,在棧向下增長時,如果SP小于StkLimitPtr,則任務運行時會有溢出的可能。但即使SP大于StkLimitPtr,在任務獲得CPU不斷運行過程中,仍有可能導致棧溢出,且在任務放棄CPU時,由于函數棧幀的釋放使SP指針已經后退到StkLimitPtr之下,這種情況下,該算法無法檢測出任務棧發生過溢出。
2、還有一種方法是通過進行任務棧最大使用量檢測來判斷任務棧的溢出。該算法在任務創建時將任務棧清0,在系統空閑時,檢測任務棧的使用量,從棧頂開始,向棧底依次判斷當前內存內容是否為0,記錄第一個不為0的內存地址,計算當前的內存空閑量,以判斷任務棧是否溢出。該算法性能較差,可能尚未比較完,就被高優先級的任務打斷,再次返回時任務棧的使用量可能已超過當前比較地址,從而得出錯誤的結果;另外由于SPARC架構下寄存器窗口的特殊性,每個函數的棧幀都至少有0x40字節的空間用來存儲寄存器窗口溢出時當前寄存器窗口的內容。該段空間大多數情況下,并不會被使用,內容仍然為0,如果該段空間恰好在棧頂處,此時任務棧已經溢出,但是該算法會給出錯誤的判斷。
發明內容
本發明要解決的技術問題是克服上述缺陷,提供一種SPARC平臺任務棧溢出檢測算法,該算法準確、效率高,可以有效幫助應用開發人員合理分配任務棧大小,提高系統的可靠性及安全性。
為解決上述問題,本發明所采用的技術方案是:
一種SPARC平臺任務棧溢出檢測算法,其特征在于:所述檢測算法針對每個任務維護一個單獨的變量current_stack_max,記錄當前棧的最大使用量,初始值為0;任務棧在任務創建時初始化為0;任務棧的棧頂保留一個空函數棧幀大小的余量,棧使用超過該余量,即視為溢出。
作為一種改進,所述算法步驟如下:
1)、首先比較current_stack_max和任務控制塊中保存的當前函數棧幀的棧頂TCB_SP,求得min(current_stack_max,TCB_SP);
2)、從stack_top開始依次比較[stack_top,min(current_stack_max,TCB_SP)]區間段內存單元的內容,遇到非零的內存單元停止比較,指針order_search指向該單元;
3)、比較stack_top與order_search-0x68,如果stack_top大于等于order_search-0x68,則任務棧溢出;否則將current_stack_max更新為order_search。其中0x68為空函數函數棧幀的大小。
由于采用了上述技術方案,與現有技術相比,本發明是針對每個任務維護一個單獨的變量current_stack_max,記錄當前棧的最大使用量,初始值為0;任務棧在任務創建時初始化為0;任務棧的棧頂保留一個空函數棧幀大小的余量,棧使用超過該余量,即視為溢出。本發明算法準確、效率高,可以有效幫助應用開發人員合理分配任務棧大小,提高系統的可靠性及安全性。
附圖說明
圖1為本發明一種實施例的精確的SPARC平臺棧溢出檢測算法示意圖。
具體實施方式
實施例:
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京神舟航天軟件技術有限公司,未經北京神舟航天軟件技術有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410060928.9/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:用于線程的SIMD執行的編譯器控制區調度
- 下一篇:電捕焦油廢水多相分離工藝





