天天看點

作業系統--存儲管理1

0.先複習組成原理的一些相關的知識點

* 程式必須被裝入記憶體後(此時是以機器指令形式存在),才能被(以程序為機關)CPU 解析并執行。注意:記憶體中存儲的是資料/機器指令。

* CPU通路主存過程(各種類型資料通過總線傳送)

分類:讀過程、寫過程(涉及:控制總線、位址總線、資料總線)

讀過程:将位址發送給位址總線同時向控制總線傳讀指令,根據位址

在記憶體中找到相應的存儲單元,将需要的資料通過資料總線傳回。

寫過程:将資料發到資料總線,将位址發給位址總線,向控制總線發寫

指令,将資料存儲在相應的存儲單元内部。

* CPU能夠直接通路的存儲結構:主存和寄存器;

CPU通路寄存器速度快,通路主存速度慢

* cache:位于CPU内部,将CPU經常通路的資料/指令copy一份在其中

目的是為了減少CPU通路主存的次數,減小擷取資料的時間。

* 通常低位址空間存儲的是OS核心代碼;高位址空間存儲的是使用者程序代碼

存儲管理

* 邏輯位址空間:是程式中表達位置的符号,程式/cpu看到的位址全是邏輯位址

邏輯位址空間的範圍可能大于實際的位址空間。CPU要進行通路内 存的時候,先經過位址轉化,再将這個位址傳遞給位址總線。

* 實體位址空間:實際的位址-絕對位址;位址總線上真實的位址,範圍根據總線

的條數決定;通常以數值的形式給出。

* 指令和資料的位址綁定---将邏輯位址轉化為實體位址的時間

位址綁定:将程式的符合位址--轉化為程式執行需要的絕對位址的過程。

這個過程可能發送在3個階段。

1.編譯時期

如果代碼、資料的存放的首位址已知,編譯階段可以确定絕對位址。

如果首位址變更,則需要重新編譯。

2.裝入的時候

如果代碼、資料的存放的首位址未知,編譯階段生産的位址是可重定為的

位址,隻有在裝入的時候才可以确定其絕對位址。

3.運作的時候

如果允許程序在執行的時候遷移其代碼、資料(允許程序在執行的時候位址進行 改變),那麼位址綁定也在執行的時候進行。需要硬體支援其位址映射。

* 存儲管理單元(MMU)

MMU是CPU内部的硬體裝置,功能是将邏輯位址轉化為實體位址,速度比較快。

位址轉化的時間:就是将位址傳給位址總線之前完成轉化。

注意:具體轉化的政策存在不同。

注意:使用者程序隻能對邏輯位址進行處理。CPU也隻能看到邏輯位址。實體位址是

固定不變的。

* 動态連接配接(C/C++)

程序即将用到的代碼段,不會被預先連接配接進入程式,隻有真正被調用的時候

才會被連接配接;該技術需要OS的動态連接配接庫配合(windows的.dll)

* 動态裝入--提高對記憶體的使用率

簡單的說:程序的代碼不會一次性加載進記憶體,而是根據需要進行加載進記憶體

不需要OS進行特别的支援

* 交換技術:程序從記憶體中換出/換入--換出後存儲在外存的交換區--硬碟

互動的過程:大部分時間都在傳送程序資料,是比較花費時間,通常隻有當要

換出的資料比較多的時候,統一換出。

注意:OS隻要保證就緒隊列的程序位于記憶體中,其他隊列的程序就直接全部

換出,在其再次進入就緒隊列的時候換入。

交換的思想:已經被主流OS采用,是比較重要的思想。

* 交換技術和覆寫技術的差別:

覆寫 一個程式不需要把所有的指令和資料都裝入記憶體,而是将程式劃分為若幹

功能相關獨立的程式段,按照程式邏輯結構把若幹功能相對獨立的片段共 享一段記憶體,這樣使得使用者感覺記憶體擴大,程式源需要提供清晰的覆寫結 構,對程式員的要求比較高。

交換 先将記憶體的部分程式寫到外存的交換區,按照需求,在從外存互動區中

讀程式到記憶體中執行。互動完全是OS提供實作,對程式員透明。

差別:交換的機關是程序,覆寫的機關是某個程序的部分片段代碼。

1.OS記憶體管理的基本思想--主要是對主存的管理

* 圍繞這如何将邏輯位址轉化為實體位址;定義一種位址映射的關系

y = f(x):x邏輯位址,y實體位址-->進而産生各種記憶體配置設定政策

不同的記憶體配置設定政策對應一種不同的位址映射函數。

(其實這個過程中又産生了許多新的問題用來支援這個操作)

* 如何對存儲管理算法的評價和比較

# 硬體支援 # 性能 # 碎片 # 重定位 # 交換

# 記憶體共享 # 記憶體保護

2.連續記憶體配置設定--(程序全部進記憶體位址連續)

* 概念:

給程序配置設定一塊 >= 程序大小的連續記憶體空間

* 連續區記憶體配置設定硬體支援

運用重定為寄存器防止使用者程序通路其他的程序空間,或修改OS的代碼和資料

base寄存器--基位址寄存器:儲存了程序的邏輯位址的起始位址

bound寄存器--界限寄存器:儲存了程序邏輯位址範圍。

MMU:通過上面的寄存器使得MMU能夠動态的映射沒一個邏輯位址到實體位址

注意:在CPU将位址傳給總線前轉化的過程中,MMU先檢查範圍在進行轉化,

假如不符合範圍base/base+bound則發生異常進入OS核心态,通常情況

OS就會終止該使用者程序。

* 連續記憶體配置設定産生的問題

# 多個長度不等的hole散布在記憶體内

# 當一個程序申請進入記憶體,OS選擇一個合适的hole配置設定給這個程序

此時存在不同的分區選擇算法

# OS維護一些管理資訊:分區配置設定情況,已經配置設定和未配置設定的hole

---出現的問題:OS如何在一串hole為某個程序選擇一個Hole?---

即動态存儲配置設定--存在幾種常見的政策

first-fit:首次适應,每次從頭開始找,找到的第一個滿足條件就配置設定給程序

best-fit:周遊整個hole,找到所有滿足的hole,将這些滿足中的最小的hole

配置設定給程序。【将Hole按照長度遞增放在一個隊列裡面】

存在的問題:每次程序結束釋放的分區都是相對較小的

worst-fit:和best-fit相反,每次配置設定都是找的最大的hole配置設定給程序

next-fit:找到第一個合适的hole後再繼續找到下一個合适的hole并配置設定

---動态配置設定後新的問題碎片----存在内部/外部碎片

# 外部碎片:其實就是程序被配置設定分區/釋放分區後剩餘的主存的不連續hole;

這些hole通常比較小,無法用于程序配置設定。通常将這些hole合并

可能時候配置設定某個程序

# 内部碎片:指的:配置設定給程序的hole >程序占的記憶體大小;這些内部碎片

是屬于分區内部,無法被再次利用。

OS如何應對減少這些碎片,以提高記憶體的使用率

1.對于外部碎片:采取緊縮的技術--重排記憶體塊

将所有的hole合并成一個大的hole;

前提條件:支援在運作時的代碼資料重定位。

2.分區對換:搶占處于等待的程序的記憶體資源:

具體實作将等待的程序換出到外存的交換區,騰出記憶體空間

注意:緊縮技術代價較高,需要進行資料複制,此時CPU不能做其他操作

連續分區配置設定存在内部碎片+外部碎片

* 連續配置設定的缺點:

1,産生内部/外部碎片

2,記憶體使用率低

繼續閱讀