專利名稱:對(duì)安全控制模塊內(nèi)存進(jìn)行集中控制的方法
技術(shù)領(lǐng)域:
本發(fā)明屬于安全操作系統(tǒng)領(lǐng)域,是一種對(duì)安全控制模塊運(yùn)行中所使用的內(nèi)存進(jìn)行
集中分配及管理的方法。該方法不僅能夠提高系統(tǒng)資源的使用效率,而且還能為安全控制 模塊所使用的數(shù)據(jù)提供更高強(qiáng)度的保護(hù)。
背景技術(shù):
國(guó)標(biāo)GB17859-1999要求結(jié)構(gòu)化保護(hù)級(jí)以上級(jí)別的操作系統(tǒng)需要對(duì)系統(tǒng)中所有主
客體進(jìn)行安全標(biāo)記,而在大型服務(wù)器中,系統(tǒng)中的主、客體總數(shù)可能達(dá)到上百萬個(gè)的量級(jí),
并且有可能動(dòng)態(tài)變化。操作系統(tǒng)實(shí)施強(qiáng)制訪問控制策略,需要對(duì)這些客體的名稱進(jìn)行檢索、
對(duì)比等查找行為。相應(yīng)地,需要為這些主客體的安全標(biāo)記等在內(nèi)存中分配空間。《信息系統(tǒng)等級(jí)保護(hù)安全設(shè)計(jì)技術(shù)要求》規(guī)定,結(jié)構(gòu)化保護(hù)級(jí)的操作系統(tǒng),在關(guān)鍵
安全保護(hù)部件中需要?jiǎng)澐止δ軐哟?。?duì)安全標(biāo)記的維護(hù)和訪問控制策略裁決行為作為安
全功能中最核心的內(nèi)容,需要在關(guān)鍵安全保護(hù)部件功能層中的最底層完成,而使用系統(tǒng)自
身的內(nèi)存分配機(jī)制,可能導(dǎo)致缺頁(yè)中斷等現(xiàn)象,既影響系統(tǒng)的性能,又可能出現(xiàn)客體重用問
題,為攻擊者提供攻擊途徑。 結(jié)構(gòu)化保護(hù)級(jí)安全操作系統(tǒng)中,運(yùn)行時(shí)需要用到的安全標(biāo)記和訪問控制策略最好 始終保持在內(nèi)存中,不應(yīng)在刪除前被釋放,也不應(yīng)被置換到磁盤空間中。這就要求我們?cè)陉P(guān) 鍵安全保護(hù)部件功能層次最底層使用專門的內(nèi)存分配機(jī)制來維護(hù)安全標(biāo)記的內(nèi)存分配,同 時(shí)要做到內(nèi)存分配盡量高效、節(jié)省。 安全標(biāo)記的內(nèi)存需求可以分為兩個(gè)部分,一部分是安全屬性的內(nèi)存需求,一個(gè)安 全屬性一般有固定的內(nèi)存空間需求,這些內(nèi)存空間需求比較容易進(jìn)行管理。而另一部分是 這些安全標(biāo)記所對(duì)應(yīng)的主客體對(duì)象名稱的空間需求,這些主客體對(duì)象名稱的特點(diǎn)是數(shù)量 眾多、總長(zhǎng)度不定,但平均值較小(以文件為例,如果只記錄當(dāng)前目錄下對(duì)象名稱,其長(zhǎng)度 一般在幾個(gè)字節(jié)到十幾個(gè)字節(jié)之間,最大不會(huì)超過255個(gè)字節(jié))、變化不很頻繁,另外,運(yùn)行 過程中,只有唯一的指針(安全標(biāo)記中對(duì)象名稱指針)指向該內(nèi)存空間需求。 一般的內(nèi)存 分配算法對(duì)其進(jìn)行處理時(shí)效率欠佳。
發(fā)明內(nèi)容
本發(fā)明的目的在于針對(duì)安全操作系統(tǒng)中安全模塊使用內(nèi)存的特點(diǎn),設(shè)計(jì)一種內(nèi)存 分配算法,在提高系統(tǒng)資源使用效率的同時(shí),為安全控制模塊所使用的數(shù)據(jù)提供更高強(qiáng)度 的保護(hù)。 本發(fā)明是采用以下技術(shù)手段實(shí)現(xiàn)的 —種對(duì)安全控制模塊內(nèi)存進(jìn)行集中控制的方法,以雙向鏈表維護(hù)名稱空間內(nèi)存 塊,以堆棧機(jī)制分配名稱空間;包括以下步驟預(yù)定義參數(shù)用al 1oc—pages 0函數(shù)分配N 個(gè)大小為Bz的內(nèi)存塊和建立名稱空間管理機(jī)制;名稱空間處理安全模塊的內(nèi)存分配請(qǐng)求; 名稱空間處理安全模塊的內(nèi)存釋放請(qǐng)求;名稱空間自檢操作。
本發(fā)明與現(xiàn)有技術(shù)相比,具有以下明顯的優(yōu)勢(shì)和有益效果 l,在核心層外執(zhí)行系統(tǒng)內(nèi)存分配,可以保證核心層操作的原子性,同時(shí)方便系統(tǒng)
采用內(nèi)存隔離機(jī)制保護(hù)結(jié)構(gòu)化保護(hù)級(jí)操作系統(tǒng)的核心層,避免客體重用問題。 2,每一次名稱空間內(nèi)存分配操作,需執(zhí)行的指令少,因此可以保證系統(tǒng)的高性能
內(nèi)存分配。 3,通過內(nèi)存回收操作,可以始終保持名稱空間的空洞內(nèi)存不會(huì)過大,避免內(nèi)存浪費(fèi)。
圖1名稱空間內(nèi)存分配機(jī)制工作流程;
圖2名稱空間內(nèi)存分配機(jī)制運(yùn)行流程。
具體實(shí)施例方式
本發(fā)明闡述了一種高效的結(jié)構(gòu)化保護(hù)級(jí)操作系統(tǒng)核心層名稱空間內(nèi)存分配方法。 它以雙向鏈表維護(hù)名稱空間內(nèi)存塊,以堆棧機(jī)制分配名稱空間,并以分解的排序方法對(duì)空 洞值動(dòng)態(tài)增加的空洞內(nèi)存塊進(jìn)行大致排序,以保證執(zhí)行內(nèi)存塊回收操作時(shí),能迅速找到內(nèi) 存塊的回收對(duì)象。 為達(dá)到上述目的,本發(fā)明的具體實(shí)施方式
是這樣實(shí)現(xiàn)的設(shè)定一個(gè)內(nèi)存初始值,在 系統(tǒng)中預(yù)分配內(nèi)存初始值大小的內(nèi)存,由名稱空間內(nèi)存分配機(jī)制集中管理,系統(tǒng)定期檢查 (可以定時(shí)檢查或定次檢查)預(yù)分配內(nèi)存的總空間和空閑空間,當(dāng)預(yù)分配的內(nèi)存空閑空間 小于分配閾值時(shí),系統(tǒng)補(bǔ)充預(yù)分配內(nèi)存;當(dāng)預(yù)分配內(nèi)存總空間大于內(nèi)存初始值,且空閑空間 大于回收閾值時(shí),系統(tǒng)從預(yù)分配內(nèi)存中回收內(nèi)存。系統(tǒng)內(nèi)存分配及管理的流程如圖2所示。
本算法的核心部分可以用邏輯電路或程序語言來實(shí)現(xiàn),同時(shí),為外層調(diào)用提供初 始化、名稱空間分配、名稱空間監(jiān)測(cè)、名稱空間補(bǔ)充和名稱空間回收五個(gè)調(diào)用接口。算法主 要以以下四個(gè)步驟實(shí)現(xiàn)
—、預(yù)定義以下參數(shù) 名稱空間使用內(nèi)存塊大小,應(yīng)為4K的整數(shù)倍(記為Bz)。 初始化時(shí)分配內(nèi)存塊數(shù)量(記為N)。 內(nèi)存塊整理閥值(記為p)。 名稱空間內(nèi)存分配閥值(記為ql)。 名稱空間內(nèi)存釋放閥值(記為q2)。 每次新增/釋放內(nèi)存塊數(shù)量(記為i)。 二、用alloc—pages()函數(shù)分配N個(gè)大小為Bz的內(nèi)存塊和建立名稱空間管理機(jī) 制。 系統(tǒng)定義一個(gè)名稱空間管理數(shù)據(jù)結(jié)構(gòu),其中記錄如下內(nèi)容。
—個(gè)地址指針,指向當(dāng)前使用的名稱空間內(nèi)存塊。
—個(gè)整數(shù)值,記錄當(dāng)前分配內(nèi)存塊數(shù)量(記為Bn),初始為N。
—個(gè)整數(shù)值,記錄當(dāng)前空閑內(nèi)存塊數(shù)量(記為Bf),初始為N。
名稱空間雙向鏈表地址,所有名稱空間占用內(nèi)存塊掛載在鏈表上。
指向內(nèi)存指針對(duì)應(yīng)表的指針。 名稱空間使用內(nèi)存總量(記為Bb),初始為0。 定義一個(gè)指針對(duì)應(yīng)表,記錄指針序號(hào),對(duì)應(yīng)內(nèi)存長(zhǎng)度及對(duì)應(yīng)內(nèi)存位置。初始為空。
每個(gè)內(nèi)存塊起始地址分出一部份固定空間(記為m),存放如下管理信息
雙向鏈表指針,用以組成鏈表結(jié)構(gòu)。
內(nèi)存塊當(dāng)前可用位置(記為C),初始為m。
本內(nèi)存塊空洞空間數(shù)值(記為Hn),初始為0。
三、名稱空間處理安全模塊的內(nèi)存分配請(qǐng)求 通過名稱空間管理數(shù)據(jù)結(jié)構(gòu)中的地址指針找到當(dāng)前活動(dòng)的名稱空間內(nèi)存塊。
若內(nèi)存分配需求長(zhǎng)度為n,則作如下操作 檢查Bz-C-n是否小于O,如是,則將當(dāng)前空閑內(nèi)存塊設(shè)為當(dāng)前內(nèi)存塊,當(dāng)前空閑內(nèi)
存塊的下一個(gè)空閑內(nèi)存塊置為當(dāng)前空閑內(nèi)存塊。Bf = Bf_l。 若Bf < ql,則分配新的i個(gè)內(nèi)存塊加入隊(duì)列。Bn = Bn+i, Bf = Bf+i 在指針對(duì)應(yīng)表中登記,置對(duì)應(yīng)內(nèi)存長(zhǎng)度為n,對(duì)應(yīng)內(nèi)存位置為當(dāng)前內(nèi)存塊地址IC C = C+n。 Bb = Bb+n 返回對(duì)應(yīng)表中指針序號(hào),作為名稱空間使用內(nèi)存地址(記為A)。
四、名稱空間處理安全模塊的內(nèi)存釋放請(qǐng)求
若一個(gè)長(zhǎng)度為n的名稱空間被釋放,則作如下操作 按A在對(duì)應(yīng)表中查到對(duì)應(yīng)內(nèi)存地址后對(duì)自減其對(duì)Bz求模,獲取名稱所屬相關(guān)內(nèi)存 塊的起始地址。 Hn+n,若Hn/(Bz-m) 〉p,則進(jìn)行內(nèi)存整理。檢查對(duì)應(yīng)表中所有此內(nèi)存塊中有效內(nèi) 容,將其內(nèi)存移動(dòng)到當(dāng)前活動(dòng)內(nèi)存塊中,并修改對(duì)應(yīng)表中內(nèi)存地址項(xiàng)。此內(nèi)存塊清空后加入 隊(duì)列。Bf = Bf+1。 Bb = Bb_n。若Bf > q2,則從隊(duì)列中取出i個(gè)空閑內(nèi)存塊,清0后釋放。Bn =
Bn-i, Bf = Bf-i。
五、名稱空間自檢操作; 系統(tǒng)空閑時(shí)間可進(jìn)行名稱空間內(nèi)存檢測(cè)操作,該操作可以定時(shí)觸發(fā),或定次觸發(fā) (當(dāng)上次刷新后,名稱空間的分配行為次數(shù)達(dá)到一定數(shù)量和/或名稱空間的刪除行為次數(shù) 達(dá)到一定數(shù)量時(shí),觸發(fā)名稱空間內(nèi)存檢測(cè)行為)。 名稱空間內(nèi)存檢測(cè)操作按照名稱空間當(dāng)前分配內(nèi)存的狀態(tài),當(dāng)時(shí),觸發(fā)名稱空間
內(nèi)存回收行為,也可以在空洞內(nèi)存總量或與使用內(nèi)存的比值大小增加到一定程度時(shí),觸發(fā)
名稱空間內(nèi)存回收行為。
回收行為按如下方式進(jìn)行 遍歷指針對(duì)應(yīng)表,把其中所有有效項(xiàng)順序重寫到空閑塊中,每使用一個(gè)空閑塊則 Bf = Bf-l。更新對(duì)應(yīng)表中地址項(xiàng),清空后的內(nèi)存塊置O后加入空閑塊,每加入一個(gè)則Bf = Bf+1。 重新檢查Bf項(xiàng),若Bf > q2,則從隊(duì)列中取出i個(gè)空閑內(nèi)存塊,置O后釋放。Bn = Bn-i, Bf = Bf-i。
權(quán)利要求
一種對(duì)安全控制模塊內(nèi)存進(jìn)行集中控制的方法,以雙向鏈表維護(hù)名稱空間內(nèi)存塊,以堆棧機(jī)制分配名稱空間;其特征在于包括以下步驟預(yù)定義參數(shù)用alloc_pages()函數(shù)分配N個(gè)大小為Bz的內(nèi)存塊和建立名稱空間管理機(jī)制;名稱空間處理安全模塊的內(nèi)存分配請(qǐng)求;名稱空間處理安全模塊的內(nèi)存釋放請(qǐng)求;名稱空間自檢操作。
2. 根據(jù)權(quán)利要求1所述的對(duì)安全控制模塊內(nèi)存進(jìn)行集中控制的方法,其特征在于所 述的預(yù)定義參數(shù)包括名稱空間使用內(nèi)存塊大小BZ ;初始化時(shí)分配內(nèi)存塊數(shù)量N ;內(nèi)存塊整 理閥值P ;名稱空間內(nèi)存分配閥值ql ;名稱空間內(nèi)存釋放閥值q2 ;每次新增/釋放內(nèi)存塊數(shù)
3. 根據(jù)權(quán)利要求1所述的對(duì)安全控制模塊內(nèi)存進(jìn)行集中控制的方法,其特征在于所 述的用alloc—pages()函數(shù)分配N個(gè)大小為Bz的內(nèi)存塊和建立名稱空間管理機(jī)制包括以 下步驟;一個(gè)地址指針,指向當(dāng)前使用的名稱空間內(nèi)存塊;一個(gè)整數(shù)值,記錄當(dāng)前分配內(nèi)存 塊數(shù)量Bn,初始為N ;—個(gè)整數(shù)值,記錄當(dāng)前空閑內(nèi)存塊數(shù)量Bf,初始為N ;名稱空間雙向鏈 表地址,所有名稱空間占用內(nèi)存塊掛載在鏈表上;指向內(nèi)存指針對(duì)應(yīng)表的指針;名稱空間 使用內(nèi)存總量Bb,初始為0 ;定義一個(gè)指針對(duì)應(yīng)表,記錄指針序號(hào),對(duì)應(yīng)內(nèi)存長(zhǎng)度及對(duì)應(yīng)內(nèi) 存位置,初始為空;每個(gè)內(nèi)存塊起始地址分出一部分固定空間m,存放管理信息。
4. 根據(jù)權(quán)利要求1所述的對(duì)安全控制模塊內(nèi)存進(jìn)行集中控制的方法,其特征在于所 述的名稱空間處理安全模塊的內(nèi)存分配請(qǐng)求包括以下步驟通過地址指針找到當(dāng)前活動(dòng)的 名稱空間內(nèi)存塊;若內(nèi)存分配需求長(zhǎng)度為n,則作如下操作檢查BzCn是否小于0,如是,則 將當(dāng)前空閑內(nèi)存塊設(shè)為當(dāng)前內(nèi)存塊,當(dāng)前空閑內(nèi)存塊的下一個(gè)空閑內(nèi)存塊置為當(dāng)前空閑內(nèi) 存塊;Bf = Bf-l ;若Bf < ql,則分配新的i個(gè)內(nèi)存塊加入隊(duì)列;Bn = Bn+i, Bf = Bf+i在 指針對(duì)應(yīng)表中登記,置對(duì)應(yīng)內(nèi)存長(zhǎng)度為n,對(duì)應(yīng)內(nèi)存位置為當(dāng)前內(nèi)存塊地址+C, C = C+n ;Bb =Bb+n返回對(duì)應(yīng)表中指針序號(hào),記為A的作為名稱空間使用內(nèi)存地址。
5. 根據(jù)權(quán)利要求1所述的對(duì)安全控制模塊內(nèi)存進(jìn)行集中控制的方法,其特征在于所 述的名稱空間處理安全模塊的內(nèi)存釋放請(qǐng)求包括以下步驟若一個(gè)長(zhǎng)度為n的名稱空間被釋放,則作如下操作按A在對(duì)應(yīng)表中查到對(duì)應(yīng)內(nèi)存地址 后對(duì)自減其對(duì)Bz求模,獲取名稱所屬相關(guān)內(nèi)存塊的起始地址;Hn+n,若Hn/(Bz-m) > p,則 進(jìn)行內(nèi)存整理;檢查對(duì)應(yīng)表中所有此內(nèi)存塊中有效內(nèi)容,將其內(nèi)存移動(dòng)到當(dāng)前活動(dòng)內(nèi)存塊 中,并修改對(duì)應(yīng)表中內(nèi)存地址項(xiàng);此內(nèi)存塊清空后加入隊(duì)列;Bf = Bf+l ;Bb二Bb-n,若Bf > q2,則從隊(duì)列中取出i個(gè)空閑內(nèi)存塊,清0后釋放;Bn = Bn_i, Bf = B_i :
6. 根據(jù)權(quán)利要求1所述的對(duì)安全控制模塊內(nèi)存進(jìn)行集中控制的方法,其特征在于所 述的名稱空間自檢操作包括以下步驟系統(tǒng)空閑時(shí)間可進(jìn)行名稱空間內(nèi)存檢測(cè)操作,該操作可以定時(shí)觸發(fā),或定次觸發(fā);名稱 空間內(nèi)存檢測(cè)操作按照名稱空間當(dāng)前分配內(nèi)存的狀態(tài),當(dāng)時(shí),觸發(fā)名稱空間內(nèi)存回收行為, 也可以在空洞內(nèi)存總量或與使用內(nèi)存的比值大小增加到一定程度時(shí),觸發(fā)名稱空間內(nèi)存回 收行為。
7. 根據(jù)權(quán)利要求1或3所述的對(duì)安全控制模塊內(nèi)存進(jìn)行集中控制的方法,其特征在于 所述的管理信息包括雙向鏈表指針,用以組成鏈表結(jié)構(gòu);記為C的內(nèi)存塊當(dāng)前可用位置, 初始為m ;記為Hn的本內(nèi)存塊空洞空間數(shù)值,初始為0。
8. 根據(jù)權(quán)利要求1或6所述的對(duì)安全控制模塊內(nèi)存進(jìn)行集中控制的方法,其特征在于所述的回收行為按如下方式進(jìn)行遍歷指針對(duì)應(yīng)表,把其中所有有效項(xiàng)順序重寫到空閑塊中,每使用一個(gè)空閑塊則Bf = Bf-l ;更新對(duì)應(yīng)表中地址項(xiàng),清空后的內(nèi)存塊置0后加入空閑塊,每加入一個(gè)則Bf = Bf+1 ;重新檢查Bf項(xiàng),若Bf > q2,則從隊(duì)列中取出i個(gè)空閑內(nèi)存塊,置0后釋放;Bn = Bn-i, Bf = Bf_i。
全文摘要
一種對(duì)安全控制模塊內(nèi)存進(jìn)行集中控制的方法,以雙向鏈表維護(hù)名稱空間內(nèi)存塊,以堆棧機(jī)制分配名稱空間,并以分解的排序方法對(duì)空洞值動(dòng)態(tài)增加的空洞內(nèi)存塊進(jìn)行排序;包括以下步驟預(yù)定義參數(shù)用alloc_pages()函數(shù)分配N個(gè)大小為Bz的內(nèi)存塊和建立名稱空間管理機(jī)制;名稱空間處理安全模塊的內(nèi)存分配請(qǐng)求;名稱空間處理安全模塊的內(nèi)存釋放請(qǐng)求;名稱空間自檢操作。該方法可以保證可信計(jì)算基安全名稱空間的處理符合單向調(diào)用的原則,系統(tǒng)通過一個(gè)監(jiān)控程序監(jiān)控安全名稱空間的狀況,在內(nèi)存塊空洞較大時(shí),回收空洞內(nèi)存;在空閑內(nèi)存塊數(shù)量不足時(shí),則補(bǔ)充空閑內(nèi)存塊。同時(shí)為可信計(jì)算基提供一個(gè)穩(wěn)定、高效的安全名稱空間內(nèi)存分配機(jī)制。
文檔編號(hào)G06F21/02GK101739346SQ20091024220
公開日2010年6月16日 申請(qǐng)日期2009年12月4日 優(yōu)先權(quán)日2009年12月4日
發(fā)明者沈昌祥, 田健生, 胡俊, 蔡勉 申請(qǐng)人:北京工業(yè)大學(xué)