複習 作業系統 第三章 記憶體管理

2021-08-26 15:30:25 字數 4713 閱讀 6604

1. 記憶體管理概念→程式裝入和鏈結: a. 步驟 b. 靜/動態鏈結 c. 執行/裝入時動態鏈結

→邏輯位址空間和實體地址空間

→記憶體保護: a. 上下限暫存器 b. 重定位暫存器 & 基位址暫存器

2. 交換和覆蓋→ 交換 &覆蓋

3. 連續分配管理方式→ 單一連續分配  

& 固定分割槽分配

& 動態分割槽分配

4. 非連續分配管理方式→基本分頁儲存管理方式

&基本分段儲存管理方式

&段頁式管理方式

/*********************@@@@halo world分割線@@@@*********************/

1. 記憶體管理概念(memory managment)

- 為什麼要引入這個概念呢_(:3」∠ )_ 因為你太窮了,買不了好的機器,所以你只能在你的有限記憶體的機子上面折騰來折騰去。這樣你才有足夠的記憶體可以看蒼老師的島國動作片。(感覺這個比喻有點微妙(hmmm))沒關係,學好記憶體管理就相當於你改造了你的破破爛爛的出租屋!讓他變得very有逼格不僅看上去美觀而且分配的也非常巧妙。

- 好的吧,作業系統對記憶體的劃分和動態分配就是記憶體管理概念。

1.1 程式裝入和連線

- 建立程序後需要寫入程式和資料進如記憶體。

【源程式→可執行程式】的過程如下:

a. 編譯:由編譯程式把源**編譯成n個目標模組

b. 鏈結:有連線程式將編譯後的目標模組和庫函式連線在一起,在載入到乙個完整的模組裡。

//(這裡應該就是指你cpp檔案裡的include xx 這一塊?)

c. 裝入: 由裝入程式將裝入模組裝入記憶體執行。

1)靜態鏈結:執行前就已經把模組和庫函式打包在一起,之後是不進行拆開的。//相當於這裡是一次性搞定

2)裝入時動態鏈結:源程式變異後得到的目標模組,裝入記憶體後採用【邊裝邊連】。//這裡就是比較悠哉一點,你問我要庫函式我再去找~不然我就繼續裝東西。 

a. 絕對裝入

b. 可重定位裝入

:再多道程式壞境下,多個目標模組都是從0開始的,程式中的其他位址都是相對於這個其實位址的,此時就可以用可重定位裝入方式。即,將模組放到合適的位子,之後裝入對資料和指令的修改的過程就是可重定位。

1.2 邏輯位址空間和實體地址空間

1.3記憶體保護

- 記憶體分配前,需要保護作業系統不受使用者程序的影響。

2. 通過重定位暫存器和界位址暫存器:重定位暫存器含最小的實體地址,界位址暫存器含邏輯位址的最大值。每個邏輯位址都需要這兩個暫存器先核對,如果沒越界的話,在對映成實體地址。

//重定義暫存器是用來『加』的 →邏輯位址+重定位暫存器 = 實體地址

//界位址暫存器是用來『對比』的 →通過比較界位址的值和得到的實體地址來判斷有沒有越界

2. 覆蓋和交換

- 主要目的是為在多道程式環境中可以擴充記憶體的。

-覆蓋是在同乙個程式之間發生的,而交換是在不同程式之間發生的。

2.1 覆蓋:使用者空間可分固定區(放用的頻率高程式)和覆蓋區(即將要訪問的放這裡)。//**多的時候執行起來可能就不行了(

2.2 交換:把處於等待狀態的程式從記憶體裡移到輔存,這樣可以把記憶體空間空出來,

3. 連續分配管理方式

3.1 單一連續分配(分為使用者區和系統區)

- 系統區是給作業系統用的,通常是在低位址部分。

- 注意因為記憶體只有一道程式,所以他不會因為訪問越界而干擾其他的程式。

3.2 固定分割槽分配

- 最簡單的一種多道程式儲存管理方式。

- 他將使用者記憶體空間劃分成好多個固定大小的區域,然後來乙個作業填乙個坑。

//可分 【分割槽大小相等】 【分割槽大小不相等】

a. 內部碎片

- 主存利用率低,當程式小於固定分割槽時候,這樣會造成乙個空間的浪費。這個就是內部碎片。

3.3動態分割槽分配

- 不預先將內部劃分,而是在程序裝入記憶體的時候,根據大小動態分配。

- 但是這樣也導致了記憶體中會出現很多小記憶體塊,這種記憶體塊就叫『外部碎片』

//但是我們可以通過緊湊來改善這個情況: 就是作業系統不斷的對程序進行移動和調整。(但是這個也是需要動態重定位暫存器的支援,而且很耗時)

- 在程序裝入和換出主存的時候,我們可以考慮用以下演算法來搞!

a.  首次適應(first fit):空閒分割槽以位址遞增的次序連線。分配記憶體的時候順序查詢,找到可以滿足大小的就插入~(但是效率低,低位址容易滿,高位址容易空) //一般這個是最好的

b. 最佳適應(best fit):空閒的分割槽按照容量遞增形成分割槽鏈。 找到第乙個可以滿足要求的空間就可以~(但是會產生碎片)

c. 最壞適應(worst fit):空閒分割槽以容量遞減的次序連線。挑出最大的分割槽來用

作業道數

內部碎片

外部碎片

硬體支援

可用空間管理

解決碎片

空間不足

提高作業道數

單道連續分配1有

無界位址暫存器,越界檢查機構//

覆蓋交換

多道固定連續分配

≤n(使用者空間n塊)有無

1. 上下界暫存器

2. 基位址暫存器,長度暫存器,動態位址轉換機制//

多道可變分配/無

有1. 上下界暫存器

2. 基位址暫存器,長度暫存器,動態位址轉換機制

1. 陣列

2. 鍊錶緊湊

4. 非連續分配管理方式

4.1 基本分頁儲存管理方式

-把主存空間劃分大小相同的塊,塊相對來說比較小,作為主存的基本單元。每個程序原始以塊進行劃分,所以程序不夠用的時候,再去申請一下用塊就可以了

1) 基本概念

a. 頁面和頁面大小:程序中的塊叫『頁』(page);記憶體中的塊叫『頁框』 (page frame);外存中的是直接叫塊(block)

*頁面的大小是2的整數次冪

31 .... 12

11 ... 0

頁號p頁內偏移量w

c. 頁表:系統給每乙個程序建立了一張頁表,記錄頁表在記憶體中應對的物理塊號,頁表一般放在記憶體中。

*頁式管理中位址空間是唯一的

2) 基位址變換機構

i) 計算機頁號p (p = a邏輯位址 / l頁面大小 )和 頁內偏移量w (w = a % l)

ii) 比較頁號p和頁表長度m,若p ≥ m, 則產生越界,則發生中斷,else繼續。

iii) 頁表中頁號p對應的頁表項位址 = 頁表起始位址f x 頁號p x頁表項長度 (還頁表項內容b是物理塊)

iv) 計算 e = b x l + w,用得到實體地址e去訪問記憶體。

3) 快表

i) cpu給出邏輯位址後,硬體進行位址轉壞然後在把頁號給告訴緩衝暫存器,並且把頁號和快表裡的頁號作對比

ii)如果有匹配的頁號,說明頁表項在快表裡,則可以直接get該頁對應的頁框號和偏移量合體→實體地址

iii)如果沒找到,那需要訪問主存裡的頁表,在讀頁表項後,將其存入快表方便後面的訪問。如果快表滿了,則對舊的頁表做替代

4) 兩級頁表:  //這個我覺得我還不理解 = = 先mark一下,回頭來補充。

*為了方便查詢,頂級頁表最多只有乙個頁面。

4.2 基本分段儲存管理方式

1)分段

:短時管理方式按照使用者程序中的自然段劃分邏輯空間

2)段表:

和頁表一樣,是可以查詢每個段對應的記憶體區。

段號段長

本段在主存的起始位址

3)位址變換機構

i) 從邏輯位址a中get段號s,後面的都是偏移量w!(段式問題裡邏輯位址都是二進位制,而頁式裡都是十進位制)

ii) 比較段號s和段表長度m; if s >= m , 越界中斷;else 繼續執行

iii) 段表中段號s對應的段表位址 = 段表起始位址f + 段號s x 段表項長度; 取出該段表項前幾位的段長c, 

* if 段內偏移 >= c, 則 越界中斷;else 繼續

iv)取出段表項中起始位址b, 計算 e = b +  w

4.3 段頁式管理方式

- 在段頁式系統中,作業的位址空間被分成n段,每一段都有自己的段號,然後把每一段都分成固定大小的頁。對記憶體靠肩的管理和分頁管理是一樣的,(分成若干相同的塊,對記憶體的分配以塊為單位)

*在乙個程序中,段表只有乙個,頁表可以有好多個~

*進行一次訪問是需要三次訪主存的

段號s頁號p

頁內偏移量w

複習 作業系統 第三章 虛擬記憶體管理

1.虛擬記憶體的基本概念 傳統儲存管理方式 區域性性原理 虛擬儲存器的定義和特徵 虛擬記憶體技術的實現 2.請求分頁管理方式 頁表機制 缺頁中斷機構 位址變換機構 3.頁面置換演算法 最佳置換演算法 先進先出頁面置換演算法 最近最久未使用置換演算法 時鐘置換演算法 4.頁面分配策略 駐留集大小 調入...

作業系統複習 第三章 使用者介面

二 系統呼叫的定義與實現 使用者介面是使用者與計算機系統互動的環境和方式。為了方便使用者使用計算機系統,作業系統向使用者提供了直接使用計算機系統的手段,通常稱為使用者介面。使用者通過作業系統提供的介面與計算機系統互動,即使用者通過一定的方式和途徑,將自己的要求告訴計算機,而計算機根據使用者不同的要求...

作業系統第三章概要

處理機排程 多道程式環境下,動態的把處理機分配給就緒佇列中的乙個程序使之執行。提高處理機的利用率 改善系統效能,很大程度上取決於處理機排程的效能。作業進入系統駐留在外存的後備佇列上,再至調入記憶體執行完畢,可能要經歷下述 排程 高階排程又稱作業排程或長程排程 接納排程 中級排程又稱交換排程或中程排程...