作業系統原理讀書筆記之記憶體模型

2021-07-31 17:44:31 字數 1587 閱讀 2773

記憶體可直接定址的是實體地址,實體地址是固定的;相對的有邏輯位址(虛擬位址),使用者程式經過編譯彙編後形成目標**,目標**採用的首位址為0,其餘位址都對應於首位址而編址。而邏輯位址和實體地址的相互轉化稱為位址重定位

當使用者程式載入到記憶體時,一次性實現邏輯位址到實體地址的轉換,當程式位置改變,位址需要重新計算

在程序執行過程中進行位址變換,即逐條指令執行時完成位址轉換,需要重定位暫存器(記憶體管理單元,memory management unit)的支援,mmu儲存程序的首位址,計算實體地址時,由邏輯位址+首位址得出

資料結構由位圖支援,每個分配單元對應點陣圖中的一位,0表示空閒,1表示占用

由空閒區表和已分配區表共同管理,表中每一項記錄空閒或已分配區的起始位址、長度、標誌

首次適配:在空閒區表中從頭到尾找到第乙個滿足程序要求的空閒區

最佳適配:查詢整個空閒區表,找到能夠滿足程序要求的最小空閒區

最差適配:與最佳適配相反,找最大空閒區

當某一塊已分配的記憶體塊歸還後,前後空閒空間需合併,修改記憶體空閒區表

分四種情況:

其中的典型為linux的夥伴系統,主要思想將記憶體按2的冪進行劃分,組成若干空間塊鍊錶,分配時查詢該鍊錶能滿足程序需求的最佳匹配塊,查詢方式是二分法,如果申請的空間大小s滿足2^(u-1) < s <= 2^u,則分配整個塊,否則將塊劃分成兩個2^(u-1)的塊

**的時候如果歸還的記憶體塊旁邊有大小正好相等的記憶體塊,則合併成乙個空閒塊,依次向上遞迴

程序進入記憶體一片連續的區域有以下方案:

單一連續區:只有乙個程序在記憶體

固定分割槽:記憶體分為若干分割槽,每個分割槽大小可不同但固定不變,而且只能裝載乙個程序

可變分割槽:根據程序需要分割記憶體並分配,剩餘部分成為新的空閒區

程序進入記憶體中若干不連續的區域有以下方案:

使用者程序被劃分為大小相等的部分,稱為頁(page),從0開始編號;

物理記憶體按同樣的大小劃分,稱為頁框(page frame)。頁面尺寸通常為2^n,典型的有4k或4m大小

記憶體分配規則以頁為單位,按程序需要的頁數分配,邏輯上相鄰的頁,物理上不一定相鄰

假如系統是32位(位址由32位組成),頁面尺寸為4k(2^12),邏輯位址即為

程序位址空間和物理記憶體的轉換通過

頁表查詢的方式實現

物理記憶體用位圖管理

頁式儲存存在的問題:會造成最後一頁的部分空間浪費,即產生內碎片

與頁式儲存相似,只不過記憶體的劃分是不等長的,用空閒區表和已分配表管理記憶體分配

結合頁式和段式儲存,邏輯位址的資料結構如下

段表記錄了每一段的頁表起始位址和頁表長度;頁表記錄邏輯頁號與頁框號的對應關係

乙個程序只有乙個段表,乙個段表裡存放多個頁表的起始位址和長度

位址轉換的過稱為,邏輯位址先拿到段號,去段表查到段號所對應的頁表起始位址,再通過頁號查頁表所在的頁,然後把頁內位址加到頁的起始位址上得到真實的實體地址

作業系統原理之記憶體 一

在彙編指令中,我們有時會看到如下指令 text entry 入口 call 40 main 那麼這裡的40指向的是記憶體中的哪個位置呢?是記憶體的實際位址嗎?顯然,如果是實際位址的話我們的程式必須被裝載在記憶體0位址處,但這樣做肯定是存在問題的,一方面,如果這樣的話每個程式都要放到0位址處 另一方面...

作業系統原理之記憶體 一

在彙編指令中,我們有時會看到如下指令 text entry 入口 call 40 main 那麼這裡的40指向的是記憶體中的哪個位置呢?是記憶體的實際位址嗎?顯然,如果是實際位址的話我們的程式必須被裝載在記憶體0位址處,但這樣做肯定是存在問題的,一方面,如果這樣的話每個程式都要放到0位址處 另一方面...

作業系統讀書筆記

前言管程 訊號量體系有內容如下 整型訊號量 記錄型訊號量 and型訊號量 訊號量集。最容易搞混的就是整型訊號量和記錄型訊號量,理解之後很容易區分,記住一點 整型訊號量不遵循 讓權等待 的原則,只要待操作的訊號量s 0,就會處於一種 忙等待 的狀態,更嚴重的是,一旦事件發生,會導致一種稱之為 驚群現象...