作業系統筆記 儲存管理(1)

2022-09-07 09:51:10 字數 3321 閱讀 6848

絕對裝入方式

可重定位裝入方式

動態執行時裝入方式

程式的鏈結

記憶體連續分配

分割槽**演算法

「碎片」問題

可重定位分割槽分配

邏輯位址(相對位址,虛位址):使用者程式經過彙編或編譯後形成目標**;

目標**採用相對位址形式:首位址為0;其餘指令中位址以相對於首位址的偏移為位址;

實體地址(絕對位址,實位址):記憶體中儲存單元的位址,可直接定址。

不能用邏輯位址在記憶體中讀取資訊。

位址重定位(位址對映)

為了保證cpu執行指令時可正確訪問儲存單元,需將使用者程式中的邏輯位址轉換為執行時由機器直接定址的實體地址,這一過程稱為位址對映。

程式設計時,直接確定記憶體位置,但是不靈活,不支援多道程式設計技術。這種裝入方式導致程式在記憶體中的位置是固定的,一旦指定的位置被占用,程式就無法執行。記憶體利用率不高。

程式設計時使用邏輯位址,執行時使用實體地址;裝入時,進行位址重定位;特點是靈活,支援多道程式設計技術。

在程式裝入時,對目標程式中的指令和資料位址進行修改(重定位的過程),這種重定位的過程在裝入一次完成,之後不再改變程式在記憶體中的位置(靜態重定位)。

靜態位址重定位:當使用者程式被裝入記憶體時,一次性實現邏輯位址到實體地址的轉換,以後不再轉換。一般在裝入記憶體時由軟體完成

程式設計時,使用邏輯位址,執行時使用實體地址;執行時進行位址重定位;特點是靈活;支援多道程式設計技術。 可重定位裝入方式雖然可以將程序裝載到記憶體的任何乙個地方,但是在實際的執行中卻不能進行位置的移動,一旦移動就必須重新對其進行重定位,動態執行時裝入保證了執行時程式在記憶體中的移動,其將重定位的時間細化到了程式中每一條指令的執行時。

動態位址重定位:在程式執行過程中要訪問資料時再進行位址變換(即在逐條指令執行時完成位址對映。一般為了提高效率,此工作由硬體位址對映機制來完成。硬體支援,軟硬體結合完成),硬體上需要一對暫存器的支援。

在執行的時候再逐條的進行位址的重定位。

程式設計時,鏈結所有模組;

裝入時,鏈結所有模組;

執行時,根據需要鏈結模組;

連續分配方式:為程式分配一段連續儲存

空間。離散分配方式:為程式分配若干段連續的

儲存空間。

記憶體分為兩個區域:乙個供作業系統使用,乙個供使用者使用,在一段時間內,只有乙個使用者進

程在記憶體。

三種典型記憶體布局:

設定基址暫存器、限界暫存器來控制訪問區間。

os初始化階段,將使用者區劃分為若干固定大小的記憶體區域(分割槽);每個分割槽可放乙個程式執行;乙個分區內的程式執行結束,可調入另乙個程式執行;劃分為幾個分割槽,則允許幾個程式同時在記憶體執行;分割槽大小和位置可不同;

分割槽說明表用於管理記憶體中的空閒區域,實現簡單,但是「內零頭」嚴重

內零頭:分配給程序,而程序未用到的記憶體部分。

外零頭:未分配給程序,但因為太小而無程序能用。

os初始化階段,將使用者區劃分為乙個大的空白分割槽;每個程式執行時,劃分出乙個大小合適的分割槽;程式執行結束,其所在的分割槽撤消;(按連續分配的方式,根據程式的大小分配記憶體空間)

空閒分割槽表

空閒分割槽鏈

開始和末尾都含有狀態位,表示上乙個或者下乙個區域是否被分配。

分割槽分配演算法

首次適應演算法

位址遞增順序排列空閒分割槽鏈;分配記憶體時,總是從低位址端開始掃瞄空閒區;找到的第乙個大小合適的分割槽,就分割分配;否則失敗。

特點:高址端有大空閒區概率大;低址端迅速被劃分,碎片出現速度快;

迴圈首次適應演算法

位址遞增順序排列空閒分割槽鏈;設定當前指標;分配記憶體時,從指標所指位置開始掃瞄空閒區;找到的第乙個大小合適的分割槽,就分割分配;否則失敗。這裡如果訪問到了鏈尾區域,就把指標指向鏈頭再尋找。

相比與首次適應演算法,每次開始尋找的初始位置由鏈頭變成了上次訪問的位置,迴圈遍歷直至找到符合條件的空閒區。

特點:碎片分布均勻;高址端有大空閒區概率小;

最佳適應演算法

大小遞增順序排列空閒分割槽鏈;分配記憶體時,從鏈首開始掃瞄空閒區;找到的第乙個大小合適的分割槽(較小的區域),就分割分配;否則失敗。

特點:碎片迅速出現;「最佳」 匹配;

最壞適應演算法

大小遞減順序排列空閒分割槽鏈;分配記憶體時,總是分配鏈首空閒區(較大的區域);否則失敗。

特點:碎片出現最慢(分割後剩下的分割槽是最大的);「最壞」 匹配;

分割槽**演算法

「碎片」問題

經過一段時間的分配**後,記憶體中存在很多很

小的空閒塊。它們每乙個都很小,不足以滿足分配要求;但其總和滿足分配要求。這些空閒塊被稱為碎片造成儲存資源的浪費。

採用動態分割槽分配方式;並且引入「緊湊」機制,合併小的碎片空閒區;使用動態位址重定位;

作業系統 儲存管理(1)

接著回到c語言程式,寫了乙個main.cpp 經過編譯後生成乙個obj檔案,鏈結形成exe檔案,最後執行exe檔案,把程式裝入記憶體中。那麼編譯 鏈結和裝入是啥?由編譯程式將使用者源 編譯成若干個目標模組。由鏈結程式將編譯後形成的目標檔案,以及所需的庫函式鏈結在一起,形成乙個完整的裝入模組。鏈結有三...

作業系統 儲存器管理(1)

1.快取記憶體和磁碟快取 快取記憶體是現代計算機結構中的乙個重要部件,它是介於暫存器和儲存器之間的儲存器。主要用於備份主存中較常用的資料,以減少處理機對主儲存器的訪問次數,可以大幅度提高程式執行速度。磁碟快取本身是利用主存中的部分儲存空間,暫時存放從磁碟中讀出 或寫入 的資訊。由於磁碟的i 0速度遠...

作業系統筆記 儲存管理(2)

位址重定位 快表兩級頁表 分段儲存管理 位址變換 資訊共享 分段與分頁比較 段頁式儲存管理 目的 減少分割槽式分配的內外零頭浪費的問題。思想 將目標程式分為若干的頁 頁面 這裡的頁是對於邏輯位址而言的線性位址。記憶體也要劃分為若干的頁框,頁框是對具體的實體地址進行的劃分,頁 頁面 與頁框的大小相同,...