專利名稱:對(duì)指定進(jìn)程私有數(shù)據(jù)區(qū)和堆棧區(qū)實(shí)施保護(hù)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種在多任務(wù)嵌入式系統(tǒng)中對(duì)指定進(jìn)程的私有數(shù)據(jù)區(qū)和堆棧區(qū)實(shí)施保護(hù)的方法。
背景技術(shù):
在多任務(wù)嵌入式系統(tǒng)中,為了增加可靠性,防止代碼區(qū)域和進(jìn)程的私有數(shù)據(jù)區(qū)、堆棧區(qū)被其它進(jìn)程改寫,通常需要采取相應(yīng)的內(nèi)存保護(hù)機(jī)制。內(nèi)存保護(hù)機(jī)制,一般都基于特定處理器(CPU)內(nèi)存管理單元(MMU)的操作方法和虛實(shí)地址映射的有關(guān)原理,建立映射頁表,通過設(shè)置相關(guān)頁表表項(xiàng)的屬性位,來實(shí)現(xiàn)對(duì)代碼段、進(jìn)程的私有數(shù)據(jù)區(qū)、堆棧區(qū)的隔離和保護(hù)。
內(nèi)存管理單元(MMU)將內(nèi)存空間劃分成以頁為單位的內(nèi)存塊,頁的大小可以為1K、4K、16K、512K、8M中的一種,通過設(shè)置相關(guān)寄存器和二級(jí)映射表項(xiàng)確定。當(dāng)MMU使能(enable)時(shí),程序中所出現(xiàn)的地址都是虛地址,通過該虛地址訪問到某個(gè)二級(jí)頁表的某個(gè)表項(xiàng),就可以獲得該虛地址所對(duì)應(yīng)的物理頁地址,從而實(shí)現(xiàn)虛實(shí)地址轉(zhuǎn)換。
多任務(wù)嵌入式系統(tǒng)的內(nèi)存管理模塊給每個(gè)進(jìn)程分配整頁的堆棧和數(shù)據(jù)區(qū),其中數(shù)據(jù)區(qū)存放進(jìn)程自己使用的相關(guān)結(jié)構(gòu)變量,該結(jié)構(gòu)變量?jī)H供進(jìn)程自己使用,不允許其它進(jìn)程非法訪問和修改。在運(yùn)行時(shí)根據(jù)當(dāng)前控制所處的位置(在任務(wù)中還是在進(jìn)程中)修改頁表相關(guān)表項(xiàng)的訪問屬性,從而達(dá)到控制每個(gè)進(jìn)程所能夠訪問的內(nèi)存范圍和訪問方式的目的,實(shí)現(xiàn)進(jìn)程間地址空間的隔離。
在多任務(wù)嵌入式系統(tǒng)中,運(yùn)行的進(jìn)程的數(shù)目一般較多。以電信領(lǐng)域的系統(tǒng)為例,在一個(gè)前臺(tái)呼叫處理單板中,運(yùn)行的進(jìn)程數(shù)可高達(dá)3000左右。在實(shí)施MMU保護(hù)后,將會(huì)進(jìn)行頻繁的頁表切換和頁面屬性修改。
但是,在現(xiàn)有的方案中,開啟MMU后,將對(duì)所有的進(jìn)程的私有數(shù)據(jù)區(qū)、堆棧區(qū)進(jìn)行保護(hù)。如果多任務(wù)嵌入式系統(tǒng)的進(jìn)程數(shù)目較多,CPU將花大量的時(shí)間在頁表切換和修改頁面屬性上,導(dǎo)致CPU利用率急劇上升。嚴(yán)重時(shí),將對(duì)嵌入式系統(tǒng)的實(shí)時(shí)性造成嚴(yán)重的影響。
在中國(guó)專利申請(qǐng)?zhí)枮?1129334.9中,提出了另外一種多任務(wù)操作系統(tǒng)中任務(wù)進(jìn)程的保護(hù)方法。該方法建立了一個(gè)守護(hù)鏈表,在該鏈表的主節(jié)點(diǎn)下注冊(cè)一個(gè)保存本任務(wù)進(jìn)程一次使用的遍歷算法的葉子節(jié)點(diǎn)。它的特點(diǎn)是能夠?qū)蚕頂?shù)據(jù)的多個(gè)任務(wù)進(jìn)程進(jìn)行保護(hù),而非對(duì)單個(gè)進(jìn)程的私有數(shù)據(jù)區(qū)域的保護(hù)。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是現(xiàn)有技術(shù)對(duì)私有數(shù)據(jù)區(qū)和堆棧區(qū)實(shí)施保護(hù)會(huì)造成CPU利用率急劇上升,影響嵌入式系統(tǒng)的實(shí)時(shí)性。
為解決上述問題,本發(fā)明提供了一種對(duì)指定進(jìn)程的私有數(shù)據(jù)區(qū)和堆棧區(qū)實(shí)施保護(hù)的方法,主要包括(1)創(chuàng)建系統(tǒng)級(jí)頁表,完成系統(tǒng)初始化過程;(2)判斷是否需要對(duì)指定進(jìn)程實(shí)施保護(hù)如需要,則創(chuàng)建進(jìn)程級(jí)頁表,并配置指定進(jìn)程保護(hù)信息;如不需要,則直接結(jié)束;(3)當(dāng)系統(tǒng)控制權(quán)從其它進(jìn)程切換到待執(zhí)行進(jìn)程時(shí),切換前先判斷待執(zhí)行進(jìn)程是否需要保護(hù)如需要保護(hù),則修改該待執(zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為可讀寫有效;如不需要保護(hù),則直接結(jié)束;(4)當(dāng)系統(tǒng)控制權(quán)從剛執(zhí)行進(jìn)程切換到其它進(jìn)程時(shí),切換前先判斷剛執(zhí)行進(jìn)程是否需要保護(hù)如需要保護(hù),則修改該剛執(zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為只讀;如不需要保護(hù),則直接結(jié)束。
上述方法步驟(1)中,系統(tǒng)完成初始化之后,還具有一設(shè)置一異常處理程序的步驟。
上述方法步驟(2)中,配置指定進(jìn)程保護(hù)信息可以采用以下兩種方式之一第一種是對(duì)該指定進(jìn)程實(shí)施保護(hù);第二種是對(duì)該指定進(jìn)程不作保護(hù),其他進(jìn)程則實(shí)施保護(hù)。
上述方法判斷指定進(jìn)程是否需要保護(hù)進(jìn)一步包括以下步驟a)判斷該進(jìn)程是否啟動(dòng)了保護(hù)功能如果沒有啟動(dòng)即不需要保護(hù),則直接返回;如果啟動(dòng)了保護(hù)功能,則執(zhí)行步驟b);b)判斷該進(jìn)程是否指定實(shí)施保護(hù)的進(jìn)程如果是,則將待執(zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為可讀寫,或?qū)倛?zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為只讀;如果不是,則執(zhí)行步驟c);c)判斷該進(jìn)程是否屬于剔除保護(hù)的進(jìn)程如果是,則不作處理,直接返回;如果不是,則將待執(zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為可讀寫,或?qū)倛?zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為只讀。
因此,采用本發(fā)明的方法對(duì)指定進(jìn)程進(jìn)行保護(hù)后,僅在指定進(jìn)程需要進(jìn)行保護(hù)的情況下才會(huì)修改其頁面屬性,不會(huì)占用太多的CPU資源,避免CPU占有率急劇上升的情況,既達(dá)到了對(duì)指定進(jìn)程實(shí)施保護(hù)、防止非法改寫的目的,又對(duì)系統(tǒng)的性能不產(chǎn)生明顯的影響。
圖1是系統(tǒng)初始化時(shí)對(duì)指定進(jìn)程配置保護(hù)信息的流程圖;圖2是系統(tǒng)控制權(quán)從其它進(jìn)程切換到待執(zhí)行進(jìn)程前的處理流程圖;圖3是系統(tǒng)控制權(quán)從剛執(zhí)行進(jìn)程切換到其它進(jìn)程前的處理流程圖;圖4是非法改寫其它受保護(hù)進(jìn)程的堆棧區(qū)、數(shù)據(jù)區(qū)發(fā)生異常時(shí)的處理流程圖。
具體實(shí)施例方式
下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步的描述。在本實(shí)例中,多任務(wù)嵌入式操作系統(tǒng)采用pSos,CPU采用MPC860,頁面大小為4K。但本發(fā)明并不限定于只適用于上述系統(tǒng)配置。
如圖1,系統(tǒng)初始化時(shí)需要對(duì)指定進(jìn)程配置保護(hù)信息,主要包括以下步驟首先,創(chuàng)建系統(tǒng)級(jí)頁表,完成系統(tǒng)初始化過程,包括內(nèi)存管理、文件管理、調(diào)度處理等,創(chuàng)建所有任務(wù)與進(jìn)程,使能(enable)MMU。系統(tǒng)級(jí)頁表是供操作系統(tǒng)本身使用,在系統(tǒng)級(jí)頁表中所有的頁面都是可讀寫的。創(chuàng)建系統(tǒng)級(jí)頁表后,還可設(shè)置異常處理程序,該異常處理程序記錄發(fā)生異常時(shí)的現(xiàn)場(chǎng)信息,包括異常類型、相關(guān)寄存器的值、發(fā)生異常的任務(wù)和進(jìn)程等有利于故障定位的相關(guān)信息,以在切換進(jìn)程時(shí)當(dāng)受保護(hù)進(jìn)程的私有數(shù)據(jù)區(qū)或堆棧區(qū)被非法改寫時(shí),可以進(jìn)行相應(yīng)的異常處理,這在隨后將結(jié)合圖4詳細(xì)介紹。
接著,判斷是否需要對(duì)指定進(jìn)程實(shí)施保護(hù)如需要,則創(chuàng)建進(jìn)程級(jí)頁表,并配置指定進(jìn)程保護(hù)信息;如不需要,則直接結(jié)束。進(jìn)程級(jí)頁表是供進(jìn)程使用的,在進(jìn)程頁表中,私有數(shù)據(jù)區(qū)和堆棧區(qū)的頁面屬性為只讀屬性的進(jìn)程受保護(hù),其它屬性為可讀寫的進(jìn)程則不受保護(hù)。配置指定進(jìn)程的保護(hù)信息,可以在前臺(tái)配置,也可以在后臺(tái)配置,并通過網(wǎng)絡(luò)連接傳輸?shù)角芭_(tái),前臺(tái)收到后臺(tái)傳過來的配置信息,將對(duì)它進(jìn)行合法性檢查,并在下一次任務(wù)或進(jìn)程切換時(shí)生效。配置該指定進(jìn)程的保護(hù)信息可以采用以下兩種方式之一來描述第一種是對(duì)該指定進(jìn)程實(shí)施MMU保護(hù);第二種是對(duì)該指定進(jìn)程不作MMU保護(hù),其他進(jìn)程則實(shí)施保護(hù)。對(duì)于同一種進(jìn)程,只能存在一種描述方式,即指定保護(hù)或剔除保護(hù)之一。
當(dāng)系統(tǒng)控制權(quán)從其它進(jìn)程切換到待執(zhí)行進(jìn)程時(shí),如圖2,切換前先判斷待執(zhí)行進(jìn)程是否需要保護(hù)如需要保護(hù),則修改該待執(zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為可讀寫;如不需要保護(hù),則直接結(jié)束返回,不作處理??紤]到CPU的兼容、穩(wěn)定性,在需要保護(hù)待執(zhí)行進(jìn)程的情況下,可以先將該待執(zhí)行進(jìn)程切換到系統(tǒng)級(jí)頁表,再將進(jìn)程級(jí)頁表中該指定進(jìn)程的相關(guān)頁面屬性修改為可讀寫,此時(shí)相當(dāng)于把進(jìn)程級(jí)頁表當(dāng)作普通的內(nèi)存空間來修改,隨后將待執(zhí)行進(jìn)程切換到修改后的進(jìn)程級(jí)頁表。
當(dāng)系統(tǒng)控制權(quán)從剛執(zhí)行進(jìn)程切換到其它待執(zhí)行進(jìn)程時(shí),如圖3所示,切換前先判斷剛執(zhí)行進(jìn)程是否需要保護(hù)如需要保護(hù),則修改該剛執(zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為只讀;如不需要保護(hù),則不作任何處理直接結(jié)束返回。對(duì)于需要保護(hù)的剛執(zhí)行進(jìn)程頁面屬性修改為只讀,即由當(dāng)前的可讀寫狀態(tài)改為只讀狀態(tài)。
如圖4所示,當(dāng)受保護(hù)進(jìn)程的堆棧區(qū)、數(shù)據(jù)區(qū)被其他進(jìn)程企圖非法改寫發(fā)生異常狀況時(shí),系統(tǒng)隨即會(huì)進(jìn)入異常處理程序,該異常處理程序記錄發(fā)生異常時(shí)的現(xiàn)場(chǎng)信息,包括異常類型、相關(guān)寄存器的值、發(fā)生異常的任務(wù)和進(jìn)程等有利于故障定位的相關(guān)信息。首先,記錄異常發(fā)生的次數(shù),獲取引起該異常的當(dāng)前任務(wù)或進(jìn)程信息,保存相關(guān)寄存器信息,并向后臺(tái)打印異常信息,便于操作人員根據(jù)不同情況作相應(yīng)處理;隨后判斷是否屬于嚴(yán)重異常類型如果是嚴(yán)重異常,則回復(fù)寄存器的值,并復(fù)位系統(tǒng);如果不是嚴(yán)重異常,則不作處理,返回。
在此值得特別說明的是,上述在進(jìn)程切換之前,包括系統(tǒng)控制權(quán)從其它進(jìn)程切換到待執(zhí)行進(jìn)程和系統(tǒng)控制權(quán)從剛執(zhí)行進(jìn)程切換到其它待執(zhí)行進(jìn)程兩種情況,判斷指定進(jìn)程(待執(zhí)行進(jìn)程或剛執(zhí)行進(jìn)程)是否需要保護(hù)可以進(jìn)一步包括以下步驟a)判斷該進(jìn)程是否啟動(dòng)了保護(hù)功能如果沒有啟動(dòng)即不需要保護(hù),則直接返回;如果啟動(dòng)了保護(hù)功能,則執(zhí)行步驟b);b)判斷該進(jìn)程是否指定實(shí)施保護(hù)的進(jìn)程如果是,則將待執(zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為可讀寫,或?qū)倛?zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為只讀;如果不是,則執(zhí)行步驟c);c)判斷該進(jìn)程是否屬于剔除保護(hù)的進(jìn)程如果是,則不作處理,直接返回;如果不是,則將待執(zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為可讀寫,或?qū)倛?zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為只讀。
這是因?yàn)?,?duì)于任意一個(gè)進(jìn)程,可能存在以下三種情況之一指定對(duì)該進(jìn)程實(shí)施MMU保護(hù);指定對(duì)該進(jìn)程不作MMU保護(hù),其他未指定的進(jìn)程則實(shí)施保護(hù);既未指定實(shí)施保護(hù),也未指定不作保護(hù)。所以,對(duì)同一進(jìn)程需要分別作以上三種情況的判斷。當(dāng)然,也可對(duì)所有進(jìn)程采取統(tǒng)一的配置方式,即對(duì)所有進(jìn)程統(tǒng)一采取指定實(shí)施保護(hù)(未指定的進(jìn)程則不實(shí)施保護(hù)),或者對(duì)所有進(jìn)程統(tǒng)一采取指定剔除保護(hù)(未指定的進(jìn)程則實(shí)施保護(hù)),顯而易見,此時(shí)上述判斷步驟僅需作簡(jiǎn)單的變化即可。上述情況,毫無疑問均應(yīng)該是本發(fā)明的等同變換,仍屬于本發(fā)明的保護(hù)范圍。
綜合以上所述,由于本發(fā)明的保護(hù)方法只對(duì)指定進(jìn)程實(shí)施保護(hù),僅在指定進(jìn)程需要進(jìn)行保護(hù)的情況下才會(huì)修改其頁面屬性,所以,即使在運(yùn)行的進(jìn)程的數(shù)目很多的多任務(wù)嵌入式系統(tǒng)中,修改頁表屬性操作僅限于受保護(hù)的進(jìn)程,大大地降低了CPU的利用率,避免CPU占有率急劇上升的情況,既達(dá)到了對(duì)指定進(jìn)程實(shí)施保護(hù)、防止非法改寫的目的,又對(duì)系統(tǒng)的性能不產(chǎn)生明顯的影響。
權(quán)利要求
1.一種對(duì)指定進(jìn)程私有數(shù)據(jù)區(qū)和堆棧區(qū)實(shí)施保護(hù)的方法,其特征在于,該方法主要包括(1)創(chuàng)建系統(tǒng)級(jí)頁表,完成系統(tǒng)初始化過程;(2)判斷是否需要對(duì)指定進(jìn)程實(shí)施保護(hù)如需要,則創(chuàng)建進(jìn)程級(jí)頁表,并配置指定進(jìn)程保護(hù)信息;如不需要,則直接結(jié)束;(3)當(dāng)系統(tǒng)控制權(quán)從其它進(jìn)程切換到待執(zhí)行進(jìn)程時(shí),切換前先判斷待執(zhí)行進(jìn)程是否需要保護(hù)如需要保護(hù),則修改該待執(zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為可讀寫有效;如不需要保護(hù),則直接結(jié)束并返回;(4)當(dāng)系統(tǒng)控制權(quán)從剛執(zhí)行進(jìn)程切換到其它進(jìn)程時(shí),切換前先判斷剛執(zhí)行進(jìn)程是否需要保護(hù)如需要保護(hù),則修改該剛執(zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為只讀;如不需要保護(hù),則直接結(jié)束返回。
2.如權(quán)利要求1所述的方法,其特征在于,步驟(1)中,系統(tǒng)完成初始化之后,還具有一設(shè)置一異常處理程序的步驟。
3.如權(quán)利要求2所述的方法,其特征在于,當(dāng)受保護(hù)進(jìn)程的堆棧區(qū)、數(shù)據(jù)區(qū)被其他進(jìn)程企圖非法改寫發(fā)生異常狀況時(shí),系統(tǒng)隨即會(huì)進(jìn)入異常處理程序首先,記錄異常發(fā)生的次數(shù),獲取引起該異常的當(dāng)前任務(wù)或進(jìn)程信息,保存相關(guān)寄存器信息,并向后臺(tái)打印異常信息;隨后判斷是否屬于嚴(yán)重異常類型如果是嚴(yán)重異常,則回復(fù)寄存器的值,并復(fù)位系統(tǒng);如果不是嚴(yán)重異常,則不作處理,直接結(jié)束返回。
4.如權(quán)利要求1所述的方法,其特征在于,步驟(2)中,配置指定進(jìn)程保護(hù)信息可以采用以下兩種方式之一第一種是對(duì)該指定進(jìn)程實(shí)施保護(hù);第二種是對(duì)該指定進(jìn)程不作保護(hù),其他進(jìn)程則實(shí)施保護(hù)。
5.如權(quán)利要求1或4所述的方法,其特征在于,配置指定進(jìn)程的保護(hù)信息,是在前臺(tái)完成配置。
6.如權(quán)利要求1或4所述的方法,其特征在于,配置指定進(jìn)程的保護(hù)信息,是在后臺(tái)完成配置,并通過網(wǎng)絡(luò)連接傳輸?shù)角芭_(tái),前臺(tái)收到后臺(tái)傳過來的配置信息,將對(duì)它進(jìn)行合法性檢查,并在下一次任務(wù)或進(jìn)程切換時(shí)生效。
7.如權(quán)利要求1所述的方法,其特征在于,步驟(3)中,如待執(zhí)行進(jìn)程需要保護(hù),還可通過以下方式實(shí)施保護(hù)先將該待執(zhí)行進(jìn)程切換到系統(tǒng)級(jí)頁表,再將進(jìn)程級(jí)頁表中該指定進(jìn)程的相關(guān)頁面屬性修改為可讀寫,隨后將待執(zhí)行進(jìn)程切換到修改后的進(jìn)程級(jí)頁表。
8.如權(quán)利要求1所述的方法,其特征在于,步驟(3)和(4)中,判斷指定進(jìn)程是否需要保護(hù)進(jìn)一步包括以下步驟a)判斷該進(jìn)程是否啟動(dòng)了保護(hù)功能如果沒有啟動(dòng)即不需要保護(hù),則直接返回;如果啟動(dòng)了保護(hù)功能,則執(zhí)行步驟b);b)判斷該進(jìn)程是否指定實(shí)施保護(hù)的進(jìn)程如果是,則將待執(zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為可讀寫,或?qū)倛?zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為只讀;如果不是,則執(zhí)行步驟c);c)判斷該進(jìn)程是否屬于剔除保護(hù)的進(jìn)程如果是,則不作處理,直接返回;如果不是,則將待執(zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為可讀寫,或?qū)倛?zhí)行進(jìn)程的數(shù)據(jù)區(qū)、堆棧區(qū)頁面屬性為只讀。
全文摘要
本發(fā)明提供了一種對(duì)指定進(jìn)程私有數(shù)據(jù)區(qū)和堆棧區(qū)實(shí)施保護(hù)的方法,該方法僅僅對(duì)需要保護(hù)私有數(shù)據(jù)區(qū)和堆棧區(qū)的指定進(jìn)程,在進(jìn)行進(jìn)程切換之前,修改其頁面屬性,所以,即使在運(yùn)行的進(jìn)程數(shù)目很多的多任務(wù)嵌入式系統(tǒng)中,修改頁表屬性操作僅限于受保護(hù)的進(jìn)程,大大地降低了CPU的利用率,既達(dá)到了對(duì)指定進(jìn)程實(shí)施保護(hù)、防止非法改寫的目的,又對(duì)系統(tǒng)的性能不產(chǎn)生明顯的影響。
文檔編號(hào)G06F9/46GK1737761SQ20041005117
公開日2006年2月22日 申請(qǐng)日期2004年8月18日 優(yōu)先權(quán)日2004年8月18日
發(fā)明者汪布什 申請(qǐng)人:中興通訊股份有限公司