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