專利名稱:一種多系統(tǒng)下對實時操作系統(tǒng)所占用內(nèi)存的保護(hù)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計算機(jī)內(nèi)存管理領(lǐng)域,尤其涉及一種多系統(tǒng)下對實時操作系統(tǒng)所占用內(nèi)存的保護(hù)方法。
背景技術(shù):
在嵌入式領(lǐng)域,多個操作系統(tǒng)同時在一個硬件平臺上運(yùn)行是一個趨勢,在這些操作系統(tǒng)中實時操作系統(tǒng)是很重要的一類。實時操作系統(tǒng)具有響應(yīng)及時和可靠性高的特點(diǎn),這是普通操作系統(tǒng)不能提供的。把實時操作系統(tǒng)和普通操作系統(tǒng)結(jié)合起來可以進(jìn)行操作系統(tǒng)的優(yōu)勢互補(bǔ),提供更多的功能,獲得更高的硬件利用率。但多系統(tǒng)運(yùn)行在同一個硬件平臺上也帶來了一些系統(tǒng)安全性的問題,特別是內(nèi)存安全問題。內(nèi)存保護(hù)是實時操作系統(tǒng)的重要研究內(nèi)容,內(nèi)存保護(hù)方法的優(yōu)劣直接關(guān)系到實時操作系統(tǒng)的安全性、穩(wěn)定性和可靠性。美國WindRiver公司開發(fā)的VxWorks嵌入式實時操作系統(tǒng),支持多任務(wù),所有任務(wù)共享一個內(nèi)存地址空間,彼此之間沒有任何保護(hù)。這種設(shè)計實現(xiàn)簡單、執(zhí)行效率高,能夠很好地滿足嵌入式實時性需求。但是任務(wù)的正確執(zhí)行完全依賴于程序員編寫正確無誤的程序。一個任務(wù)的錯誤可能會導(dǎo)致另外的任務(wù)無法執(zhí)行,甚至整個系統(tǒng)的癱瘓,因此程序的可靠性和系統(tǒng)的健壯性都不高。加拿大QNX軟件系統(tǒng)有限公司開發(fā)的QNX實時操作系統(tǒng)是一個基于消息傳遞的微內(nèi)核實時操作系統(tǒng),支持進(jìn)程/線程任務(wù)模型,進(jìn)程管理功能屬于一個動態(tài)可加載的模塊。在沒有配置進(jìn)程管理器的QNX實時系統(tǒng)中,所有的應(yīng)用線程和核心連接在一起,都處在一個地址空間中,這時的系統(tǒng)是無保護(hù)模式系統(tǒng)。當(dāng)進(jìn)程管理器啟動以后,一個應(yīng)用創(chuàng)建為一個進(jìn)程,進(jìn)程內(nèi)部可能有若干線程,每個進(jìn)程有自己的虛擬地址空間,支持完全基于內(nèi)存管理單元的內(nèi)存保護(hù)機(jī)制。這時系統(tǒng)在安全穩(wěn)定性提高的同時,其對嵌入式實時性的支持就會降低。現(xiàn)有的多個操作系統(tǒng)間的內(nèi)存保護(hù)方法,大部分是使用一個獨(dú)立的軟件層來完成。這個獨(dú)立的軟件層,通常稱作虛擬機(jī),運(yùn)行在硬件層和操作系統(tǒng)層之間。雖然這種方式可以實現(xiàn)內(nèi)存保護(hù),但是增加了系統(tǒng)的復(fù)雜度。授權(quán)公告號為CN 1269047C的中國專利公布了一種具有內(nèi)存保護(hù)功能的內(nèi)存管理方法,在具有MMU功能的CPU上進(jìn)行內(nèi)存管理;在需要保護(hù)的內(nèi)存兩端添加保護(hù)頁;當(dāng)有操作訪問到所述保護(hù)頁所在的區(qū)域時,實時操作系統(tǒng)確認(rèn)所述操作為非法修改所述內(nèi)存的操作,并報告內(nèi)存訪問異常。所述保護(hù)頁的屬性為不可訪問。在內(nèi)存中增加保護(hù)頁會占用內(nèi)存空間,也使內(nèi)存的功能變得復(fù)雜,非法操作的報告會影響程序執(zhí)行的流暢性,不利于實際使用。
發(fā)明內(nèi)容
本發(fā)明針對現(xiàn)有技術(shù)中增加內(nèi)存保護(hù)的功能會影響程序的可靠性、系統(tǒng)的健壯性、嵌入式的實時性,會增加系統(tǒng)的復(fù)雜性,導(dǎo)致程序執(zhí)行不流暢和產(chǎn)生內(nèi)存中可用空間等問題,提供了一種多系統(tǒng)下對實時操作系統(tǒng)所占用內(nèi)存的保護(hù)方法,將實時操作系統(tǒng)和普通操作系統(tǒng)各自使用的虛擬地址空間進(jìn)行隔離,在不增加系統(tǒng)復(fù)雜性的前提下提供對實時操作系統(tǒng)占用內(nèi)存的保護(hù)。一種多系統(tǒng)下對實時操作系統(tǒng)所占用內(nèi)存的保護(hù)方法,包括如下步驟:第一步:在具有內(nèi)存管理單元的中央處理器上初始化進(jìn)行地址映射操作所必需的數(shù)據(jù);第二步:實時操作系統(tǒng)根據(jù)其占用的內(nèi)存大小將其代碼段和數(shù)據(jù)段確定在虛擬地址空間中的一個連續(xù)的虛擬地址區(qū)間上;第三步:普通操作系統(tǒng)將所述的虛擬地址區(qū)間按內(nèi)存管理單元提供的機(jī)制映射到同一個未使用的物理頁框上。作為本發(fā)明技術(shù)方案的進(jìn)一步改進(jìn):所述實時操作系統(tǒng)的內(nèi)存分配方式為靜態(tài)分配,在編譯階段就可以把實時操作系統(tǒng)使用的代碼段和數(shù)據(jù)段確定在虛擬地址空間中的一個連續(xù)的虛擬地址區(qū)間上。所述初始化的工作為根據(jù)中央處理器的硬件尋址方式,建立一套訪問已經(jīng)存在的物理地址的機(jī)制。比較通用的技術(shù)是采用分頁機(jī)制。采用多級頁表的分頁,可以優(yōu)化查詢效率,節(jié)約存儲頁表所需的內(nèi)存空間,如果系統(tǒng)的尋址需要η級,系統(tǒng)就需要建立η級頁表進(jìn)行尋址,第η-1級頁表提供第η級頁表的基地址,相應(yīng)的虛擬地址也要分為η段,其中η為正整數(shù),各個段對應(yīng)各級表的偏移,最后一項對應(yīng)頁框內(nèi)的物理地址偏移。中央處理器把第一級表的基址,存放在一個特定的地址或寄存器里。所述內(nèi)存管理單元提供的機(jī)制是地址映射機(jī)制,將虛擬地址映射到物理地址。所述普通操作系統(tǒng)將所述虛擬地址區(qū)間按內(nèi)存管理單元提供的機(jī)制映射到同一個未使用的物理頁框上的過程中,若所述虛擬地址區(qū)間包含多個虛擬頁,所述的映射是普通操作系統(tǒng)循環(huán)地把實時操作系統(tǒng)占用的每一個虛擬頁都映射到同一個選定的物理頁框上。本發(fā)明技術(shù)方案的有益效果為:內(nèi)存開銷小,只花費(fèi)一個物理頁框,供虛擬地址空間上的所有頁映射;操作簡單,只需在同時運(yùn)行的其他操作系統(tǒng)上把相應(yīng)的虛擬地址空間映射到同一個物理頁框上;不降低系統(tǒng)運(yùn)行效率,沒有對操作系統(tǒng)進(jìn)行大的改動,沒有添加額外的模塊,運(yùn)行效率基本不受影響。本發(fā)明通過普通操作系統(tǒng)將實時操作系統(tǒng)占用的虛擬地址區(qū)間映射到物理頁框上,實現(xiàn)了內(nèi)存隔離,并且沒有增加系統(tǒng)的時間開銷,只有一頁物理頁框的空間開銷。
圖1為本發(fā)明方法的流程圖。圖2為本發(fā)明方法中多級頁表的索引過程以及虛擬地址區(qū)間映射到物理頁框的過程圖。圖3為本發(fā)明方法中實時操作系統(tǒng)占用系統(tǒng)虛擬地址空間示意圖。圖4為本發(fā)明方法中所述虛擬地址區(qū)間包含多個虛擬頁時將虛擬地址區(qū)間映射到物理頁框的過程圖。
具體實施例方式本實施方式以在ARM雙核處理器上同時運(yùn)行Android和Smart OSEK OS為例,對本發(fā)明的技術(shù)方案做進(jìn)一步闡述。本實施方式的運(yùn)行整體環(huán)境如下:Android和Smart OSEK OS兩個操作系統(tǒng)分別運(yùn)行在基于ARM雙核處理器的硬件平臺的兩個核上,兩個操作系統(tǒng)共同使用硬件平臺的物理內(nèi)存。其中SmartOSEK OS是由浙江大學(xué)嵌入式工程中心根據(jù)國家汽車電子軟件發(fā)展的需求而自主研發(fā)的符合0SEK/VDX標(biāo)準(zhǔn)的嵌入式實時操作系統(tǒng)。0SEK/VDX是國際汽車工業(yè)為提高汽車電子軟件的重用性,降低軟件開發(fā)成本而提出的汽車開放結(jié)構(gòu)的工業(yè)標(biāo)準(zhǔn)。SmartOSEK OS分配內(nèi)存的方式是靜態(tài)分配,在編譯階段就可以把Smart OSEK OS使用的代碼段和數(shù)據(jù)段連續(xù)的設(shè)定在一個虛擬地址空間內(nèi)。對32位的中央處理器來說,一個系統(tǒng)的虛擬地址空間的大小是4G。如圖1所示,本實施方式的具體操作步驟如下:第一步:在具有內(nèi)存管理單元的中央處理器上初始化進(jìn)行地址映射操作所必需的數(shù)據(jù);第二步:實時操作系統(tǒng)根據(jù)其占用的內(nèi)存大小將其代碼段和數(shù)據(jù)段確定在虛擬地址空間中的一個連續(xù)的虛擬地址區(qū)間上;第三步:普通操作系統(tǒng)將所述的虛擬地址區(qū)間按內(nèi)存管理單元提供的機(jī)制映射到同一個未使用的物理頁框上。其中,對于第一步,在具有內(nèi)存管理單元的中央處理器上初始化進(jìn)行地址映射操作所必需的數(shù)據(jù),本實施方式采用如下方式:本實施方式中系統(tǒng)的初始化分為兩個部分,第一個核(Android使用的核)的初始化和第二個核(Smart OSEK OS使用的核)的初始化。系統(tǒng)的初始化開始于普通操作系統(tǒng)Android內(nèi)核的初始化,在兩個核初始化完成之后,初始化Android的上層部分,然后整個系統(tǒng)正常運(yùn)行。第一個核初始化中根據(jù)分頁機(jī)制建立了兩個頁表。一個供普通操作系統(tǒng)Android使用,另一個供實時操作系統(tǒng)Smart OSEK OS使用。如圖2所示,本實施方式中使用的是3級頁表。每個虛擬地址分為4個段:總目錄偏移、中間目錄偏移、頁目錄偏移和頁內(nèi)偏移。前面的3個段分別對應(yīng)3個表,總目錄表、中間目錄表和頁目錄表。CR3表示中央處理器特定的寄存器,用于存放第I級表的基址,在本實施方式CR3表示頁目錄基址寄存器,用于存放總目錄的基址。根據(jù)虛擬地址找到物理地址的過程是:首先把從CR3中讀出的總目錄基址和虛擬地址中的總目錄偏移相加,得到中間目錄基址;然后把中間目錄基址與虛擬地址中的中間目錄偏移量相加,得到頁目錄基址;然后把頁目錄基址和虛擬地址中的頁目錄偏移相加,得到頁的基址;最后把頁的基址和虛擬地址中的頁內(nèi)偏移相加,得到了虛擬地址對應(yīng)的物理地址。對于第二步,實時操作系統(tǒng)根據(jù)其占用的內(nèi)存大小將其代碼段和數(shù)據(jù)段確定在虛擬地址空間中的一個連續(xù)的虛擬地址區(qū)間上,如圖3所示,本實施方式中實時操作系統(tǒng)Smart OSEK OS占用基于ARM雙核處理器的硬件平臺中的基于ARM雙核處理器是一個32位的中央處理器,因此其虛擬地址空間的大小是4G。本實施方式的實時操作系統(tǒng)Smart OSEKOS采用靜態(tài)的內(nèi)存分配方式,在編譯階段就可把其占用的虛擬地址空間的代碼段和數(shù)據(jù)段確定在4G虛擬地址空間中的一個連續(xù)的虛擬地址區(qū)間上。對于第三步,普通操作系統(tǒng)將所述的虛擬地址區(qū)間按內(nèi)存管理單元提供的機(jī)制映射到同一個未使用的物理頁框上,普通操作系統(tǒng)Android將實時操作系統(tǒng)Smart OSEK OS占用的虛擬地址空間映射到同一個選中的物理頁框中的過程如圖4所示,本實施方式中實時操作系統(tǒng)Smart OSEK OS占用的虛擬地址空間含多個虛擬頁時,普通操作系統(tǒng)Android循環(huán)地把實時操作系統(tǒng)Smart OSEK OS占用的每一個虛擬頁都映射到選定的同一個物理頁框上。具體的映射工作由內(nèi)存管理單元通過修改Android使用的頁表中跟Smart OSEK OS使用的虛擬地址空間有關(guān)的頁表項來完成。在本實施例中,對于Android和Smart OSEK OS兩個操作系統(tǒng)同時正常運(yùn)行在基于ARM雙核處理器的硬件平臺時,實時操作系統(tǒng)Smart OSEK OS運(yùn)行在第二步確定的虛擬地址空間里,實時操作系統(tǒng)Smart OSEK OS不會訪問這個虛擬地址空間以外的地址空間,這樣實時操作系統(tǒng)Smart OSEK OS就不會對普通操作系統(tǒng)Android所使用的虛擬地址空間進(jìn)行讀寫操作;對于普通操作系統(tǒng)Android,不會再分配實時操作系統(tǒng)Smart OSEK OS使用的虛擬地址空間,如果普通操作系統(tǒng)Android越界訪問到實時操作系統(tǒng)Smart OSEK OS占用的虛擬地址空間,其對實時操作系統(tǒng)Smart OSEK OS所使用的虛擬地址空間進(jìn)行的讀寫操作實際上是對映射的那個的物理頁框進(jìn)行操作,獲得的始終是無效數(shù)據(jù),不會對實時操作系統(tǒng)Smart OSEK OS所實際使用的物理內(nèi)存有任何影響。
權(quán)利要求
1.一種多系統(tǒng)下對實時操作系統(tǒng)所占用內(nèi)存的保護(hù)方法,其特征在于,包括如下步驟:第一步:在具有內(nèi)存管理單元的中央處理器上初始化進(jìn)行地址映射操作所必需的數(shù)據(jù); 第二步:實時操作系統(tǒng)根據(jù)其占用的內(nèi)存大小將其代碼段和數(shù)據(jù)段確定在虛擬地址空間中的一個連續(xù)的虛擬地址區(qū)間上; 第三步:普通操作系統(tǒng)將所述的虛擬地址區(qū)間按內(nèi)存管理單元提供的機(jī)制映射到同一個未使用的物理頁框上。
2.根據(jù)權(quán)利要求1所述的多系統(tǒng)下對實時操作系統(tǒng)所占用內(nèi)存的保護(hù)方法,其特征在于,所述的實時操作系統(tǒng)的內(nèi)存分配方式為靜態(tài)分配。
3.根據(jù)權(quán)利要求1所述的多系統(tǒng)下對實時操作系統(tǒng)所占用內(nèi)存的保護(hù)方法,其特征在于,所述的初始化的工作為根據(jù)中央處理器的硬件尋址機(jī)制,建立一套機(jī)制訪問物理地址。
4.根據(jù)權(quán)利要求1所述的多系統(tǒng)下對實時操作系統(tǒng)所占用內(nèi)存的保護(hù)方法,其特征在于,第三步中,所述的內(nèi)存管理單元提供的機(jī)制是地址映射機(jī)制。
5.根據(jù)權(quán)利要求3所述的多系統(tǒng)下對實時操作系統(tǒng)所占用內(nèi)存的保護(hù)方法,其特征在于,所述的訪問物理地址的機(jī)制是分頁機(jī)制。
6.根據(jù)權(quán)利要求1所述的多系統(tǒng)下對實時操作系統(tǒng)所占用內(nèi)存的保護(hù)方法,其特征在于,第三步中,所述的普通操作系統(tǒng)將所述的虛擬地址區(qū)間按內(nèi)存管理單元提供的機(jī)制映射到同一個未使用的物理頁框上的過程中,若所述的虛擬地址區(qū)間包含多個虛擬頁,所述的映射是普通操作系統(tǒng)循環(huán)地把實時操作系統(tǒng)占用的每一個虛擬頁都映射到同一個選定的物理頁框上。
全文摘要
本發(fā)明公開了一種多系統(tǒng)下對實時操作系統(tǒng)所占用內(nèi)存的保護(hù)方法,過程如下在具有內(nèi)存管理單元的中央處理器上初始化進(jìn)行地址映射操作所必需的數(shù)據(jù);實時操作系統(tǒng)根據(jù)其占用的內(nèi)存大小將其代碼段和數(shù)據(jù)段確定在虛擬地址空間中的一個連續(xù)的虛擬地址區(qū)間上;普通操作系統(tǒng)將所述的虛擬地址區(qū)間按內(nèi)存管理單元提供的機(jī)制映射到同一個未使用的物理頁框上。本發(fā)明具有內(nèi)存開銷小,操作簡單,不降低系統(tǒng)運(yùn)行效率,不增加系統(tǒng)的時間開銷的優(yōu)點(diǎn),通過普通操作系統(tǒng)將實時操作系統(tǒng)占用的虛擬地址區(qū)間映射到物理頁框上,實現(xiàn)了內(nèi)存隔離,沒有對操作系統(tǒng)進(jìn)行大的改動,沒有添加額外的模塊,只有一頁物理頁框的空間開銷。
文檔編號G06F12/08GK103164348SQ20131006326
公開日2013年6月19日 申請日期2013年2月28日 優(yōu)先權(quán)日2013年2月28日
發(fā)明者楊國青, 李紅, 吳朝暉, 劉健全 申請人:浙江大學(xué)