2019備考[嵌入式系統(tǒng)設(shè)計(jì)師]之“存儲(chǔ)管理篇”
通過(guò)分析歷年考題發(fā)現(xiàn),在存儲(chǔ)管理方面的題目蠻多的,應(yīng)該是一個(gè)重要考點(diǎn)。無(wú)論是概念、理論、分析和計(jì)算都相當(dāng)容易出題。這里就先拿這個(gè)點(diǎn)說(shuō)說(shuō)吧,其他的以后有時(shí)間再寫了。
1、存儲(chǔ)器系統(tǒng)的層次架構(gòu)
- 計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器被組織成一個(gè)金字塔的層次結(jié)構(gòu)。自上而下為:CPU內(nèi)部寄存器、芯片內(nèi)部高速緩存(cache)、芯片外部高速緩存(SRAM、SDRAM、DRAM)、主存儲(chǔ)器(NAND FLASH、NOR FLASH、EEPROM)、外部存儲(chǔ)器(磁盤、光盤、CF卡、SD卡)和遠(yuǎn)程二級(jí)存儲(chǔ)器(分布式文件系統(tǒng)、WEB服務(wù)器),6個(gè)層次的結(jié)構(gòu)。上述設(shè)備從上而下,依次速度更慢、容量更大、訪問(wèn)頻率更小,造價(jià)更便宜。
2、高速緩存(cache)
工作原理:主要利用了程序的局部性特點(diǎn)。地址映象是指把主存地址空間映象到cache的地址空間。地址變換是指當(dāng)程序或數(shù)據(jù)已經(jīng)裝入到cache后,在實(shí)際運(yùn)行過(guò)程中,把主存地址如何編程cache空間的地址。
常用的地址映象和地址變換的方式有:
直接映象和變換:速度快,造價(jià)低,但有局限性,不能充分利用cache的好處。
組相聯(lián)地址映象和變換:速度稍慢但是命中率高。
全相聯(lián)地址映象和變換:可以任意映射。常用的cache替換算法:輪轉(zhuǎn)法和隨機(jī)替換算法。
高速緩存的分類:
A.統(tǒng)一cache和獨(dú)立的數(shù)據(jù)/指令cache
B.寫通cache和寫回cache
C.讀操作分配cache和寫操作分配cache
3、存儲(chǔ)管理單元(MMU)
MMU在CPU和物理內(nèi)存之間進(jìn)行地址轉(zhuǎn)換,將地址從邏輯空間映射到物理空間,這個(gè)過(guò)程稱為內(nèi)存映射。MMU主要完成下面的工作:
A.虛擬存儲(chǔ)空間到物理空間的映射。
B.存儲(chǔ)器訪問(wèn)權(quán)限的控制。
C.設(shè)置虛擬存儲(chǔ)空間的緩沖特性。嵌入式系統(tǒng)中常常采用頁(yè)式存儲(chǔ)管理。為了管理這些頁(yè)引入了頁(yè)表的概念。頁(yè)表是位于內(nèi)存中的表,它的每一行對(duì)應(yīng)虛擬存儲(chǔ)空間的一個(gè)頁(yè),該行包含了該虛擬內(nèi)存頁(yè)對(duì)應(yīng)的物理內(nèi)存頁(yè)的地址、該頁(yè)的訪問(wèn)權(quán)限和該頁(yè)的緩沖特性等。從虛擬地址到物理地址的變換過(guò)程就是查詢頁(yè)表的過(guò)程。
由于頁(yè)表存儲(chǔ)在內(nèi)存中的,整個(gè)查詢過(guò)程需要付出很大的代價(jià)。根據(jù)程序局部性的特點(diǎn),增加了一個(gè)小容量、高速度的存儲(chǔ)部件來(lái)存放當(dāng)前訪問(wèn)需要的地址變換條目,這個(gè)存儲(chǔ)部件稱為:地址轉(zhuǎn)換后備緩沖器(TLB)。
當(dāng)CPU訪問(wèn)內(nèi)存時(shí),首先在TLB中查找需要的地址變換條目,如果該條目不存在,CPU再?gòu)膬?nèi)存中的頁(yè)表中查詢,并把相應(yīng)的結(jié)果添加到TLB中,更新它的內(nèi)容。
嵌入式系統(tǒng)中虛擬存儲(chǔ)空間到物理空間的映射以內(nèi)存塊為單位進(jìn)行。即虛擬存儲(chǔ)空間中一塊連續(xù)的存儲(chǔ)空間被映射到物理存儲(chǔ)空間中同樣大小的一塊連續(xù)存儲(chǔ)空間。
在頁(yè)表和TLB中,每一個(gè)地址變換條目實(shí)際上記錄了一個(gè)虛擬存儲(chǔ)空間的內(nèi)存塊的基地址與物理存儲(chǔ)空間相對(duì)應(yīng)的一個(gè)內(nèi)存塊的基地址之間的對(duì)應(yīng)關(guān)系。
在MMU中實(shí)現(xiàn)虛擬地址到物理地址的映射是通過(guò)兩級(jí)頁(yè)表來(lái)實(shí)現(xiàn)的。禁止MMU時(shí),所有物理地址和虛擬地址相等,即使用平板存儲(chǔ)模式。
4、內(nèi)存保護(hù)
- 操作系統(tǒng)通常利用MMU來(lái)實(shí)現(xiàn)操作系統(tǒng)內(nèi)核與應(yīng)用程序之間的隔離,以及應(yīng)用程序與應(yīng)用程序之間的隔離。
內(nèi)存保護(hù)包含兩個(gè)方面的內(nèi)容:
A.防止地址越界,每個(gè)應(yīng)用程序都有自己獨(dú)立的地址空間。
B.防止越權(quán)操作,每個(gè)應(yīng)用程序都有自己的訪問(wèn)權(quán)限。
5、實(shí)模式與保護(hù)模式
在嵌入式系統(tǒng)中,常見的存儲(chǔ)管理方案可以分為兩大類:實(shí)模式和保護(hù)模式。
實(shí)模式:內(nèi)存的平面使用模式。
特點(diǎn):
A.不劃分“系統(tǒng)空間”與“用戶空間”,無(wú)須進(jìn)行地址映射。
B.操作系統(tǒng)與應(yīng)用程序之間不再有物理的邊界。
C.系統(tǒng)中的“任務(wù)”或“進(jìn)程”,實(shí)際上全是內(nèi)核線程。
內(nèi)存布局:
A.代碼段:包含操作系統(tǒng)和應(yīng)用程序的所有代碼。
B.數(shù)據(jù)段:所有帶有初始值的全局變量。
C.BSS段:所有未帶初始值的全局變量。
D.堆空間:動(dòng)態(tài)分配的內(nèi)存空間。
E.??臻g:保存上下文以及函數(shù)調(diào)用時(shí)的局部變量和形參。
在實(shí)模式存儲(chǔ)管理方案下,主要的工作在于堆空間的管理,即如何來(lái)管理空閑的堆空間、如何來(lái)分配內(nèi)存、如何來(lái)回收內(nèi)存等等。保護(hù)模式:處理器中必須有MMU硬件并啟用。
特點(diǎn):
A.系統(tǒng)內(nèi)核和用戶程序都有各自獨(dú)立的地址空間。
B.每個(gè)應(yīng)用程序只能訪問(wèn)自己的地址空間,不能去破壞操作系統(tǒng)和其他應(yīng)用程序的代碼和數(shù)據(jù)。
6、分區(qū)存儲(chǔ)管理
為了實(shí)現(xiàn)多道程序系統(tǒng)而采用的內(nèi)存管理。
- 基本思路:把整個(gè)內(nèi)存劃分為兩大區(qū)域,即系統(tǒng)區(qū)和用戶區(qū),然后再把用戶區(qū)劃分為若干個(gè)分區(qū),每個(gè)任務(wù)占有其中的一個(gè)分區(qū)。這樣,在內(nèi)存當(dāng)中就同時(shí)保留多個(gè)任務(wù),讓他們共享整個(gè)用戶區(qū),從而實(shí)現(xiàn)多個(gè)任務(wù)的并發(fā)運(yùn)行。
- 分區(qū)存儲(chǔ)管理又可以分為兩類:固定分區(qū)和可變分區(qū)。
固定分區(qū):各個(gè)用戶分區(qū)的個(gè)數(shù)、位置和大小一旦確定后,就固定不變,不能再修改。
優(yōu)點(diǎn):易于實(shí)現(xiàn),系統(tǒng)開銷較小。
缺點(diǎn):內(nèi)存利用率不高,分區(qū)總數(shù)固定。
可變分區(qū):動(dòng)態(tài)創(chuàng)建,在裝入一個(gè)程序時(shí),系統(tǒng)將根據(jù)它的需求和內(nèi)存空間的使用情況來(lái)決定是否分配。
優(yōu)點(diǎn):動(dòng)態(tài)變化,非常靈活。
缺點(diǎn):可能存在外碎片。 - 在實(shí)現(xiàn)可變存儲(chǔ)管理技術(shù)的時(shí)候,需要考慮三個(gè)方面的問(wèn)題:
A.內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)
B.內(nèi)存的分配算法
C.內(nèi)存的回收算法
7、地址映射
- 地址映射:地址映射也叫地址重定位。邏輯地址和物理地址是完全不同的,不能用邏輯地址來(lái)直接訪問(wèn)內(nèi)存單元。為了保證CPU在執(zhí)行指令的時(shí)候,可以正確地訪問(wèn)內(nèi)存單元,需要將用戶程序中的邏輯地址轉(zhuǎn)換為運(yùn)行時(shí)由機(jī)器直接尋址的物理地址。
- 地址映射由存儲(chǔ)管理單元MMU來(lái)完成。
- 地址映射主要有兩種方式:靜態(tài)地址映射和動(dòng)態(tài)地址映射。
靜態(tài)地址映射:當(dāng)用戶程序被裝入內(nèi)存時(shí),直接對(duì)指令代碼進(jìn)行修改,一次性地實(shí)現(xiàn)邏輯地址到物理地址的轉(zhuǎn)換。
動(dòng)態(tài)地址映射:當(dāng)用戶程序被裝入內(nèi)存時(shí),不對(duì)指令代碼做任何修改,而是在程序的運(yùn)行過(guò)程中,當(dāng)它需要訪問(wèn)內(nèi)存單元的時(shí)候,再來(lái)進(jìn)行地址轉(zhuǎn)換。 - 在具體實(shí)現(xiàn)時(shí),這項(xiàng)轉(zhuǎn)換工作一般是由硬件的地址映射機(jī)制來(lái)完成的。通常設(shè)置一個(gè)基地址寄存器,或者叫重定位寄存器。當(dāng)一個(gè)任務(wù)被調(diào)度運(yùn)行時(shí),就把它所在分區(qū)的起始地址裝入到整個(gè)寄存器中。然后,在程序運(yùn)行的過(guò)程中,當(dāng)需要訪問(wèn)某個(gè)內(nèi)存單元時(shí),硬件就會(huì)自動(dòng)地將其中的邏輯地址加上基地址寄存器中的內(nèi)容,從而得到實(shí)際的物理地址,并且按照這個(gè)物理地址區(qū)執(zhí)行。這個(gè)基地址寄存器位于MMU的內(nèi)部,整個(gè)地址映射過(guò)程是自動(dòng)運(yùn)行的。從理論上說(shuō),每訪問(wèn)一次內(nèi)存都要進(jìn)行一次地址映射。
8、頁(yè)式存儲(chǔ)管理(重點(diǎn))
- 基本思路:把物理內(nèi)存劃分為許多固定大小的內(nèi)存塊,稱為物理頁(yè)面;把邏輯地址空間也劃分為大小相同的塊,稱為邏輯頁(yè)面。當(dāng)一個(gè)用戶程序被裝入內(nèi)存時(shí),不是以整個(gè)程序?yàn)閱挝?,把它存放在一整塊連續(xù)的區(qū)域,而是以頁(yè)面為單位來(lái)進(jìn)行分配的。對(duì)于一個(gè)大小為N的頁(yè)面程序,需要有N個(gè)空閑的物理頁(yè)面來(lái)把它裝載。這些物理頁(yè)面不一定是要連續(xù)的。
- 在頁(yè)式存儲(chǔ)管理中需要解決三個(gè)問(wèn)題:數(shù)據(jù)結(jié)構(gòu)、內(nèi)存分配與回收、地址映射。
- 數(shù)據(jù)結(jié)構(gòu)有兩個(gè):頁(yè)表和物理頁(yè)面表。
A.頁(yè)表:給出了任務(wù)邏輯頁(yè)面號(hào)和內(nèi)存中物理頁(yè)面號(hào)之間的對(duì)應(yīng)關(guān)系。
B.物理頁(yè)面表:描述內(nèi)存空間中,各個(gè)物理頁(yè)面的使用情況。 - 內(nèi)存的分配過(guò)程:
A.對(duì)于一個(gè)新來(lái)的任務(wù),計(jì)算它所需要的頁(yè)面數(shù)N,然后查看位示圖,看是否還有N個(gè)空閑的物理頁(yè)面。
B.如果有足夠的空閑物理頁(yè)面,就去申請(qǐng)一個(gè)頁(yè)表,其長(zhǎng)度為N,并把頁(yè)表的起始地址填入到該任務(wù)的控制塊中。
C.分配N個(gè)空閑的物理頁(yè)面,把他們的變換填到頁(yè)表中,建立邏輯頁(yè)面與物理頁(yè)面直接的對(duì)應(yīng)關(guān)系。
D.修改位示圖,對(duì)剛剛被占用的那些物理頁(yè)面進(jìn)行標(biāo)記。 - 地址映射的基本思路:
A.邏輯地址分析:對(duì)邏輯地址,找到它所在的邏輯頁(yè)面,以及它在頁(yè)面內(nèi)的偏移地址。
B.頁(yè)表查找:根據(jù)邏輯頁(yè)面號(hào),從頁(yè)表中找出它對(duì)應(yīng)的物理頁(yè)面號(hào)。
C.物理地址合成:根據(jù)物理頁(yè)面號(hào)和頁(yè)內(nèi)偏移地址,最終確定物理地址。 - 邏輯地址分析:
頁(yè)面的大小都是2的整數(shù)次冪。對(duì)于給定的一個(gè)邏輯地址,可以直接把它的高位部分作為邏輯頁(yè)面號(hào),把它的低位部分作為頁(yè)內(nèi)偏移地址。例如,假設(shè)頁(yè)面的大小是4KB,即2的12次冪,邏輯地址為32為,那么在一個(gè)邏輯地址當(dāng)中,最低12位為頁(yè)內(nèi)偏移地址,而剩下的20位就是邏輯頁(yè)面號(hào)。 - 計(jì)算方法:
邏輯頁(yè)面號(hào)=邏輯地址/頁(yè)面大小
頁(yè)內(nèi)偏移量=邏輯地址%頁(yè)面大小
頁(yè)表查找:頁(yè)表作為操作系統(tǒng)的一個(gè)數(shù)據(jù)結(jié)構(gòu),通常保存在內(nèi)核的地址空間中。頁(yè)表基地址寄存器用來(lái)指向頁(yè)表的起始地址;頁(yè)表長(zhǎng)度寄存器用來(lái)指示頁(yè)表的大小,即對(duì)于當(dāng)前任務(wù),它總共包含有多少個(gè)頁(yè)面。
物理地址合成:假設(shè)物理頁(yè)面號(hào)為f,頁(yè)內(nèi)偏移地址為offset,每個(gè)頁(yè)面大小為2n,那么相應(yīng)的物理地址為:f×2n+offset。
9、虛擬存儲(chǔ)管理
- 程序局部性原理:時(shí)間局限性和空間局限性。
- 虛擬頁(yè)式存儲(chǔ)管理:在頁(yè)式管理的基礎(chǔ)上,增加了請(qǐng)求調(diào)頁(yè)和頁(yè)面置換的功能。
- 基本思路:當(dāng)一個(gè)用戶程序需要調(diào)入內(nèi)存去運(yùn)行時(shí),不是將這個(gè)程序的所有頁(yè)面都裝入內(nèi)存,而是只裝載部分的頁(yè)面,就可以啟動(dòng)這個(gè)程序運(yùn)行。在運(yùn)行過(guò)程中,如果發(fā)現(xiàn)要執(zhí)行的指令或者訪問(wèn)的數(shù)據(jù)不在內(nèi)存當(dāng)中,就向系統(tǒng)發(fā)出缺頁(yè)中斷請(qǐng)求,然后系統(tǒng)在處理這個(gè)中斷請(qǐng)求時(shí),就會(huì)將保存在外存中的相應(yīng)頁(yè)面調(diào)入內(nèi)存,從而使該程序能繼續(xù)運(yùn)行。
- 在虛擬頁(yè)式存儲(chǔ)管理中,頁(yè)表包含:邏輯頁(yè)面號(hào)、物理頁(yè)面號(hào)、駐留位、保護(hù)位、修改位和訪問(wèn)位。
-常用的頁(yè)面置換算法:
A.最優(yōu)頁(yè)面置換算法:理想化算法。
B.最近最久未使用算法:鏈表法和棧方法。尋找長(zhǎng)時(shí)間沒(méi)有被訪問(wèn)的頁(yè)面。
C.最不常用算法:每個(gè)頁(yè)面設(shè)置一個(gè)訪問(wèn)計(jì)數(shù)器。
D.先進(jìn)先出算法:性能比較差。
E.時(shí)鐘頁(yè)面置換算法:把頁(yè)面組成環(huán)形鏈表,類似時(shí)鐘面。 - 一般來(lái)說(shuō),當(dāng)一個(gè)任務(wù)剛剛啟動(dòng)的時(shí)候,它會(huì)不斷去訪問(wèn)一些新的頁(yè)面,然后逐步建立一個(gè)比較穩(wěn)定的工作集。工作集是指當(dāng)前任務(wù)正在使用的邏輯頁(yè)面的集合。如果分配給一個(gè)任務(wù)的物理頁(yè)面數(shù)太少,不能包含整個(gè)的工作集,任務(wù)將會(huì)造成很多缺頁(yè)中斷,需要頻繁地進(jìn)行頁(yè)面置換,這種現(xiàn)象稱為“抖動(dòng)”。