加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 1 存儲管理概念
    • 2 分區(qū)存儲
    • 3 頁式存儲
    • 4 段式存儲
    • 5 總結(jié)
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

嵌入式基礎(chǔ)知識-存儲管理

2023/08/07
2413
閱讀需 9 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

上篇介紹了存儲器的相關(guān)知識,偏重的是硬件結(jié)構(gòu),本篇介紹存儲管理的相關(guān)知識,偏重的是軟件管理。

1 存儲管理概念

操作系統(tǒng),包括嵌入式系統(tǒng),通常利用存儲管理單元MMU(Memory Management Unit)來提供內(nèi)存保護(hù)機(jī)制,實現(xiàn)系統(tǒng)內(nèi)核與應(yīng)用程序,應(yīng)用程序與應(yīng)用程序之間的隔離。

內(nèi)存保護(hù)包括兩個方面:

    防止地址越界:對于多個應(yīng)用程序,每個應(yīng)用程序都有自己獨立的地址空間。
    防止操作越界:對于多個應(yīng)用程序共享的內(nèi)存區(qū)域,每個應(yīng)用程序都有自己的訪問權(quán)限。

存儲管理的方式,通常可以分為一下幾類:分區(qū)存儲,頁式存儲,段式存儲

2 分區(qū)存儲

分區(qū)存儲又可分為兩類:

    固定分區(qū)存儲:分區(qū)大小是固定的可變分區(qū)存儲:分區(qū)大小是可變的

2.1 固定分區(qū)存儲

固定分區(qū),是指分區(qū)的個數(shù)、位置、大小一旦確定后,就不再變化了。另外,分區(qū)的大小可以是相等的,也可以是不相等的。

對于新任務(wù)到來后的內(nèi)存分配原則,有兩種:

    多個輸入隊列:對于每一個用戶分區(qū),都有一個相應(yīng)的輸入隊列。當(dāng)一個新任務(wù)到來時,就把它加入到對應(yīng)的隊列中,要求這個隊列對應(yīng)的分區(qū),是能夠裝得下該任務(wù)的最小分區(qū)。單個輸入隊列:所有的用戶分區(qū)只設(shè)置一個輸入隊列。當(dāng)一個新任務(wù)到來時,就把它加入到對應(yīng)的隊列中,當(dāng)某個分區(qū)空閑時,就從隊列中選擇合適的任務(wù)去占用這個分區(qū),在任務(wù)選擇時,可以有兩種分配方法:

    • 方式一:選擇離對首最近的且能夠裝入這個分區(qū)的任務(wù)。當(dāng)選中的是較小的任務(wù)時,則會浪費大量內(nèi)存空間。方式二:先搜索整個隊列,選擇能夠裝入這個分區(qū)的最大任務(wù),盡可能減小空間浪費。

對于固定分區(qū):

    優(yōu)點:易于實現(xiàn),系統(tǒng)開銷較?。臻e空間管理、內(nèi)存分配與回收算法復(fù)雜度低)缺點:內(nèi)存利用率不高,產(chǎn)生內(nèi)存碎片;分區(qū)總數(shù)固定,限制了并發(fā)程序的個數(shù)

2.2 可變分區(qū)存儲

可變分區(qū),是指分區(qū)不是預(yù)先劃分的,而實動態(tài)創(chuàng)建的,在裝入一個程序時,系統(tǒng)根據(jù)它的需求和內(nèi)存空間的使用情況來決定是否分配。

當(dāng)一個程序開始運行,要求裝入內(nèi)存時,系統(tǒng)就會從空閑區(qū)劃出一塊進(jìn)行分配;當(dāng)程序運行完則釋放存儲區(qū)域,變?yōu)榭臻e區(qū)。

在具體實現(xiàn)可變分區(qū)管理時,需考慮三個方面問題:

    • 內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu):系統(tǒng)會維護(hù)一個分區(qū)鏈表,記錄每個內(nèi)存分區(qū)的情況(分配狀態(tài)、起始地址、長度等)內(nèi)存的分配算法:當(dāng)新任務(wù)到來時,需決策分配到哪個空閑分區(qū),通常有4種分配法 :

      • 最先匹配法:從鏈表頭,按順序找到第一個能裝入新任務(wù)的空閑分區(qū)。接著把該空閑分區(qū)中按照任務(wù)大小分割,剩余的部分仍是一個空閑分區(qū),將任務(wù)裝入,并更新分區(qū)鏈表下次匹配法:與最優(yōu)匹配法類似,區(qū)別是每次分配后記錄位置,下次再分區(qū)時從此位置開始查找,而不是從固定的鏈表頭開始查找最佳匹配法:將新任務(wù)狀態(tài)與其大小最接近的空閑分區(qū)中。這種方法最大的缺點是產(chǎn)生的空閑分區(qū)可能很小而無法使用最壞匹配法:每次都選用最大的分區(qū)進(jìn)行分配,避免出現(xiàn)不可用的極小分區(qū),但較大的空閑分區(qū)也不被保留

內(nèi)存的回收算法:當(dāng)任務(wù)運行結(jié)束釋放內(nèi)存時,若有相鄰的空閑分區(qū),則需要合并為一個大的空閑分區(qū),并更新分區(qū)鏈表

對于內(nèi)存的分配算法,可以看下如下實例:某計算機(jī)系統(tǒng)內(nèi)存大小128k,采用可變分區(qū)分配方式進(jìn)行內(nèi)存分配,當(dāng)前系統(tǒng)的內(nèi)存分塊情況如下圖左圖,現(xiàn)有一個作業(yè)4要分配9k的內(nèi)存,這這種分配算法的分區(qū)情況如下圖右邊4個子圖所示

可變分區(qū)改善了固定分區(qū)的一些缺點,但作為分區(qū)存儲本身,仍有一些無法解決的問題:

    當(dāng)進(jìn)程運行所需的內(nèi)存大于系統(tǒng)內(nèi)存時,則無法將整個進(jìn)程一起調(diào)入內(nèi)存,從而無法運行該程序

3 頁式存儲

頁式存儲,將進(jìn)程空間分配為一個個頁,同時將系統(tǒng)內(nèi)存也分配為一個個頁,例如都是4K的大小。

這樣,運行程序時,每次將需要運行的邏輯頁狀態(tài)內(nèi)存中,運行完再裝入下一個要運行的頁,這樣就解決了空間極大的進(jìn)程運行的問題。

對于邏輯頁,可以用頁號和頁內(nèi)地址表示:

    頁號:與內(nèi)存中的物理塊號并不是對應(yīng)的,需要通過查詢“頁表”得到對應(yīng)的物理塊號業(yè)內(nèi)地址:或稱頁內(nèi)偏移量,與內(nèi)存中的物理偏移地址是一致的

比如上圖中,其地址長度32位,頁號占用20位,頁內(nèi)地址占用12位,則頁面總數(shù)為2^20=1024K=1M個,頁面大小為2^12=4K

對于頁表的表示,如下圖,左邊是進(jìn)程中的頁號,通過查詢頁表,可以得到右邊內(nèi)存中對應(yīng)的塊號。

通過頁表的方式,可以實現(xiàn)從邏輯地址到物理地址的轉(zhuǎn)換。

    邏輯地址:頁號+業(yè)內(nèi)偏移物理地址:物理塊號+頁內(nèi)偏移地址

兩種地址的頁內(nèi)偏移是一樣的,所以地址轉(zhuǎn)換,只需要先計算出頁號與物理塊號的轉(zhuǎn)換關(guān)系,即可進(jìn)行地址轉(zhuǎn)換。

頁式存儲的地址轉(zhuǎn)換,可看如下實例:

題目:頁面大小L為1k字節(jié),頁號2對應(yīng)的內(nèi)存塊號b=8,將邏輯地址A=2500轉(zhuǎn)換為物理地址E

由題目可得如下分析:

    頁面大小1k,則頁內(nèi)地址占用10位邏輯地址2500轉(zhuǎn)為16進(jìn)制為0x09C4,取低10位為業(yè)內(nèi)地址,即0x01C4,頁號為0x02由題目知頁號為0x02對應(yīng)的內(nèi)存塊號為8,對應(yīng)的16進(jìn)制為0x08,將其與業(yè)內(nèi)地址組合,可得物理地址為0x0x21C4,十進(jìn)制即為8644。

或直接使用十進(jìn)制計算:

頁號P=A/L=2500/1024=2,由題目知,其對應(yīng)的內(nèi)存塊號為8

業(yè)內(nèi)偏移w=A%L=2500%1024=452

則物理地址為:

E=b*L+w=8*1024+452=8644

頁式存儲的優(yōu)缺點:

    優(yōu)點:內(nèi)存利用率高,內(nèi)存碎片小,分配與管理簡單缺點:增加了系統(tǒng)的開銷,可能產(chǎn)生抖動現(xiàn)象

4 段式存儲

段式存儲與頁式存儲比較相似,區(qū)別是段式存儲不是按照固定的大小分割內(nèi)存,而是根據(jù)進(jìn)程的邏輯功能進(jìn)行空間畫法,這樣便于內(nèi)存共享,只是每段的空間大小不同。

4.1 基本原理

與頁式存儲類似,段式存儲每段的表示,由段號和段內(nèi)地址組成。

從邏輯地址到物理地址的轉(zhuǎn)換,則是通過段表的查詢來實現(xiàn)。

看一個實例,例如,某進(jìn)程的段表內(nèi)容如下,當(dāng)訪問段號2,段內(nèi)地址400的邏輯地址時,進(jìn)行地址轉(zhuǎn)換則會出現(xiàn)越界異常

段號 段長 內(nèi)存起始地址 權(quán)限 狀態(tài)
0 100 6000 只讀 在內(nèi)存
1 200 -- 讀寫 不在內(nèi)存
2 300 4000 讀寫 在內(nèi)存

因為段號2對應(yīng)的段長只有300,而段內(nèi)地址400則超出了范圍,地址4400為非法地址

4.2 段頁式存儲

段頁式存儲,則是將段式存儲和頁式存儲結(jié)合起來使用,對進(jìn)程空間先分段,再分頁。

段頁式存儲優(yōu)缺點:

    優(yōu)點:空間浪費小,便于存儲共享與存儲保護(hù),可以動態(tài)鏈接缺點:管理的復(fù)雜度與開銷增大,需要的硬件增加,執(zhí)行速度下降

5 總結(jié)

本篇介紹了存儲管理的相關(guān)知識,包括存儲管理的分類:分區(qū)存儲、頁式存儲和段式存儲,已經(jīng)不同存儲方式的地址轉(zhuǎn)換方式與優(yōu)缺點等。

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
ECS-100-20-30B-DU 1 ECS International Inc Parallel - Fundamental Quartz Crystal, 10MHz Nom, ROHS COMPLIANT, SMD, 4 PIN
$1.32 查看
HFBR-1414 1 Broadcom Limited Transmitter, 792nm Min, 865nm Max, 20Mbps, ST Connector, Through Hole Mount, PLASTIC, DIP-8

ECAD模型

下載ECAD模型
暫無數(shù)據(jù) 查看
SFH619A-X009T 1 Vishay Intertechnologies SFH619A Optocoupler, Photodarlington Output, High Gain, 300 V BVCEO

ECAD模型

下載ECAD模型
$1.5 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

控制科學(xué)與工程碩士,日常分享單片機(jī)、嵌入式、C/C++、Linux等學(xué)習(xí)經(jīng)驗干貨~