專利名稱:操作系統(tǒng)的物理內(nèi)存存取的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種操作系統(tǒng)的物理內(nèi)存存取的方法,特別是涉及一種應(yīng)用于
Linux操作系統(tǒng)的非易失性內(nèi)存存取的方法。
背景技術(shù):
對(duì)于嵌入式系統(tǒng)(Embedded System)的操作系統(tǒng)(Operation System, OS),目前所使用的產(chǎn)品很多,諸如Palm0S、 Windows CE、 Linux等。其中由于Linux操作系統(tǒng)具有免費(fèi)授權(quán)的特性,因此目前大量地應(yīng)用于嵌入式系統(tǒng)中。
Li皿x執(zhí)行程序時(shí)可以分作兩個(gè)部份,第一個(gè)為核心區(qū)間(Kernel Space),另一個(gè)為使用者區(qū)間(User Space)。有關(guān)硬件相關(guān)的存取控制都是在核心區(qū)間執(zhí)行,而一般使用者寫的程序都是在使用者區(qū)間執(zhí)行。使用者區(qū)間和核心區(qū)間是兩個(gè)不同的區(qū)域,兩個(gè)并無法直接使用對(duì)方的資源,需要通過一些系統(tǒng)的呼叫才能進(jìn)行,系統(tǒng)呼叫會(huì)對(duì)呼叫者的權(quán)限和操作做檢査,以保護(hù)核心程序(Kernel)的運(yùn)行。當(dāng)要存取硬件時(shí),會(huì)通過系統(tǒng)呼叫(System Call)的方式從使用者模式(User Mode)跳到核心區(qū)間去執(zhí)行,如通過驅(qū)動(dòng)程序(driver)存取硬件信息。
而在嵌入式系統(tǒng)中靜態(tài)儲(chǔ)存數(shù)據(jù)的硬件,通常為閃存(Flash)、非易失性內(nèi)存(Non-Volatile Random Access Memory, NVRAM)或電子擦除式只讀存儲(chǔ)器(Electrically Erasable Programmable Read-Only Memory , EEPROM)。 ~~^般都將寫好的程序放入Flash,而相關(guān)的設(shè)定就放在NVRAM或EEPROM中。因在Linux的核心區(qū)間,可以方便的存取NVRAM,但在進(jìn)入使用者區(qū)間時(shí)就無法直接存取NVRAM。如圖1所示,在使用者區(qū)間200要存取有關(guān)核心區(qū)間100中的硬件信息,需要通過驅(qū)動(dòng)程序(driver)來達(dá)成。因此當(dāng)OS加載完成后己在使用者區(qū)間的情況下,若必須設(shè)定NVRAM的值,要將值寫入到NVRAM需要通過驅(qū)動(dòng)程序(driver)來完成。這樣一來所花的時(shí)間要比較長(zhǎng),另外也需要較復(fù)雜的程序。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種操作系統(tǒng)的物理內(nèi)存存取的方法,主要應(yīng)用
Liruu操作系統(tǒng)在執(zhí)行程序時(shí),所分別使用的核心區(qū)間(Kernel Space)及使用者區(qū)間(User Space)的兩個(gè)內(nèi)存區(qū)塊,通過兩者之間內(nèi)存地址的映像,使得在對(duì)使用者區(qū)間操作存取時(shí),即對(duì)應(yīng)于核心區(qū)間進(jìn)行存取,而達(dá)到快速存取物理內(nèi)存的目的。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種不需通過驅(qū)動(dòng)程序(driver)的方式,即能快速存取操作系統(tǒng)的非易失性物理內(nèi)存(NVRAM)的方法。如圖2所示,為本發(fā)明的操作系統(tǒng)的存取核心區(qū)間(Kernel Space)的示意圖。應(yīng)用本發(fā)明的技術(shù),使得在操作系統(tǒng)(0S)進(jìn)入使用者區(qū)間200的情況下,若是需要存取核心區(qū)間100中的數(shù)據(jù),不必通過驅(qū)動(dòng)程序即能夠存取到NVRAM的數(shù)據(jù),節(jié)省系統(tǒng)的資源,加快存取的速度。
因?yàn)榍度胧较到y(tǒng)硬件架構(gòu)較為單純,所以在一些硬件配置部份可以由開發(fā)者自行決定,故NVRAM裝置可以對(duì)應(yīng)到某一塊內(nèi)存中。因此將NVRAM所在的地址設(shè)定在OxXXXXXXXX的實(shí)體地址,而Linux就可以利用此地址存取。然后再設(shè)定此地址再對(duì)應(yīng)到核心區(qū)間內(nèi)存地址(如OxYYYYYYYY)。所以當(dāng)存取到OxYYYYYYYY就如同存取到該NVRAM—樣,因?yàn)槭窃诤诵膮^(qū)間中,所以到了使用者區(qū)間就沒有辦法再對(duì)OxYYYYYYYY做存取,可使NVRAM受到保護(hù)。因使用者區(qū)間和核心區(qū)間是兩塊不同的區(qū)域。
本發(fā)明所提出的操作系統(tǒng)的物理內(nèi)存存取的方法,即利用特殊的內(nèi)存映像函式(mmap),而將核心區(qū)間100的地址對(duì)應(yīng)到使用者區(qū)間200。當(dāng)對(duì)使用者區(qū)間200的這塊內(nèi)存進(jìn)行存取時(shí),事實(shí)上就是對(duì)核心區(qū)間100的那一塊內(nèi)存進(jìn)行存取。因此,即可通過這樣的方式存取嵌入式系統(tǒng)的非易失性內(nèi)存(NVRAM)。
下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述,但不作為對(duì)本發(fā)明的限定。
圖1為公知技術(shù)通過驅(qū)動(dòng)程序(driver)存取核心區(qū)間(Kernel Space)中硬件信息的示意圖;圖2為本發(fā)明的操作系統(tǒng)的存取核心區(qū)間(Kernel Space)的示意圖;圖3為本發(fā)明的操作系統(tǒng)存取物理內(nèi)存的方法的步驟流程圖;圖4為本發(fā)明的物理內(nèi)存的實(shí)體地址及核心區(qū)間與使用者區(qū)間中的線性地址的映像示意圖。其中,附圖標(biāo)記100:核心區(qū)間(Kernel Space)200:使用者區(qū)間(User Space)300 380:方法步驟
實(shí)施方式
本發(fā)明為一種操作系統(tǒng)的物理內(nèi)存存取的方法,通過內(nèi)存地址的映像,使得在對(duì)使用者區(qū)間操作存取時(shí),即對(duì)應(yīng)于核心區(qū)間進(jìn)行存取,而達(dá)到快速存取物理內(nèi)存的目的。以下配合圖示并應(yīng)用本發(fā)明方法技術(shù)的較佳實(shí)施例,詳細(xì)說明本發(fā)明方法的步驟流程。
配合參考圖3,為本發(fā)明的操作系統(tǒng)的存取物理內(nèi)存的方法的步驟流程圖。如圖所示,首先,借助操作系統(tǒng)的一核心程序(Kernel)對(duì)映一核心區(qū)間(Kernel Space)的一線性地址(Linear Address)到 一物理內(nèi)存(PhysicalAddress)的一實(shí)體地址(步驟300),其中該實(shí)體地址指該物理內(nèi)存的實(shí)際地址,而該線性地址則必須通過該核心程序的轉(zhuǎn)換而對(duì)映到該實(shí)體地址。接著,加載一開機(jī)程序(歩驟310),該開機(jī)程序(Boot—Code)為可支持多重開機(jī)功能的開機(jī)管理程序(Bootloader),用以讀取操作系統(tǒng)的核心程序(Kernel)并控制核心程序(Kernel)的加載。在加載開機(jī)程序時(shí),同時(shí)判斷是否為第一次開機(jī)(步驟320)。在步驟320中,若該為第一次開機(jī),則通過該開機(jī)程序加載一核心程序(Kernel)(步驟340),以進(jìn)入核心模式(Kernel Mode)中,以供操作系統(tǒng)
抓取相關(guān)硬件配置。當(dāng)核心程序設(shè)定完硬件配置之后,接下來就進(jìn)入使用者模式(User Mode)(步驟350),此即于使用者區(qū)間(User Space)中執(zhí)行的處理程序,以設(shè)定操作系統(tǒng)的其它相關(guān)環(huán)境參數(shù)。然后,在使用者模式中,通過執(zhí)行的一內(nèi)存映像函式(mmap)將該使用者區(qū)間中的一線性地址映像至該核心區(qū)間的該線性地址(步驟360)。如此,使用者模式中的應(yīng)用程序才能借助線性地址轉(zhuǎn)換成相對(duì)的該實(shí)體地址來存取該物理內(nèi)存(步驟370)。最后,即完成開機(jī)設(shè)定(步驟380),并結(jié)束本流程。此外在步驟320中若該操作系統(tǒng)的不是第一次開機(jī),則開機(jī)程序即依照先前的系統(tǒng)環(huán)境設(shè)定,直接完成開機(jī)(步驟330),并結(jié)束本流程。
接著,配合參考圖4,為本發(fā)明的物理內(nèi)存的實(shí)體地址及核心區(qū)間與使用者區(qū)間中的線性地址的映像示意圖。如圖所示,上述歩驟360的該內(nèi)存映像(mmap)將該核心區(qū)間100中的該線性地址映像(mapping)至該使用者區(qū)間200中的該線性地址,用來將某個(gè)文件內(nèi)容映像(m即ping)到內(nèi)存中,故對(duì)該內(nèi)存區(qū)域的存取,即是直接對(duì)該文件內(nèi)容的讀寫。因此,當(dāng)對(duì)使用者區(qū)間200的內(nèi)存進(jìn)行存取時(shí),事實(shí)上就是由核心區(qū)間IOO的線性地址,所對(duì)應(yīng)到的物理內(nèi)存中那一塊內(nèi)存進(jìn)行存取。如此,就不必再通過認(rèn)何驅(qū)動(dòng)程序(driver),即可達(dá)
到快速存取物理內(nèi)存的目的。
當(dāng)然,本發(fā)明還可有其他多種實(shí)施例,在不背離本發(fā)明精神及其實(shí)質(zhì)的情
況下,熟悉本領(lǐng)域的技術(shù)人員可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這
些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1、一種操作系統(tǒng)的物理內(nèi)存存取的方法,其特征在于,至少包含步驟借助一操作系統(tǒng)的一核心程序?qū)τ骋缓诵膮^(qū)間的一線性地址到一物理內(nèi)存的一實(shí)體地址;通過該操作系統(tǒng)執(zhí)行的一內(nèi)存映像函式將該使用者區(qū)間中的一線性地址映像至該核心區(qū)間的該線性地址;以及借助該使用者區(qū)間中的該線性地址轉(zhuǎn)換成相對(duì)的該實(shí)體地址來存取該物理內(nèi)存。
2、 根據(jù)權(quán)利要求1所述的操作系統(tǒng)的物理內(nèi)存存取的方法,其特征在于,該操作系統(tǒng)為一 Linux操作系統(tǒng)。
3、 根據(jù)權(quán)利要求1所述的操作系統(tǒng)的物理內(nèi)存存取的方法,其特征在于,該操作系統(tǒng)執(zhí)行程序時(shí)分別使用該核心區(qū)間及該使用者區(qū)間。
4、 根據(jù)權(quán)利要求l所述的操作系統(tǒng)的物理內(nèi)存存取的方法,其特征在于,該物理內(nèi)存提供該核心程序儲(chǔ)存核心程序代碼及核心數(shù)據(jù)的內(nèi)存區(qū)間。
5、 根據(jù)權(quán)利要求4所述的操作系統(tǒng)的物理內(nèi)存存取的方法,其特征在于,該物理內(nèi)存為一非易失性內(nèi)存。
6、 根據(jù)權(quán)利要求1所述的操作系統(tǒng)的物理內(nèi)存存取的方法,其特征在于,該實(shí)體地址指該物理內(nèi)存的實(shí)際地址。
7、 根據(jù)權(quán)利要求l所述的操作系統(tǒng)的物理內(nèi)存存取的方法,其特征在于,該線性地址通過該核心程序的轉(zhuǎn)換,而對(duì)映到該實(shí)體地址。
8、 根據(jù)權(quán)利要求1所述的操作系統(tǒng)的物理內(nèi)存存取的方法,其特征在于,該核心程序于該核心區(qū)間中執(zhí)行設(shè)定相關(guān)的硬件配置。
9、 根據(jù)權(quán)利要求l所述的操作系統(tǒng)的物理內(nèi)存存取的方法,其特征在于,該內(nèi)存映像函式在該使用者區(qū)間中被執(zhí)行。
10、 根據(jù)權(quán)利要求1所述的操作系統(tǒng)的物理內(nèi)存存取的方法,其特征在于,該內(nèi)存映像函式,提供將該核心區(qū)間的該線性地址映像至該使用者區(qū)間的該線性地址。
全文摘要
本發(fā)明公開了一種操作系統(tǒng)的物理內(nèi)存(Physical Memory)存取的方法,主要應(yīng)用操作系統(tǒng)在執(zhí)行程序時(shí),通過內(nèi)存實(shí)體地址(Physical Address)與線性地址(Linear Address)的映像,使得在對(duì)使用者區(qū)間(User Space)作存取時(shí)而對(duì)應(yīng)到核心區(qū)間(Kernel Space)進(jìn)行存取物理內(nèi)存的目的。
文檔編號(hào)G06F12/02GK101464835SQ200710301849
公開日2009年6月24日 申請(qǐng)日期2007年12月18日 優(yōu)先權(quán)日2007年12月18日
發(fā)明者鄭仰民 申請(qǐng)人:英業(yè)達(dá)股份有限公司