前言:本站為你精心整理了汽車操作系統(tǒng)存儲(chǔ)保護(hù)機(jī)制的設(shè)計(jì)范文,希望能為你的創(chuàng)作提供參考價(jià)值,我們的客服老師可以幫助你提供個(gè)性化的參考范文,歡迎咨詢。
OS-Application的實(shí)現(xiàn)
OS-Application的資源管理
作為資源統(tǒng)一管理的單元,OS-Application需要記錄其所管理的所有資源信息。在這里將各種類型資源的數(shù)量和標(biāo)識(shí)號(hào)都以表的方式保存在OS-Application的配置結(jié)構(gòu)中。由于在操作某一資源時(shí),需要通過(guò)該資源訪問(wèn)其所隸屬的OS-Application,因此在對(duì)應(yīng)的資源的配置結(jié)構(gòu)中也需要記錄其所隸屬的OS-Application的標(biāo)識(shí)號(hào)。
OS-Application與底層的映射
OS-Application作為域在邏輯層面上將系統(tǒng)劃分開來(lái)需要底層的支持。在存儲(chǔ)保護(hù)中,域主要體現(xiàn)了系統(tǒng)存儲(chǔ)空間的隔離。為了實(shí)現(xiàn)域與存儲(chǔ)空間之間的映射,需要在源程序中將若干個(gè)域劃分為各自的輸入段,然后通過(guò)鏈接腳本將域定位到程序可執(zhí)行印象的指定存儲(chǔ)空間中[6]。由于MPC5634中的存儲(chǔ)管理單元(MMU)是基于分頁(yè)的機(jī)制來(lái)實(shí)現(xiàn)存儲(chǔ)管理的,所以必須將物理存儲(chǔ)空間中的系統(tǒng)的各個(gè)部分根據(jù)各自的屬性劃分成相應(yīng)的頁(yè)。頁(yè)的大小以4的倍數(shù)遞增,從4k到4G不等。每一個(gè)頁(yè)具有讀、寫和可執(zhí)行的訪問(wèn)屬性,以及表示其特權(quán)模式的屬性和標(biāo)識(shí)其所隸屬的進(jìn)程ID的PID屬性。通過(guò)PID屬性可以標(biāo)識(shí)該頁(yè)所屬的域。通過(guò)將存儲(chǔ)空間分頁(yè)把系統(tǒng)的不同部分劃分開來(lái)。
TLB的管理實(shí)現(xiàn)
每當(dāng)程序進(jìn)行訪存時(shí),MMU會(huì)將訪存地址、PID和當(dāng)前的特權(quán)模式與TLB中的項(xiàng)目相比較,若命中并且滿足權(quán)限要求則會(huì)將有效地址轉(zhuǎn)換為物理地址,否則產(chǎn)生異常?;谟布拇鎯?chǔ)保護(hù)機(jī)制就是通過(guò)TLB來(lái)對(duì)訪存加以權(quán)限檢查從而達(dá)到保護(hù)的功能。TLB共有16項(xiàng),為了有效地支持存儲(chǔ)保護(hù),根據(jù)系統(tǒng)的運(yùn)行特點(diǎn)這里將TLB的前8項(xiàng)作為固定項(xiàng)用以保存經(jīng)常被訪問(wèn)的系統(tǒng)頁(yè)面,比如內(nèi)核代碼和數(shù)據(jù)。而剩下的8項(xiàng)用來(lái)動(dòng)態(tài)地維護(hù)應(yīng)用使用的頁(yè)面。通常應(yīng)用的頁(yè)的數(shù)量會(huì)超過(guò)TLB中的項(xiàng)數(shù)。
頁(yè)表的設(shè)計(jì)
頁(yè)表分為兩種,系統(tǒng)頁(yè)表和應(yīng)用頁(yè)表。系統(tǒng)頁(yè)表中對(duì)應(yīng)的是系統(tǒng)初始化及內(nèi)核相關(guān)的數(shù)據(jù)和代碼。這些頁(yè)面信息是長(zhǎng)駐TLB中的,其特權(quán)模式是內(nèi)核態(tài),并且其所對(duì)應(yīng)的程序是作為共享資源來(lái)訪問(wèn)的。應(yīng)用頁(yè)表中對(duì)應(yīng)的是應(yīng)用的數(shù)據(jù)和代碼。這些頁(yè)面信息不是長(zhǎng)駐TLB中的,當(dāng)發(fā)生缺頁(yè)異常的時(shí)候TLB中某些應(yīng)用的頁(yè)面信息會(huì)被替換掉。為了有效地維護(hù)頁(yè),這里以散列表的方式來(lái)記錄頁(yè)起始地址與頁(yè)在頁(yè)表中位置的關(guān)系。頁(yè)的起始地址作為散列表的關(guān)鍵碼,通過(guò)散列函數(shù)將其轉(zhuǎn)換為對(duì)應(yīng)的散列表中的位置。散列表該位置處的元素記錄了頁(yè)在頁(yè)表中的位置。
頁(yè)的替換算法
因?yàn)閼?yīng)用的頁(yè)的數(shù)量通??赡軙?huì)超過(guò)可用的TLB的項(xiàng)數(shù),所以在運(yùn)行過(guò)程中可能會(huì)發(fā)生TLB未命中的情況。在TLB未命中異常處理函數(shù)中需要對(duì)TLB中的項(xiàng)進(jìn)行替換,將需要訪問(wèn)的應(yīng)用的頁(yè)置入TLB中。這里以先進(jìn)先出的方式實(shí)現(xiàn)替換。在發(fā)生未命中異常的時(shí)候,我們能得到的信息有有效地址以及當(dāng)前的PID,我們必須通過(guò)有效地址來(lái)找到需要置換進(jìn)TLB的頁(yè)面,以及再找到需要置換出TLB的頁(yè)面。前者我們通過(guò)一個(gè)散列表表來(lái)查找需要置換進(jìn)來(lái)的頁(yè)面,而后者我們維護(hù)一個(gè)先進(jìn)先出的鏈表來(lái)決定需要置換出去的頁(yè)面。
系統(tǒng)調(diào)用的實(shí)現(xiàn)
系統(tǒng)調(diào)用的實(shí)現(xiàn)系統(tǒng)調(diào)用由兩部分構(gòu)成,接口函數(shù)和系統(tǒng)調(diào)用異常處理函數(shù)。
接口函數(shù)的實(shí)現(xiàn)
每個(gè)接口函數(shù)都對(duì)應(yīng)一個(gè)系統(tǒng)服務(wù)。在接口函數(shù)中以函數(shù)指針的方式來(lái)建立與系統(tǒng)服務(wù)的關(guān)聯(lián)。當(dāng)用戶調(diào)用接口函數(shù)時(shí),需要判斷當(dāng)前的特權(quán)模式。如果當(dāng)前是特權(quán)態(tài)則直接調(diào)用系統(tǒng)服務(wù)。否則需要保存系統(tǒng)服務(wù)函數(shù)的地址到寄存器,然后再通過(guò)匯編指令SC觸發(fā)系統(tǒng)調(diào)用異常處理函數(shù)來(lái)實(shí)現(xiàn)特權(quán)模式的切換。
系統(tǒng)調(diào)用異常處理函數(shù)的實(shí)現(xiàn)
進(jìn)入到異常處理函數(shù)中后,系統(tǒng)進(jìn)入特權(quán)態(tài)。其后需要根據(jù)當(dāng)前任務(wù)分配系統(tǒng)棧,并使程序跳轉(zhuǎn)到保存在寄存器中的系統(tǒng)服務(wù)函數(shù)的入口地址處。
任務(wù)的管理
任務(wù)管理的核心在于當(dāng)任務(wù)發(fā)生切換的時(shí)候,需要完成任務(wù)之間上下文環(huán)境的切換。與此同時(shí)任務(wù)執(zhí)行過(guò)程中所代表的域的保護(hù)信息也需要進(jìn)行切換,從而保證域與域之間正確的轉(zhuǎn)換。這些信息包括:1)OS-Application的ID號(hào);2)任務(wù)所隸屬的OS-Application的特權(quán)模式;3)任務(wù)的系統(tǒng)棧。若切換至的任務(wù)是第一次運(yùn)行,則需要通過(guò)接口函數(shù)來(lái)實(shí)現(xiàn)到任務(wù)入口函數(shù)的跳轉(zhuǎn)。在接口函數(shù)中根據(jù)任務(wù)所屬OS-Application的特權(quán)模式來(lái)進(jìn)行不同的處理。若是特權(quán)態(tài)則直接進(jìn)行跳轉(zhuǎn),否則需要將當(dāng)前特權(quán)模式更改為用戶態(tài)再進(jìn)行跳轉(zhuǎn)。
本文作者:燕立明羅蕾作者單位:電子科技大學(xué)計(jì)算機(jī)學(xué)院嵌入式實(shí)驗(yàn)室