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