王曉航 許亞星 李興智
虛擬內(nèi)存管理平臺(tái)在操作系統(tǒng)功能實(shí)現(xiàn)過(guò)程中具有極為重要的價(jià)值,由于嵌入式設(shè)備與應(yīng)用具有的作用特性,在實(shí)際應(yīng)用過(guò)程中必須具備一種與其性能需求相對(duì)應(yīng)的虛擬內(nèi)存管理機(jī)制,源的有限性及嵌入式應(yīng)用實(shí)施性和可移植性的特點(diǎn),必須具有一種能滿足嵌入式設(shè)備與應(yīng)用的虛擬內(nèi)存管理機(jī)制,因此要從設(shè)計(jì)與思想兩個(gè)角度開(kāi)展,以便于可實(shí)現(xiàn)。
嵌入式軟件環(huán)境下需要加強(qiáng)對(duì)操作系統(tǒng)的虛擬內(nèi)存管理,目前被廣泛應(yīng)用的操作系統(tǒng)內(nèi)存管理極為原始,大多數(shù)嵌入式軟件系統(tǒng)都沒(méi)有集成對(duì)應(yīng)的存儲(chǔ)設(shè)備,伴隨著嵌入式內(nèi)存管理技術(shù)逐步走向成熟,嵌入式軟件技術(shù)被廣泛應(yīng)用多種技術(shù)領(lǐng)域,在應(yīng)用過(guò)程中逐步加入內(nèi)存管理技術(shù),不僅整體運(yùn)行環(huán)境能得到優(yōu)化,操作系統(tǒng)的性能也逐步得到提升。在嵌入式操作系統(tǒng)中加入虛擬內(nèi)存管理技術(shù),能很好提升操作系統(tǒng)的管理效能和運(yùn)行可靠性。根據(jù)嵌入式系統(tǒng)的性能特點(diǎn),剖析操作系統(tǒng)的虛擬內(nèi)存機(jī)制,找到一種能滿足嵌入式環(huán)境下開(kāi)展虛擬內(nèi)存管理的實(shí)施方法。虛擬內(nèi)存管理平臺(tái)與計(jì)算機(jī)操作系統(tǒng)相互脫離,并且是獨(dú)立的管理平臺(tái),保障功能的可實(shí)現(xiàn)。
虛擬內(nèi)存機(jī)制在嵌入式環(huán)境中對(duì)操作系統(tǒng)的運(yùn)行有著極為重要的支持作用,能夠在運(yùn)行過(guò)程中保持較大的運(yùn)行空間對(duì)系統(tǒng)的運(yùn)行保持支持,可以有效對(duì)操作系統(tǒng)的運(yùn)行進(jìn)程以有效的支持,保護(hù)操作系統(tǒng)的運(yùn)行進(jìn)程,保持內(nèi)存映射和共享虛擬內(nèi)存。嵌入式軟件體系在運(yùn)行過(guò)程中缺乏必要的存儲(chǔ)設(shè)備,并且操作系統(tǒng)的內(nèi)涵與體積都較小,能夠使內(nèi)存空間長(zhǎng)期保持,是否連帶著硬件存儲(chǔ)設(shè)備就顯得不再重要,系統(tǒng)性能和運(yùn)行效率不會(huì)有太大的影響。同時(shí),嵌入式軟件系統(tǒng)在運(yùn)行過(guò)程中引入虛擬內(nèi)存管理的請(qǐng)求很大程度上會(huì)造成操作系統(tǒng)延時(shí),會(huì)影響操作系統(tǒng)的運(yùn)行效率,根據(jù)嵌入式系統(tǒng)的特點(diǎn):造成問(wèn)題的主要原因:頁(yè)面因調(diào)度造成系統(tǒng)反應(yīng)延時(shí),系統(tǒng)響應(yīng)的確定性降低;操作系統(tǒng)的運(yùn)行進(jìn)程被頻繁調(diào)用,影響了其他進(jìn)程的調(diào)用,其他進(jìn)程的反應(yīng)時(shí)間被延長(zhǎng)。綜合上述造成問(wèn)題的兩種原因,一般來(lái)說(shuō)嵌入式系統(tǒng)的虛擬內(nèi)存管理都不提供對(duì)請(qǐng)求分頁(yè)機(jī)制的支持。因此在運(yùn)用嵌入式軟件系統(tǒng)過(guò)程要具備三點(diǎn)功能:一是內(nèi)存能被有效映射;二是對(duì)嵌入式軟件系統(tǒng)產(chǎn)生的進(jìn)程有效保護(hù);三是對(duì)虛擬內(nèi)存資源實(shí)現(xiàn)高效共享。虛擬內(nèi)存管理平臺(tái)的實(shí)現(xiàn)還依賴于存儲(chǔ)設(shè)備的支持,不同種類處理器的虛擬內(nèi)存的實(shí)現(xiàn)方式有著不同,為使虛擬內(nèi)存管理平臺(tái)的功能得到全面實(shí)現(xiàn),要在設(shè)計(jì)過(guò)程中屏蔽不同處理器的差異,要在上層組織層面實(shí)現(xiàn)上設(shè)置統(tǒng)一的標(biāo)準(zhǔn)化接口,操作規(guī)范也要實(shí)現(xiàn)標(biāo)準(zhǔn)化,實(shí)現(xiàn)有效的交互共享。
(一)內(nèi)存映射
在嵌入式環(huán)境中,操作系統(tǒng)的內(nèi)存映射是虛擬空間到物理空間形成完善的過(guò)程,內(nèi)存映射的存在是虛擬內(nèi)存管理平臺(tái)構(gòu)建的基礎(chǔ),虛擬內(nèi)存機(jī)制諸多功能的實(shí)現(xiàn)都需要內(nèi)存映射的支持,內(nèi)存映射的實(shí)現(xiàn)也和操作系統(tǒng)的內(nèi)置存儲(chǔ)設(shè)備有關(guān)。從功能實(shí)現(xiàn)角度來(lái)看,內(nèi)存映射實(shí)現(xiàn)的過(guò)程就是虛擬地址到物理地址轉(zhuǎn)換的過(guò)程,虛擬地址與物理地址也要一一對(duì)應(yīng),內(nèi)存映射的最終獲得也要與虛擬地址相對(duì)應(yīng)。由于計(jì)算機(jī)操作系統(tǒng)的存儲(chǔ)地址以頁(yè)變換為主,內(nèi)存映射產(chǎn)生的最小的變換單位也是頁(yè),虛擬空間與物理空間開(kāi)始的地址也以頁(yè)的方式完成,形成的映射關(guān)系也是映射關(guān)系。
(二)頁(yè)訪問(wèn)屬性
在嵌入式軟件環(huán)境中,操作系統(tǒng)的存儲(chǔ)設(shè)備提供了多種類的訪問(wèn)屬性組合。每一種頁(yè)的訪問(wèn)屬性組合要實(shí)現(xiàn)的功能與訪問(wèn)目標(biāo)都有著差異。為了保持系統(tǒng)頁(yè)屬性組合的合理性,要對(duì)每種頁(yè)的屬性組合合理規(guī)劃,是否可寫(xiě)、是否可讀、是否存在、是否達(dá)到功能目標(biāo)等。如果頁(yè)的屬性組合可Cache,在可Cache的情況下進(jìn)行操作要區(qū)分頁(yè)的屬性組合是否具有全局屬性,能否覆蓋到全局代碼和程序,是否是透寫(xiě)、是否是回寫(xiě)等。在實(shí)踐過(guò)程中,根據(jù)頁(yè)的屬性訪問(wèn)組合也可以有效完成一些系統(tǒng)設(shè)置,可以快速啟動(dòng)內(nèi)存保護(hù)功能,實(shí)現(xiàn)對(duì)閃存的保護(hù)等。同時(shí),頁(yè)的屬性組合也能有效提升操作系統(tǒng)的安全性、可靠性,與內(nèi)存映射具有相同的作用,能夠根據(jù)虛擬地址快速查找物理地址,根據(jù)地址轉(zhuǎn)換表的類目設(shè)置確定詳細(xì)的無(wú)理地址,幫助系統(tǒng)進(jìn)程快速寫(xiě)入。
(三)進(jìn)程保護(hù)和共享虛擬內(nèi)存
虛擬內(nèi)存上下文與任務(wù)上下文在結(jié)構(gòu)和性能上有著本質(zhì)的差異,二者在實(shí)現(xiàn)和功能目標(biāo)上都有著不同,在實(shí)際執(zhí)行過(guò)程中,為了對(duì)操作系統(tǒng)各程序的運(yùn)行進(jìn)程實(shí)現(xiàn)高效管理,需要對(duì)各個(gè)程序的進(jìn)程實(shí)現(xiàn)統(tǒng)籌,因?yàn)槊總€(gè)程序會(huì)存儲(chǔ)在大小適中的虛擬空間中,對(duì)于虛擬內(nèi)存的有效管理是虛擬內(nèi)存上下文要做好的重要任務(wù)。讓虛擬內(nèi)存管理更加便捷,對(duì)虛擬內(nèi)存空間要合理劃分,要?jiǎng)澐譃槿痔摂M內(nèi)存存儲(chǔ)區(qū)域和私有內(nèi)存區(qū)域,對(duì)于一些代碼、訪問(wèn)對(duì)象和信號(hào)量要進(jìn)行全局的虛擬內(nèi)存管理,系統(tǒng)的運(yùn)行程序也要置放在全局虛擬內(nèi)存管理體系中,既要合理區(qū)分虛擬內(nèi)存管理對(duì)象,也要將不同對(duì)象存儲(chǔ)在合適的虛擬內(nèi)存區(qū)域,保障虛擬內(nèi)存資源的有效共享。
(一)層次結(jié)構(gòu)
虛擬內(nèi)存管理平臺(tái)應(yīng)具有一定的層次結(jié)構(gòu),要考慮到操作系統(tǒng)的特點(diǎn),設(shè)置不同的功能層,要考慮到運(yùn)行環(huán)境的特點(diǎn),設(shè)置處理器無(wú)關(guān)層和處理器有關(guān)層,通過(guò)兩個(gè)功能層的實(shí)現(xiàn)虛擬內(nèi)存管理,處理器無(wú)關(guān)層需要單獨(dú)設(shè)置,與處理器無(wú)關(guān)層互相區(qū)分開(kāi)。處理器有關(guān)層和處理器無(wú)關(guān)層之間要設(shè)置接口函數(shù)列表、屬性掩碼轉(zhuǎn)換表用以數(shù)據(jù)交互。處理器有關(guān)層要有ARM、PPC、X86。處理器有關(guān)層和處理器無(wú)關(guān)層之間的接口函數(shù)列表、屬性掩碼轉(zhuǎn)換表用以兩個(gè)結(jié)構(gòu)層之間的通信,接口函數(shù)列表完成MMU基本功能的函數(shù)集合,由相關(guān)層填寫(xiě)并傳遞給無(wú)關(guān)層。屬性轉(zhuǎn)換表將無(wú)關(guān)層屬性轉(zhuǎn)換成相關(guān)層屬性完成轉(zhuǎn)換頁(yè)的屬性設(shè)置。相關(guān)層與無(wú)關(guān)層的掩碼值轉(zhuǎn)換由掩碼轉(zhuǎn)換表完成。
(二)屬性掩碼轉(zhuǎn)換表的功能實(shí)現(xiàn)
在虛擬內(nèi)存管理過(guò)程中,無(wú)關(guān)層與上層在對(duì)一些程序進(jìn)程進(jìn)行處理的時(shí)候,要有頁(yè)碼屬性和掩碼組合的支持,頁(yè)屬性只有經(jīng)過(guò)掩碼轉(zhuǎn)換表的處理才能轉(zhuǎn)換為可供處理器識(shí)讀和判別的頁(yè)屬性和掩碼。頁(yè)屬性掩碼轉(zhuǎn)換表需要在頁(yè)屬性的基礎(chǔ)上進(jìn)行構(gòu)建,也需要掩碼映射表的配合,處理器相關(guān)層需要定義頁(yè)屬性和掩碼轉(zhuǎn)換表,頁(yè)屬性結(jié)構(gòu)和掩碼轉(zhuǎn)換表的表項(xiàng)結(jié)構(gòu)要符合處理器相關(guān)層的結(jié)構(gòu)。
(三)虛擬內(nèi)存上下文的實(shí)現(xiàn)
通常情況下,嵌入式處理器會(huì)通過(guò)多級(jí)地址完成,輔助處理器轉(zhuǎn)換就需要地址轉(zhuǎn)換表配合,先通過(guò)系統(tǒng)寄存器獲得第一級(jí)地址,根據(jù)第一級(jí)地址和虛擬地址快速查詢其他幾級(jí)地址,進(jìn)而快速獲得下幾級(jí)地址的物理地址。通過(guò)多級(jí)的地址轉(zhuǎn)換,虛擬空間轉(zhuǎn)換表對(duì)應(yīng)所有虛擬地址的虛擬頁(yè),地址轉(zhuǎn)換表中涵蓋的所有類目就包括所有虛擬頁(yè)總和。因此,在程序運(yùn)行進(jìn)程的交互切換中,程序進(jìn)程具有的虛擬內(nèi)存上下文在換出與換入過(guò)程中要保持一致性,要形成線性特點(diǎn),通過(guò)對(duì)活躍的程序進(jìn)程虛擬內(nèi)存上下文的調(diào)用設(shè)置標(biāo)準(zhǔn)的函數(shù)接口,使程序進(jìn)程在切換過(guò)程中,其虛擬內(nèi)存上下文與任務(wù)上下文保持一直。
本文探究了一種新型嵌入式軟件虛擬內(nèi)存管理平臺(tái),針對(duì)嵌入式環(huán)境及軟件體系的特點(diǎn)對(duì)虛擬內(nèi)存管理問(wèn)題進(jìn)行剖析,并提出了新的解決方案,通過(guò)虛擬內(nèi)存管理平臺(tái)的搭建使相關(guān)層屏蔽不同處理器的實(shí)現(xiàn)差異,借助頁(yè)屬性組合和多種標(biāo)準(zhǔn)化的函數(shù)接口實(shí)現(xiàn)高效地虛擬內(nèi)存管理,達(dá)到既定的虛擬內(nèi)存管理優(yōu)化目標(biāo)。
作者單位:中國(guó)航空工業(yè)集團(tuán)公司西安航空計(jì)算技術(shù)研究所