




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
VxWorks的內(nèi)存分配機(jī)制VxWorksVxWorks的內(nèi)存管理函數(shù)存在于2個(gè)庫中:memPartLib(緊湊的內(nèi)存分區(qū)管理器)和memLib完整功能的內(nèi)存分區(qū)管理器)。memPartLib提供的工具用于從內(nèi)存分區(qū)中分配內(nèi)存塊。該庫包含兩類程序,一類是通用工具memPart?(),包含創(chuàng)建和管理內(nèi)存分區(qū)并從這些分區(qū)中分配和管理內(nèi)存塊;另一類是標(biāo)準(zhǔn)的 malloc/free程序提供給內(nèi)存分區(qū)的接口。memLib是memPartLib的擴(kuò)展,提供內(nèi)存管理功能,包括錯(cuò)誤處理,按對(duì)齊分配和ANSI分配函數(shù)。在Vxworks中內(nèi)存分區(qū)只能創(chuàng)建,不能刪除。主要的操作函數(shù)有memPartCreate、memPartAddToPoc、memPartAlignedAlloe、memPartAlloe、memPartFreememAddToPoolmalloc、free、calloc、cfree等。分配時(shí)可以要求一定的對(duì)齊格式,不同的 CPU架構(gòu)有不同的對(duì)齊要求。為了優(yōu)化性能,malloc返回的指針是經(jīng)過對(duì)齊的,為此的開銷隨架構(gòu)不同而不同。例如,68k為4字節(jié)對(duì)齊,開銷8字節(jié);SPARC為8字節(jié)對(duì)齊,開銷12字節(jié);MIPS為16字節(jié)對(duì)齊,開銷12字節(jié);1960為16字節(jié)對(duì)齊,開銷16字節(jié)。?1各帥專卓的對(duì)齊和開雞對(duì)齊値/B曲塊開4gCOLDFUKE4g4$MIPSE616SIMNT38S1M5OUR1S88SPACESS內(nèi)核負(fù)責(zé)為程序分配內(nèi)存、動(dòng)態(tài)分配內(nèi)存和回收內(nèi)存。 VxWorks為用戶提供兩種內(nèi)存區(qū)域:內(nèi)存域region和內(nèi)存分區(qū)partition,region 是可變長(zhǎng)的內(nèi)存區(qū),可以從創(chuàng)建的region中在分配段segment,region的特點(diǎn)是容易產(chǎn)生碎片,但靈活、不浪費(fèi),partition是定長(zhǎng)的內(nèi)存區(qū),用戶可以從創(chuàng)建的partition中分配內(nèi)存塊,或在某個(gè)內(nèi)存分區(qū)中再創(chuàng)建一個(gè)內(nèi)存分區(qū)。partition的特點(diǎn)是無碎片、效率高,但浪費(fèi)。通常,VxWorks內(nèi)核和應(yīng)用程序?qū)?nèi)存的操作是基于內(nèi)存分區(qū)進(jìn)行的。內(nèi)存池是一塊連續(xù)的內(nèi)存區(qū)域,包含一個(gè)或多個(gè)內(nèi)存塊。內(nèi)存分區(qū)包含分區(qū)自身的描述信息(一個(gè)結(jié)構(gòu)體)和一個(gè)或多個(gè)內(nèi)存池,描述信息保存在系統(tǒng)內(nèi)存分區(qū)中,內(nèi)存池是該分區(qū)實(shí)際擁有的內(nèi)存空間。內(nèi)存分區(qū)剛創(chuàng)建完畢時(shí),只有一個(gè)內(nèi)存池,以后用戶程序可往該分區(qū)中添加內(nèi)存池。內(nèi)存池之間的地址不一定連續(xù),VxWorks在啟動(dòng)過程中會(huì)創(chuàng)建一個(gè)包含系統(tǒng)內(nèi)存池的系統(tǒng)內(nèi)存分區(qū)。系統(tǒng)內(nèi)存分區(qū)(其中ID為memSysPartld)是一個(gè)全局變量,關(guān)于它的定義在memLib.h中)在內(nèi)核初始化kernellnit() 時(shí)由usrRoot()(包含在usrConfig.c中)調(diào)用memlnit創(chuàng)建。其開始地址為RAM中緊接著VxWorks的BSS段之后,大小為所有空閑內(nèi)存。VxWorks運(yùn)行時(shí)的內(nèi)存布局如圖1所示,LOCAL_MEM_LOCAL_ADRS為嵌入式系統(tǒng)內(nèi)存的起點(diǎn),一般為0,宏RAM_LOW_AD是S/xWorks系統(tǒng)鏡像的起點(diǎn),而FREE_RAM_AD為系統(tǒng)鏡像的終點(diǎn)。InitialStack 這部分空間在加載VxWorks映像時(shí)由sysInit初始化,由usrlnit使用。InitialStack和RESERVE之間的內(nèi)存區(qū)域通常用于存放中斷向量表。WDE內(nèi)存池用于VxWorks調(diào)試代理任務(wù)運(yùn)行模塊的動(dòng)態(tài)加載。系統(tǒng)內(nèi)存池是VxWorks和應(yīng)用程序運(yùn)行時(shí)可操作、使用的內(nèi)存空間。應(yīng)用程序可以根據(jù)需要、調(diào)用函數(shù)memPartCreate從系統(tǒng)內(nèi)存池中創(chuàng)建新的內(nèi)存分區(qū)。多數(shù) BSP都定義sysPhysMemTop(為物理RAM
的結(jié)束地址,而sysMemTopQ為系統(tǒng)內(nèi)存池的結(jié)束地址,兩者之差則為可配置的常數(shù)USER_RESERVED_M這些宏都在板級(jí)支持包(BSP中定義。UX-RESJWED-MENMemorypoolftDH.POOLSJZEVxWorlHandInHititSLAckUX-RESJWED-MENMemorypoolftDH.POOLSJZEVxWorlHandInHititSLAckRKStRVEDCLocd_MEM_STZ町* FftEE_RAM_ADRS RAM_LOW^ADRS* LGC^L_MtM_LO(:AUAORS圖1VxWorks運(yùn)行時(shí)內(nèi)存布局嵌入式系統(tǒng)中為任務(wù)分配內(nèi)存空間有兩種方式,靜態(tài)分配和動(dòng)態(tài)分配。靜態(tài)分配為系統(tǒng)提供了最好的可靠性與實(shí)時(shí)性,如可以通過修改 user_reserved_MEM內(nèi)存給應(yīng)用程序的特殊請(qǐng)求用。對(duì)于那些對(duì)實(shí)時(shí)性和可靠性要求極高的需求,只能采用靜態(tài)分配方式[4]。但采用靜態(tài)分配必然會(huì)使系統(tǒng)失去靈活性,因此必須在設(shè)計(jì)階段考慮所有可能的情況,并對(duì)所有的需求做出相應(yīng)的空間分配,一旦出現(xiàn)沒有考慮到的情況,系統(tǒng)就無法處理。此外靜態(tài)分配方式也必然導(dǎo)致很大的浪費(fèi),因?yàn)楸仨毎凑兆顗那闆r進(jìn)行最大的配置,而在實(shí)際運(yùn)行中可能只用到其中的一小部分。VxWorks的內(nèi)存管理采用自由鏈管理內(nèi)存空閑塊,米用首先適配算法動(dòng)態(tài)分配內(nèi)存。內(nèi)存釋放時(shí),采用上下空閑區(qū)融合的方法,即把相鄰的空閑內(nèi)存塊合并,沒有清理碎片的功能。一般系統(tǒng)中只有1個(gè)內(nèi)存分區(qū),即系統(tǒng)分區(qū),所有任務(wù)所需要的內(nèi)存直接調(diào)用malloc從其中分配。分配采用First-Fit算法(空閑內(nèi)存塊按地址大小遞增排列,對(duì)于要求分配的分區(qū)容量size,從頭開始比較,直至找到滿足大小?size的塊為止,并從鏈表相應(yīng)塊中分配出相應(yīng)size大小的塊指針),通過free釋放的內(nèi)存將被聚合以形成更大的空閑塊。這就是VxWorks的動(dòng)態(tài)內(nèi)存分配機(jī)理。最先適應(yīng)法具有搜索速度快,利于內(nèi)存碎片合并的特點(diǎn)。另外,最先適應(yīng)法盡可能利用低地址空間,從而保證高地址空間有較大的空閑區(qū)來放置內(nèi)存要求較多的進(jìn)程或作業(yè)。但是,使用動(dòng)態(tài)內(nèi)存分配malloc/free時(shí)要注意到以下幾個(gè)方面的限制:(1)因?yàn)橄到y(tǒng)內(nèi)存分區(qū)是一種臨界資源,由信號(hào)量保護(hù),使用malloc會(huì)導(dǎo)致當(dāng)前調(diào)用掛起,所以它不能用于中斷服務(wù)程序;(2)因?yàn)檫M(jìn)行內(nèi)存分配需要執(zhí)行查找算法,其執(zhí)行時(shí)間與系統(tǒng)當(dāng)前的內(nèi)存使用情況相關(guān),是不確定的,所以對(duì)于有規(guī)定時(shí)限的操作它是不適宜的;(3)采用簡(jiǎn)單的最先匹配算法,容易導(dǎo)致系統(tǒng)中存在大量的內(nèi)存碎片,降低內(nèi)存使用效率和系統(tǒng)性能。一般在系統(tǒng)設(shè)計(jì)時(shí)采用靜態(tài)分配與動(dòng)態(tài)分配相結(jié)合的方法。也就是說,系統(tǒng)中的一部分任務(wù)有嚴(yán)格的時(shí)限要求,而另一部分只是要求完成得越快越好。按照RMS(RateMonotonicScheduling)理論,所有硬實(shí)時(shí)任務(wù)總的CPU寸間應(yīng)小于70%,這樣的系統(tǒng)必須采用搶先式任務(wù)調(diào)度;而在這樣的系統(tǒng)中,就可以采用動(dòng)態(tài)內(nèi)存分配來滿足那一部分可靠性和實(shí)時(shí)性要求不那么高的任務(wù)。在VxWorks中,內(nèi)存管理單元(MMU的功能主要是由一些庫函數(shù)來控制和實(shí)現(xiàn)的,這些庫函數(shù)根據(jù)CPU的體系不同而不同。虛擬地址和物理地址之間的映射關(guān)系通過PHY—MEM_DES定義于vmLib.h文件中)的結(jié)構(gòu)體來實(shí)現(xiàn):typedefstructphys_mem_desc{Void*virtualAddr;Void*physicalAddr;UINTlen;UINTinitialStateMask;/*maskparametertovmStateSet*/UINTinitialState ;/*stateparametertovmStateSet* /}PHY_MEM_DES;C其中,virtualAddr表示映射后的虛擬內(nèi)存空間的起始地址;physicalAddr表示被映射的物理內(nèi)存空間的起始地址;initialState表示內(nèi)存頁面的狀態(tài);len表示映射內(nèi)存的長(zhǎng)度。由于內(nèi)存映射是基于頁面的,所以virtualAddr、physicalAddr、len必須是頁面大小的偶數(shù)倍。下面是一個(gè) MMI配己置示例:(void*)Ox2000000,(void*)0x2000000,0x20000,/*initialstatemask* /MMU_ATTR_VALID_MSK|MMU_ATTR_PRO,T_MSK/*initialstate* /MMU_ATTR_VALID|MMU_ATTR_PRO_SUP_WRITE}上面表示這一段內(nèi)存起始于0x2000000可寫。在VxWorks中,虛擬內(nèi)存地址和物理地址是一一對(duì)應(yīng)的關(guān)系,所以如果不考慮對(duì)特定內(nèi)存區(qū)域設(shè)置寫保護(hù)或高速緩存機(jī)制,則完全可以不使用虛擬內(nèi)存。4VxWorks的內(nèi)存保護(hù)4.1內(nèi)存保護(hù)初始化內(nèi)存保護(hù)初始化主要包括3個(gè)步驟:初始化MMU建立虛擬內(nèi)存和實(shí)際內(nèi)存頁面對(duì)應(yīng)關(guān)系的轉(zhuǎn)化表,此時(shí) MM功能還是關(guān)閉的,此后應(yīng)用程序訪問的內(nèi)存均為虛擬內(nèi)存;初始化虛擬內(nèi)存模塊。該過程包括初始化頁狀態(tài)及頁狀態(tài)掩碼轉(zhuǎn)換表,設(shè)置虛擬內(nèi)存庫函數(shù);全局頁面映射的初始化。該步驟創(chuàng)建系統(tǒng)全局的頁面映射以及內(nèi)核代碼所需要的頁面映射。內(nèi)存保護(hù)初始化的流程如圖3所示。圖3內(nèi)再僅護(hù)材姑化流強(qiáng)4.2修改頁狀態(tài)每一個(gè)虛擬內(nèi)存頁都有一個(gè)或多個(gè)狀態(tài),分為有效/無效、可寫、可讀、緩存/不緩存等。頁狀態(tài)可以用函數(shù)vmStateSet()實(shí)現(xiàn)。在程序中,一個(gè)任務(wù)執(zhí)行的所有數(shù)據(jù)都放在一個(gè)全局區(qū)域里。為了防止其他任務(wù)破壞該區(qū)域的數(shù)據(jù),可以用鉤子函數(shù)在任務(wù)切換之間設(shè)置頁的狀態(tài),從而實(shí)現(xiàn)數(shù)據(jù)的保護(hù)。比如在進(jìn)入任務(wù)時(shí),把內(nèi)存頁面設(shè)置成MMU_ATTR_VA,[使該內(nèi)存頁有效,然后在離開任務(wù)時(shí),把它設(shè)置為MMU_ATTR_VALID_NOt而使別的任務(wù)不能訪問該頁面。4.3鎖定頁表?xiàng)l目CPU執(zhí)行機(jī)構(gòu)在收到應(yīng)用程序發(fā)來的虛擬地址后,首先到頁表緩沖 (TLB)中查找相應(yīng)的頁表?xiàng)l目,如果TLB中正好存放著所需要的頁表?xiàng)l目,則稱為TLB命中(TLBHit),接下來CPU再看物理內(nèi)存地址中的數(shù)據(jù)是不是已經(jīng)在緩存里了,若沒有則到內(nèi)存中取相應(yīng)地址所存放的數(shù)據(jù)。如果TLB中沒有所需的頁表,則成為TLB失敗(TLBMiss),接下來就必須訪問物理內(nèi)存中存放的頁表,同時(shí)更新TLB的頁表?xiàng)l目。由此可見,TLB命中率越高,則CPU訪問內(nèi)存的速度就越快,系統(tǒng)性能也就越高。因此,在 vxworks系統(tǒng)中,用函數(shù)vmPageLock()鎖定用戶頻繁使用的頁表?xiàng)l目,這樣TLB的命中率顯然會(huì)大大提高,但由于TLB的容量收到一定的限制,所有鎖定太多的頁表?xiàng)l目會(huì)導(dǎo)致剩下的頁表?xiàng)l目的動(dòng)態(tài)使用率降低。檢測(cè)緩沖越界內(nèi)存保護(hù)也能用于檢測(cè)代碼編寫中的緩沖越界錯(cuò)誤。通過在一個(gè)緩沖區(qū)的兩端申請(qǐng)“衛(wèi)兵”頁面,能使系統(tǒng)檢測(cè)到這類錯(cuò)誤。生成“衛(wèi)兵”頁面的方法是,首先,申請(qǐng)所要使用的緩沖區(qū),該緩沖區(qū)應(yīng)該是按頁對(duì)齊的;然后,把申請(qǐng)到的緩沖區(qū)增大額外的相當(dāng)于兩頁的大小,實(shí)際使用的緩沖區(qū)位于中間,其高端和低端各一頁用來做“衛(wèi)兵”頁面 ;最后,把這兩頁“衛(wèi)兵”頁面用宏VMSTATESE和VMSTATEVALIDNO設(shè)成不
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 競(jìng)爭(zhēng)激烈的輔導(dǎo)員招聘考試的應(yīng)對(duì)之道試題及答案
- 花藝商道與經(jīng)營策略的試題及答案
- 精神科測(cè)試題及答案
- 關(guān)于死亡的測(cè)試題及答案
- 2024福建事業(yè)單位考試的自我反思試題及答案
- 輔導(dǎo)員招聘考試心理健康維護(hù)與干預(yù)技巧試題及答案
- 農(nóng)藝師考試知識(shí)框架試題及答案
- 2024花藝師考試的考核形式變化試題及答案
- 2024年園藝師考試溫室植物育種水平試題及答案
- 民辦中專教師崗前培訓(xùn)
- 2019版-支氣管鏡檢查指南
- 《動(dòng)物細(xì)胞融合與單克隆抗體》說課稿
- 杜甫《客至》課件-高中語文統(tǒng)編版選擇性必修下冊(cè)
- 三創(chuàng)賽團(tuán)隊(duì)指導(dǎo)老師承諾書
- 機(jī)械制造廠質(zhì)量管理手冊(cè)
- (完整)中醫(yī)癥候積分量表
- 全國國家級(jí)園區(qū)名單
- 初中數(shù)學(xué)七年級(jí)下冊(cè) 加減消元法 全國一等獎(jiǎng)
- 利用智能垃圾分類系統(tǒng)促進(jìn)資源回收利用
- 《天然氣取樣導(dǎo)則》課件
- 測(cè)爆、測(cè)氧儀操作規(guī)程
評(píng)論
0/150
提交評(píng)論