OS- -请求分页系统、请求分段系统和请求段页式系统(一)
OS- -請(qǐng)求分頁(yè)系統(tǒng)、請(qǐng)求分段系統(tǒng)和請(qǐng)求段頁(yè)式系統(tǒng)(一)
文章目錄
- OS- -請(qǐng)求分頁(yè)系統(tǒng)、請(qǐng)求分段系統(tǒng)和請(qǐng)求段頁(yè)式系統(tǒng)(一)
- 一、內(nèi)存管理的概念
- 二、內(nèi)存空間的擴(kuò)充
- 覆蓋與交換
- 三、內(nèi)存空間的分配和回收
- 連續(xù)分配管理方式
- 非連續(xù)分配管理方式
- 四、基本分頁(yè)存儲(chǔ)管理
- 1.頁(yè)框和頁(yè)面
- 2.地址轉(zhuǎn)換的實(shí)現(xiàn)
- 頁(yè)號(hào)和頁(yè)內(nèi)偏移量
- 頁(yè)表
- 基本地址變換機(jī)構(gòu)
- 具有快表的地址變換機(jī)構(gòu)
- 兩級(jí)頁(yè)表
-
進(jìn)程應(yīng)該放在內(nèi)存的哪里?
-
操作系統(tǒng)如何記錄哪些內(nèi)存區(qū)域已經(jīng)被分配了, 哪些還空閑?
-
當(dāng)進(jìn)程運(yùn)行結(jié)束之后, 如何將進(jìn)程占用的內(nèi)存空間釋放?
一、內(nèi)存管理的概念
- 操作系統(tǒng)負(fù)責(zé)內(nèi)存空間的分配與回收
- 操作系統(tǒng)需要提供某種技術(shù)從邏輯上對(duì)內(nèi)存空間進(jìn)行擴(kuò)充
- 操作系統(tǒng)需要實(shí)現(xiàn)地址轉(zhuǎn)換功能, 負(fù)責(zé)程序的邏輯地址和物理地址的轉(zhuǎn)換
- 操作系統(tǒng)需要提供內(nèi)存保護(hù)功能, 保證各進(jìn)程在各自存儲(chǔ)空間內(nèi)運(yùn)行, 互不干擾
實(shí)現(xiàn)內(nèi)存保護(hù)的兩種方法:
- 在CPU設(shè)置一對(duì)上, 下限寄存器, 存放進(jìn)程的上, 下限地址. 進(jìn)程的指令要訪問(wèn)某個(gè)地址時(shí), CPU檢查是否越界
- 采用重定位寄存器(又叫基地址寄存器) 和界地址寄存器(又叫限長(zhǎng)寄存器) 進(jìn)行越界檢查. 重定位寄存器中存放的是進(jìn)程的起始物理地址, 界地址寄存器中存放的是進(jìn)程的最大邏輯地址.
二、內(nèi)存空間的擴(kuò)充
覆蓋與交換
- 覆蓋, 交換, 虛擬存儲(chǔ)技術(shù)常用于實(shí)現(xiàn)內(nèi)存空間的擴(kuò)充
😊覆蓋技術(shù)的思想 : 將程序分為多個(gè)段, 常用的段常駐內(nèi)存, 不常用的段在需要的時(shí)候調(diào)入內(nèi)存
-
內(nèi)存中分為一個(gè)"固定區(qū)" 和若干個(gè)"覆蓋區(qū)", 常用的段放在固定區(qū), 不常用的段放在覆蓋區(qū)
-
缺點(diǎn) : 必須由程序員聲明覆蓋結(jié)構(gòu), 對(duì)用戶不透明, 增加了用戶的編程負(fù)擔(dān), 覆蓋技術(shù)只用于早期的操作系統(tǒng)中.
-
😊交換技術(shù)的思想 : 內(nèi)存空間緊張時(shí), 系統(tǒng)將內(nèi)存中某些進(jìn)程暫時(shí)換出外存, 把外存中某些已具備運(yùn)行條件的進(jìn)程換入內(nèi)存(即進(jìn)程在內(nèi)存與磁盤間動(dòng)態(tài)調(diào)度)
三、內(nèi)存空間的分配和回收
連續(xù)分配管理方式
-
單一連續(xù)分配
-
在單一連續(xù)分配的方式中, 內(nèi)存被分為系統(tǒng)區(qū)和用戶區(qū), 系統(tǒng)區(qū)用于存放操作系統(tǒng)的相關(guān)數(shù)據(jù), 用戶區(qū)用于存放用戶進(jìn)程的相關(guān)數(shù)據(jù),內(nèi)存中只能有一道用戶程序, 用戶程序獨(dú)占整個(gè)用戶區(qū)空間.
-
優(yōu)點(diǎn) : 實(shí)現(xiàn)簡(jiǎn)單, 無(wú)外部碎片; 可以采用覆蓋技術(shù)擴(kuò)充內(nèi)存; 不一定需要采取內(nèi)存保護(hù)
-
缺點(diǎn) : 只能用于單用戶, 單任務(wù)的操作系統(tǒng)中; 有內(nèi)部碎片; 存儲(chǔ)器利用率極低
-
內(nèi)部碎片 : 分配給某進(jìn)程的內(nèi)存區(qū)域有一部分沒(méi)有用上, 即存在" 內(nèi)部碎片 ".
-
外部碎片 : 內(nèi)存中的某些空閑分區(qū)由于太小而難以利用
-
固定分區(qū)分配
-
在產(chǎn)生了支持多道程序的系統(tǒng)后, 為了能在內(nèi)存中裝入多道程序而互相之間不產(chǎn)生干擾,將整個(gè)用戶區(qū)劃分為若干個(gè)固定大小的分區(qū)(分區(qū)大小可以相等也可以不相等),在每個(gè)分區(qū)中只能裝入一道作業(yè),形成了最早的可運(yùn)行多道程序的內(nèi)存管理方式.
-
操作系統(tǒng)建立一個(gè)數(shù)據(jù)結(jié)構(gòu)----分區(qū)說(shuō)明表, 來(lái)實(shí)現(xiàn)各個(gè)分區(qū)的分配和回收, 每個(gè)表對(duì)應(yīng)一個(gè)分區(qū), 通常按分區(qū)大小排列. 每個(gè)表項(xiàng)包括對(duì)應(yīng)分區(qū)的大小, 起始地址, 狀態(tài)
-
優(yōu)點(diǎn) : 實(shí)現(xiàn)簡(jiǎn)單, 無(wú)外部碎片;
-
缺點(diǎn) : 有內(nèi)部碎片; 存儲(chǔ)器利用率不高;
-
動(dòng)態(tài)分區(qū)分配
-
動(dòng)態(tài)分區(qū)分配又稱為可變分區(qū)分配, 這種分配方式不會(huì)預(yù)先劃分內(nèi)存分區(qū). 而是在進(jìn)程裝入內(nèi)存時(shí)根據(jù)進(jìn)程大小動(dòng)態(tài)地建立分區(qū), 并使得分區(qū)的大小正好適合進(jìn)程的需要.
幾個(gè)問(wèn)題 :
- 系統(tǒng)用什么數(shù)據(jù)結(jié)構(gòu)記錄內(nèi)存的使用情況?
- 當(dāng)多個(gè)空閑分區(qū)都滿足需求應(yīng)該選擇哪個(gè)分區(qū)進(jìn)行分配?
- 如何進(jìn)行分區(qū)的分配和回收操作?
四種動(dòng)態(tài)分配的算法:
-
實(shí)現(xiàn) : 把空閑分區(qū)按地址遞增的次序排列.
-
每次分配內(nèi)存時(shí)順序地查找空閑分區(qū)鏈, 找到大小能滿足要求的第一個(gè)空閑分區(qū).
-
實(shí)現(xiàn) : 空閑分區(qū)按容量遞增次序鏈接.
-
每次分配內(nèi)存時(shí)順序查找空閑分區(qū)鏈, 找到大小能滿足要求的第一個(gè)空閑分區(qū)
-
缺點(diǎn) : 每次都選擇最小的分區(qū)進(jìn)行分配, 會(huì)留下越來(lái)越多的容量很小難以利用的內(nèi)存塊, 即產(chǎn)生很多的外部碎片
-
實(shí)現(xiàn) : 空閑分區(qū)按容量遞減次序鏈接
-
缺點(diǎn) : 每次都選用最大的分區(qū)進(jìn)行分配, 當(dāng)較大的連續(xù)空閑區(qū)被小號(hào)之后, 如果有大進(jìn)程到來(lái)則沒(méi)有內(nèi)存分區(qū)可以利用
- 缺點(diǎn) : 鄰近適應(yīng)算法導(dǎo)致無(wú)論低地址還是高地址的空閑分區(qū)都有相同的概率被使用, 也就導(dǎo)致了高地址部分的大分區(qū)更可能被使用劃分為小分區(qū), 最后導(dǎo)致沒(méi)有大分區(qū)可用
非連續(xù)分配管理方式
- 基本分頁(yè)存儲(chǔ)管理
- 基本分段存儲(chǔ)管理
- 段頁(yè)存儲(chǔ)管理
四、基本分頁(yè)存儲(chǔ)管理
1.頁(yè)框和頁(yè)面
- 思想 : 把內(nèi)存分為一個(gè)個(gè)相等的小分區(qū), 再按照分區(qū)大小把進(jìn)程拆分成一個(gè)個(gè)小部分.
- 注意區(qū)分頁(yè)框和頁(yè)面的概念, 頁(yè)框是針對(duì)內(nèi)存的, 頁(yè)面是針對(duì)進(jìn)程的
2.地址轉(zhuǎn)換的實(shí)現(xiàn)
- 特點(diǎn) : 頁(yè)面離散存放, 但是頁(yè)面內(nèi)部連續(xù)存放
- 訪問(wèn)邏輯地址A :
- 確定邏輯地址A的 " 頁(yè)號(hào) " P
- 找到P號(hào)頁(yè)面在內(nèi)存中的起始地址 ( 需要查找頁(yè)表 )
- 確定邏輯地址A的 " 頁(yè)內(nèi)偏移 " W
- 邏輯地址 A的物理地址 = P號(hào)頁(yè)面在內(nèi)存中的起始地址 + 頁(yè)內(nèi)偏移量W
頁(yè)號(hào)和頁(yè)內(nèi)偏移量
- 為了方便計(jì)算頁(yè)號(hào)和頁(yè)內(nèi)偏移量, 頁(yè)面大小一般設(shè)置為2的整數(shù)冪????
- 厲害了我的哥
頁(yè)表
- tips : 頁(yè)表中的頁(yè)號(hào)是"隱含"的, 可以不占用存儲(chǔ)空間
e.g:
-
假設(shè)某系統(tǒng)物理內(nèi)存大小為 4GB, 頁(yè)面大小為 4KB, 則 每個(gè)頁(yè)表項(xiàng)至少應(yīng)該為多少字節(jié)?
-
內(nèi)存塊大小=頁(yè)面大小=4KB= 212B
-
4GB 的內(nèi)存總共會(huì)被分為232212=220個(gè)內(nèi)存塊
-
內(nèi)存塊號(hào)的范圍應(yīng)該是 0 ~ 220?1
-
內(nèi)存塊號(hào)至少要用 20 bit 來(lái)表示
-
至少要用3B來(lái)表示塊號(hào)(3*8=24bit)
(但是, 為了方便頁(yè)表的查詢, 常常會(huì)讓一個(gè)頁(yè)表項(xiàng)占更多的字節(jié), 使得每個(gè)頁(yè)面恰好可以裝得下整數(shù)個(gè)頁(yè)表項(xiàng))
- 如何理解 “頁(yè)號(hào)是隱含的” :
基本地址變換機(jī)構(gòu)
-
步驟總結(jié) :
-
根據(jù)邏輯地址計(jì)算出頁(yè)號(hào)和頁(yè)內(nèi)偏移量
-
判斷頁(yè)號(hào)是否越界
-
查詢頁(yè)表, 找到頁(yè)號(hào)對(duì)應(yīng)的頁(yè)表項(xiàng), 確定頁(yè)面存放的內(nèi)存塊號(hào)
-
用內(nèi)存塊號(hào)和頁(yè)內(nèi)偏移量得到物理地址 ( 頁(yè)表長(zhǎng)度*物理塊號(hào) + 頁(yè)內(nèi)偏移 = 物理地址 ( 計(jì)算機(jī)直接采用拼接物理塊號(hào)和頁(yè)內(nèi)偏移的方式得到物理地址 ) )
-
訪問(wèn)目標(biāo)單元
😊( 一共需要訪問(wèn)兩次內(nèi)存 : 第一次用來(lái)查頁(yè)表, 第二次用于訪問(wèn)目標(biāo)內(nèi)存單元 )
具有快表的地址變換機(jī)構(gòu)
-
局部性原理
-
時(shí)間局部性
-
如果執(zhí)行了程序中的某條指令, 那么不久之后這條指令很有可能再次執(zhí)行; 如果某個(gè)數(shù)據(jù)被訪問(wèn)過(guò), 不久之后該數(shù)據(jù)很可能再次被訪問(wèn)
-
( 程序中存在大量的循環(huán) )
- 空間局部性
- 一旦程序訪問(wèn)了某個(gè)存儲(chǔ)單元, 在不久之后, 其附近的存儲(chǔ)單元也很有可能被訪問(wèn)到
( 很多數(shù)據(jù)在內(nèi)存中連續(xù)存放 )
- 快表(TLB)
- 快表又成為聯(lián)想寄存器(TLB), 是一種訪問(wèn)速度比內(nèi)存快很多的高速緩沖存儲(chǔ)器, 用來(lái)存放當(dāng)前訪問(wèn)的若干頁(yè)表項(xiàng), 以加速地址變換的過(guò)程. 與此對(duì)應(yīng)的, 內(nèi)存中的頁(yè)表常稱為慢表.
- 步驟總結(jié) :
- 快表與基本地址變換機(jī)構(gòu)的比較 :
tips : TLB 和 普通 Cache 的區(qū)別——TLB 中只有頁(yè)表項(xiàng)的副本, 而普通 Cache 中可能會(huì)有其他各種數(shù)據(jù)的副本
兩級(jí)頁(yè)表
- 單級(jí)頁(yè)表存在的問(wèn)題 :
1.由于頁(yè)號(hào)隱式表示, 所以要根據(jù)頁(yè)號(hào)查詢頁(yè)表需要 :
- K 號(hào)頁(yè)對(duì)應(yīng)的頁(yè)表項(xiàng)存放位置 = 頁(yè)表始址 + K * 4
- 要在所有的頁(yè)表項(xiàng)都連續(xù)存放的基礎(chǔ)上才能用這種方法找到頁(yè)表項(xiàng)
2.同時(shí), 由局部性原理可知, 很多時(shí)候, 進(jìn)程在一段時(shí)間內(nèi)只需要訪問(wèn)某幾個(gè)頁(yè)面就可以正常運(yùn)行了, 因此沒(méi)有必要讓整個(gè)頁(yè)表都常駐內(nèi)存
- 解決 : 把頁(yè)表再分頁(yè)并離散存儲(chǔ), 然后再建立一張頁(yè)表記錄頁(yè)表各個(gè)部分的存放位置, 稱為頁(yè)目錄表, 或稱外層頁(yè)表, 或稱頂層頁(yè)表.
-
關(guān)于頁(yè)表常駐內(nèi)存的解決 – ( 虛擬存儲(chǔ)技術(shù) ) , 在頁(yè)表項(xiàng)中增加一個(gè)標(biāo)志位, 用于表示該頁(yè)面是否已經(jīng)調(diào)入內(nèi)存
-
注意:
-
如果采用多級(jí)頁(yè)表機(jī)制, 各級(jí)頁(yè)表不能超過(guò)一個(gè)頁(yè)面
-
兩級(jí)頁(yè)表的訪存次數(shù)分析 :
-
n級(jí)頁(yè)表訪存次數(shù)為n+1次: ( 以2級(jí)頁(yè)表為例 )
-
訪問(wèn)內(nèi)存中的頁(yè)目錄表 ( 頂級(jí)頁(yè)表 )
-
訪問(wèn)內(nèi)存中的二級(jí)頁(yè)表 訪問(wèn)目標(biāo)內(nèi)存單元
總結(jié)
以上是生活随笔為你收集整理的OS- -请求分页系统、请求分段系统和请求段页式系统(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OS- -计算机硬件简介
- 下一篇: OS- -请求分页系统、请求分段系统和请