專(zhuān)利名稱(chēng):一種檢測(cè)任務(wù)堆棧的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)操作系統(tǒng)領(lǐng)域,特別涉及對(duì)計(jì)算機(jī)操作系統(tǒng)中任務(wù)堆棧的檢測(cè)方法。
背景技術(shù):
在計(jì)算機(jī)操作系統(tǒng)中,任務(wù)堆棧是一種很重要的資源,如果任務(wù)堆棧溢出或者被破壞,很可能導(dǎo)致系統(tǒng)運(yùn)行異常。因此,對(duì)任務(wù)堆棧的檢測(cè)技術(shù)就顯得相當(dāng)重要。由中興通訊股份有限公司申請(qǐng)的一件申請(qǐng)?zhí)枮?00810098217. 5的發(fā)明專(zhuān)利《一種任務(wù)堆棧溢出的實(shí)時(shí)檢測(cè)方法及裝置》介紹了一種堆棧溢出的檢測(cè)方法,其采用的手段是將任務(wù)堆棧的棧頂相鄰的部分內(nèi)存設(shè)為隔離區(qū),并使用存儲(chǔ)區(qū)管理單元(MMU,Memory Manage Unit)的功能將所述隔離區(qū)的屬性設(shè)置為不可寫(xiě),在對(duì)所述任務(wù)堆棧進(jìn)行壓棧的過(guò)程中,若壓棧操作對(duì)所述隔離區(qū)進(jìn)行了寫(xiě)操作,則判定所述任務(wù)堆棧溢出。上述堆棧溢出檢測(cè)方法中存在兩個(gè)缺點(diǎn)其一,設(shè)置隔離區(qū)的操作比較麻煩,需要修改操作系統(tǒng)內(nèi)核代碼,只有對(duì)操作系統(tǒng)內(nèi)核十分熟悉的專(zhuān)業(yè)人士才能完成,不利于操作系統(tǒng)的升級(jí);其二,需要在隔離區(qū)上啟用MMU管理,對(duì)于某種架構(gòu)的CPU,啟用MMU后會(huì)降低CPU的性能。而中興通訊股份有限公司申請(qǐng)的另外一件申請(qǐng)?zhí)枮?00710003510. 4的發(fā)明專(zhuān)利《一種檢測(cè)堆棧幀破壞的方法》介紹了一種檢測(cè)堆棧是否被破壞的方法,其采用的手段是通過(guò)編譯器在函數(shù)中插樁,在入樁函數(shù)將堆棧幀備份到棧頂,在出樁函數(shù)中判斷當(dāng)前堆棧幀是否一致,從而判定任務(wù)堆棧是否被破壞。該檢測(cè)方法需要對(duì)操作系統(tǒng)中幾乎所有的函數(shù)進(jìn)行插樁,操作比較復(fù)雜,對(duì)CPU的性能影響也不得不考慮,另外也需要修改操作系統(tǒng)內(nèi)部函數(shù),不利于操作系統(tǒng)的升級(jí)。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是提出一種簡(jiǎn)便的檢測(cè)任務(wù)堆棧的方法,解決傳統(tǒng)技術(shù)中檢測(cè)任務(wù)堆棧的操作復(fù)雜、不利于操作系統(tǒng)升級(jí)的問(wèn)題。本發(fā)明解決上述技術(shù)問(wèn)題所采用的方案是一種檢測(cè)任務(wù)堆棧的方法,包括以下步驟a.在任務(wù)堆棧的棧頂和棧底分別劃分一部分內(nèi)存作為檢測(cè)區(qū)域;b.將檢測(cè)區(qū)域初始化為某一個(gè)值,并將檢測(cè)區(qū)域的位置記錄在任務(wù)控制塊的用戶(hù)保留字段中;c.操作系統(tǒng)在工作過(guò)程中對(duì)檢測(cè)區(qū)域進(jìn)行檢測(cè),若檢測(cè)到檢測(cè)區(qū)域的值發(fā)生變化,則判定為任務(wù)堆棧出現(xiàn)問(wèn)題;d.將任務(wù)堆棧出現(xiàn)問(wèn)題的信息報(bào)告給用戶(hù),并進(jìn)行相應(yīng)處理。進(jìn)一步,將檢測(cè)區(qū)域初始化為某一個(gè)值的具體操作是在任務(wù)的入口函數(shù)中定義一個(gè)局部結(jié)構(gòu)體變量,將局部結(jié)構(gòu)體變量的各個(gè)字段初始化成某一個(gè)值。
進(jìn)ー步,所述檢測(cè)區(qū)域包括在任務(wù)堆棧的棧頂劃分的內(nèi)存區(qū)域和在棧底劃分的內(nèi)存區(qū)域。進(jìn)一歩,所述任務(wù)堆棧出現(xiàn)問(wèn)題是指任務(wù)堆棧溢出或被破壞。進(jìn)ー步,步驟d中,所述相應(yīng)處理是指掛起溢出任務(wù)或重啟操作系統(tǒng)。進(jìn)一歩,步驟c的具體實(shí)現(xiàn)方法為當(dāng)工作任務(wù)得到調(diào)度時(shí),對(duì)檢測(cè)區(qū)域的值進(jìn)行檢測(cè),若檢測(cè)到檢測(cè)區(qū)域的值發(fā)生變化,則判定為任務(wù)堆棧出現(xiàn)問(wèn)題;或者,由操作系統(tǒng)生成ー個(gè)堆棧檢測(cè)任務(wù),所述堆棧檢測(cè)任務(wù)周期性對(duì)檢測(cè)區(qū)域進(jìn)行檢測(cè),如果檢測(cè)到檢測(cè)區(qū)域的值被修改,則判定為任務(wù)堆棧出現(xiàn)問(wèn)題;或者,由操作系統(tǒng)生成ー個(gè)堆棧檢測(cè)任務(wù),所述堆棧檢測(cè)任務(wù)周期檢測(cè)每個(gè)任務(wù)的SP指針的值,若檢測(cè)到某個(gè)任務(wù)的SP指針沒(méi)有在堆棧區(qū)域內(nèi),則判定為任務(wù)堆棧出現(xiàn)問(wèn)題。本發(fā)明的有益效果是利用純軟件方法檢測(cè)任務(wù)堆棧,不需要修改操作系統(tǒng)接ロ函數(shù),不影響CPU性能,且檢測(cè)方法簡(jiǎn)便,有利于系統(tǒng)升級(jí)。
圖I為任務(wù)堆棧示意圖;圖2為本發(fā)明的檢測(cè)方法流程圖。
具體實(shí)施例方式針對(duì)傳統(tǒng)技術(shù)中檢測(cè)任務(wù)堆棧的操作復(fù)雜、不利于操作系統(tǒng)升級(jí)的問(wèn)題,本發(fā)明提出一種簡(jiǎn)便的檢測(cè)任務(wù)堆棧的方法,該方法的流程如圖2所示,其包括以下步驟a.在任務(wù)堆棧的棧頂和棧底分別劃分一部分內(nèi)存作為檢測(cè)區(qū)域;b.將檢測(cè)區(qū)域初始化為某一個(gè)值,并將檢測(cè)區(qū)域的位置記錄在任務(wù)控制塊的用戶(hù)保留字段中;c.操作系統(tǒng)在工作過(guò)程中對(duì)檢測(cè)區(qū)域進(jìn)行檢測(cè),若檢測(cè)到檢測(cè)區(qū)域的值發(fā)生變化,則判定為任務(wù)堆棧出現(xiàn)問(wèn)題;d.將任務(wù)堆棧出現(xiàn)問(wèn)題的信息報(bào)告給用戶(hù),并進(jìn)行相應(yīng)處理。在具體實(shí)施上,如圖I所示,在棧頂區(qū)域劃分ー小塊內(nèi)存設(shè)置為檢測(cè)區(qū)域A,并初始化成某一個(gè)值,將檢測(cè)區(qū)域A的位置記錄在任務(wù)控制塊的用戶(hù)保留字段中,在棧底區(qū)域劃分出一塊作為堆棧破壞檢測(cè)區(qū)域B,初始化成某ー個(gè)值(初始化的具體的操作是在任務(wù)的入ロ函數(shù)中定義ー個(gè)局部結(jié)構(gòu)體變量,將局部控制結(jié)構(gòu)體變量的各個(gè)字段初始化某ー個(gè)值),將檢測(cè)區(qū)域B的位置記錄在任務(wù)控制塊中用戶(hù)保留字段中。我們將把檢測(cè)區(qū)域A和檢測(cè)區(qū)域B統(tǒng)稱(chēng)為檢測(cè)區(qū)域。操作系統(tǒng)在工作過(guò)程中對(duì)檢測(cè)區(qū)域進(jìn)行檢測(cè),若檢測(cè)到檢測(cè)區(qū)域的值發(fā)生變化,則判定為任務(wù)堆棧出現(xiàn)問(wèn)題;然后將任務(wù)堆棧出現(xiàn)問(wèn)題的信息報(bào)告給用戶(hù),并作相應(yīng)處理;對(duì)檢測(cè)區(qū)域的檢測(cè)方式有以下三種I、當(dāng)工作任務(wù)得到調(diào)度時(shí),對(duì)檢測(cè)區(qū)域的值進(jìn)行檢測(cè),若檢測(cè)到檢測(cè)區(qū)域的值發(fā)生變化,說(shuō)明工作任務(wù)堆棧出現(xiàn)問(wèn)題(堆棧溢出或被破壞),則將此信息報(bào)告用戶(hù),并作相應(yīng)處理如掛起溢出任務(wù),或者重起系統(tǒng)。2、生成ー個(gè)堆棧檢測(cè)任務(wù),所述檢測(cè)任務(wù)周期性檢測(cè)系統(tǒng)中每個(gè)工作任務(wù)的檢測(cè) 區(qū)域,如果檢測(cè)系統(tǒng)中某個(gè)任務(wù)堆棧的檢測(cè)區(qū)域的值被修改,則說(shuō)明該工作任務(wù)堆棧出現(xiàn)問(wèn)題(堆棧溢出或被破壞),則將此信息報(bào)告用戶(hù),并作相應(yīng)處理如掛起溢出任務(wù),或者重起系統(tǒng)。3、生成ー個(gè)堆棧檢測(cè)任務(wù),所述檢測(cè)任務(wù)周期性檢測(cè)每個(gè)任務(wù)的SP(Stackpointer,堆棧指針寄存器)指針的值,若檢測(cè)到某個(gè)任務(wù)的SP指針沒(méi)有在堆棧區(qū)域內(nèi),則說(shuō)明該任務(wù)堆棧出現(xiàn)問(wèn)題(堆棧溢出或被破壞),則將此信息報(bào)告用戶(hù),并作相應(yīng)處理如掛起該工作任務(wù),或者重起系統(tǒng)。
權(quán)利要求
1.一種檢測(cè)任務(wù)堆棧的方法,其特征在于,包括以下步驟 a.在任務(wù)堆棧的棧頂和棧底分別劃分一部分內(nèi)存作為檢測(cè)區(qū)域; b.將檢測(cè)區(qū)域初始化為某一個(gè)值,并將檢測(cè)區(qū)域的位置記錄在任務(wù)控制塊的用戶(hù)保留字段中; c.操作系統(tǒng)在工作過(guò)程中對(duì)檢測(cè)區(qū)域進(jìn)行檢測(cè),若檢測(cè)到檢測(cè)區(qū)域的值發(fā)生變化,則判定為任務(wù)堆棧出現(xiàn)問(wèn)題; d.將任務(wù)堆棧出現(xiàn)問(wèn)題的信息報(bào)告給用戶(hù),并進(jìn)行相應(yīng)處理。
2.如權(quán)利要求I所述的一種檢測(cè)任務(wù)堆棧的方法,其特征在于,將檢測(cè)區(qū)域初始化為某一個(gè)值的具體操作是在任務(wù)的入口函數(shù)中定義一個(gè)局部結(jié)構(gòu)體變量,將局部結(jié)構(gòu)體變量的各個(gè)字段初始化成某一個(gè)值。
3.如權(quán)利要求I所述的一種檢測(cè)任務(wù)堆棧的方法,其特征在于,所述檢測(cè)區(qū)域包括在任務(wù)堆棧的棧頂劃分的內(nèi)存區(qū)域和在棧底劃分的內(nèi)存區(qū)域。
4.如權(quán)利要求I所述的一種檢測(cè)任務(wù)堆棧的方法,其特征在于,所述任務(wù)堆棧出現(xiàn)問(wèn)題是指任務(wù)堆棧溢出或被破壞。
5.如權(quán)利要求I所述的一種檢測(cè)任務(wù)堆棧的方法,其特征在于,步驟d中,所述相應(yīng)處理是指掛起溢出任務(wù)或重啟操作系統(tǒng)。
6.如權(quán)利要求1-5任意一項(xiàng)所述的一種檢測(cè)任務(wù)堆棧的方法,其特征在于,步驟c的具體實(shí)現(xiàn)方法為當(dāng)工作任務(wù)得到調(diào)度時(shí),對(duì)檢測(cè)區(qū)域的值進(jìn)行檢測(cè),若檢測(cè)到檢測(cè)區(qū)域的值發(fā)生變化,則判定為任務(wù)堆棧出現(xiàn)問(wèn)題。
7.如權(quán)利要求1-5任意一項(xiàng)所述的一種檢測(cè)任務(wù)堆棧的方法,其特征在于,步驟c的具體實(shí)現(xiàn)方法為由操作系統(tǒng)生成一個(gè)堆棧檢測(cè)任務(wù),所述堆棧檢測(cè)任務(wù)周期性對(duì)檢測(cè)區(qū)域進(jìn)行檢測(cè),如果檢測(cè)到檢測(cè)區(qū)域的值被修改,則判定為任務(wù)堆棧出現(xiàn)問(wèn)題。
8.如權(quán)利要求1-5任意一項(xiàng)所述的一種檢測(cè)任務(wù)堆棧的方法,其特征在于,步驟c的具體實(shí)現(xiàn)方法為由操作系統(tǒng)生成一個(gè)堆棧檢測(cè)任務(wù),所述堆棧檢測(cè)任務(wù)周期檢測(cè)每個(gè)任務(wù)的SP指針的值,若檢測(cè)到某個(gè)任務(wù)的SP指針沒(méi)有在堆棧區(qū)域內(nèi),則判定為任務(wù)堆棧出現(xiàn)問(wèn)題。
全文摘要
本發(fā)明涉及計(jì)算機(jī)操作系統(tǒng)領(lǐng)域,其公開(kāi)了一種簡(jiǎn)便的檢測(cè)任務(wù)堆棧的方法,解決傳統(tǒng)技術(shù)中檢測(cè)任務(wù)堆棧的操作復(fù)雜、不利于操作系統(tǒng)升級(jí)的問(wèn)題。本發(fā)明的技術(shù)方案的要點(diǎn)包括以下步驟a.在任務(wù)堆棧的棧頂和棧底分別劃分一部分內(nèi)存作為檢測(cè)區(qū)域;b.將檢測(cè)區(qū)域初始化為某一個(gè)值,并將檢測(cè)區(qū)域的位置記錄在任務(wù)控制塊的用戶(hù)保留字段中;c.操作系統(tǒng)在工作過(guò)程中對(duì)檢測(cè)區(qū)域進(jìn)行檢測(cè),若檢測(cè)到檢測(cè)區(qū)域的值發(fā)生變化,則判定為任務(wù)堆棧出現(xiàn)問(wèn)題;d.將任務(wù)堆棧出現(xiàn)問(wèn)題的信息報(bào)告給用戶(hù),并進(jìn)行相應(yīng)處理。本發(fā)明適用于vxWorks實(shí)時(shí)多任務(wù)操作系統(tǒng)。
文檔編號(hào)G06F11/36GK102629231SQ201210122550
公開(kāi)日2012年8月8日 申請(qǐng)日期2012年4月24日 優(yōu)先權(quán)日2012年4月24日
發(fā)明者何三波 申請(qǐng)人:邁普通信技術(shù)股份有限公司