八、操作系统——基本分页存储管理的基本概念(详解)
一、思考:連續分配方式的缺點?
考慮支持多道程序的兩種連續分配方式:
如果允許將一個進程分散地裝入到許多不相鄰的分區中,便可充分地利用內存,而無需再進行“緊湊”。基于這一思想,產生了“非連續分配方式”,或者稱為“離散分配方式”。
連續分配:為用戶進程分配的必須是一個連續的內存空間。
非連續分配:為用戶進程分配的可以是一些分散的內存空間。
二、把“固定分區分配”改造為“非連續分配版本”
假設進程A大小為23MB,但是每個分區大小只有10MB,如果進程只能占用一個分區,那顯然放不下。
解決思路:如果允許進程占用多個分區,那么可以把進程拆分成10MB+10MB+3MB三個部分,再把這三個部分分別放到三個分區中(這些分區不要求連續)。但是,進程A的最后一個部分是3MB,放入分區后會產生7MB的內部碎片。
如果每個分區大小為2MB,那么進程A可以拆分成11*2MB+1MB共12個部分,只有最后一部分1MB占不滿分區,會產生1MB的內部碎片。
顯然,如果把分區大小設置的更小一些,內部碎片會更小,內存利用率會更高。
基本分頁存儲管理的思想——把內存分為一個個相等的小分區,再按照分區大小把進程拆分成一個個小部分
三、分頁存儲管理的基本概念
將內存空間分為一個個大小相等的分區(比如:每個分區4KB),每個分區就是一個“頁框”,或稱“頁幀”、“內存塊”、“物理塊”。每個頁框有一個編號,即“頁框號”(或者“內存塊號”、“頁幀號”、“物理塊號”)頁框號從0開始。
將用戶進程的地址空間也分為與頁框大小相等的一個個區域,稱為“頁”或“頁面”。每個頁面也有一個編號,即“頁號”,頁號也是從0開始。
(注:進程的最后一個頁面可能沒有一個頁框那么大。因此,頁框不能太大,否則可能產生過大的內部碎片)
操作系統以頁框為單位為各個進程分配內存空間。進程的每個頁面分別放入一個頁框中。也就是說,進程的頁面與內存的頁框有一一對應的關系。各個頁面不必連續存放,也不必按先后順序來,可以放到不相鄰的各個頁框中。
四、思考:如何實現地址的轉換?
將進程地址空間分頁之后,操作系統該如何實現邏輯地址到物理地址的轉換?
先回顧一下,進程在內存中連續存放時,操作系統是如何實現邏輯地址到物理地址的轉換的?(采取動態重定位的方法)
五、如果采用分頁技術,應該如何實現地址轉換?
CPU執行指令1,需要訪問邏輯地址為80的內存單元,如何轉化為物理地址?
邏輯地址為80的內存單元:
應該在1號頁,該頁在內存中的起始位置為450,邏輯地址為80的內存單元相對于該頁的起始地址而言,“偏移量”應該是30。
所以,實際物理地址=450+30=480
如何計算:
頁號=邏輯地址/頁面長度(取除法的整數部分)
頁內偏移量=邏輯地址%頁面長度(取除法的余數部分)
頁面在內存中的起始位置:操作系統需要用某種數據結構記錄進程各個頁面的起始位置。
頁號=80/50=1
頁內偏移量=80%50=30
1號頁在內存中存放的起始位置450
注意:為了方便計算頁號、頁內偏移量,頁面大小一般設為2的整數冪
結論:如果每個頁面大小為2^K B,用二進制數表示邏輯地址,則末尾K位即為頁內偏移量,其余部分就是頁號
因此,如果讓每個頁面的大小為2的整數冪,計算機就可以很方便地得出一個邏輯地址對應的頁號和頁內偏移量。
六、邏輯地址結構
分頁存儲管理的邏輯地址結構如下所示:
地址結構包含兩個部分:前一部分為頁號,后一部分為頁內偏移量W。在上圖所示的例子中,地址長度為32位,其中0-11位為“頁內偏移量”,或稱“頁內地址”;12-31位為“頁號”。
如果有K位表示“頁內偏移量”,則說明該系統中一個頁面的大小是2^K個內存單元
如果有M位表示“頁號”,則說明在該系統中,一個進程最多允許有2^M個頁面
分頁存儲管理中,如何實現地址轉換?
注:如果題目中是用十進制數表示邏輯地址,則頁號=邏輯地址/頁面長度(取除法的整數部分)頁內偏移量=邏輯地址%頁面長度(取除法的余數部分)
七、頁表
為了能知道進程的每個頁面在內存中存放的位置,操作系統要為每個進程建立一張頁表。
為什么每個頁表項的長度是相同的,頁號是“隱含”的?
Eg:假設某系統物理內存大小為4GB,頁面大小為4KB,則每個頁表項至少應該為多少字節?
4GB=2^32B,
4KB=2^12B
因此4GB的內存總共會被分為2^32 / 2^12= 220個內存塊**,因此內存塊號的范圍應該是0~220-1因此至少要20個二進制位才能表示這么多的內存塊號,因此至少要3個字節才夠(每個字節8個二進制位,3個字節共24個二進制位)
各頁表項會按順序連續地存放在內存中。如果該頁表在內存中存放的起始地址為x,則M號頁對應的頁表項一定是存放在內存地址為 X+3*M。因此,頁表中的“頁號”可以是“隱含”的。
只需要知道頁表存放的起始地址和頁表項長度**,即可找到各個頁號對應的頁表項存放的位置。在本例中,一個頁表項占3B,如果進程由n個頁面,則該進程的頁表總共會占3*n個字節。
八、總結
總結
以上是生活随笔為你收集整理的八、操作系统——基本分页存储管理的基本概念(详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react-router的使用(二)——
- 下一篇: 64位处理器_电脑操作系统的32位和64