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