13 操作系统第三章 内存管理 虚拟内存 请求分页管理方式 页面置换算法 页面分配策略
文章目錄
- 1 虛擬內(nèi)存
- 1.1 傳統(tǒng)存儲(chǔ)管理方式的特征、缺點(diǎn)
- 1.2 局部性原理
- 1.3 虛擬內(nèi)存主要特征
- 1.4 如何實(shí)現(xiàn)虛擬內(nèi)存技術(shù)
- 1.5 虛擬內(nèi)存的基本概念小結(jié)
- 2 請(qǐng)求分頁(yè)管理方式
- 2.1 頁(yè)表機(jī)制
- 2.2 缺頁(yè)中斷機(jī)構(gòu)
- 2.3 地址變換機(jī)構(gòu)
- 2.4 請(qǐng)求分頁(yè)管理方式小結(jié)
- 3 頁(yè)面置換算法
- 3.1 最佳置換算法 OPT
- 3.2 先進(jìn)先出置換算法(FIFO)
- 3.3 最近最久未使用置換算法(LRU)
- 3.4 時(shí)鐘置換算法(CLOCK)
- 3.4.1 簡(jiǎn)單的CLOCK算法
- 3.4.2 改進(jìn)型的時(shí)鐘置換算法
- 3.5 頁(yè)面置換算法小結(jié)
- 4 頁(yè)面分配策略
- 4.1 頁(yè)面分配、置換策略
- 4.1.1 駐留集
- 4.1.2 分配、置換策略
- 4.2 何時(shí)調(diào)入頁(yè)面
- 4.3 從何處調(diào)入頁(yè)面
- 4.4 抖動(dòng)(顛簸)現(xiàn)象
- 4.5 頁(yè)面分配策略小結(jié)
1 虛擬內(nèi)存
在傳統(tǒng)存儲(chǔ)管理方式的基礎(chǔ)上引入了交換技術(shù)、覆蓋技術(shù),使得內(nèi)存利用率有所提升,并且能從邏輯上擴(kuò)充內(nèi)存容量。
1.1 傳統(tǒng)存儲(chǔ)管理方式的特征、缺點(diǎn)
可用虛擬存儲(chǔ)技術(shù)解決上述問(wèn)題
1.2 局部性原理
時(shí)間局部性:如果執(zhí)行了程序中的某條指令,那么不久后這條指令很有可能再次執(zhí)行;如果某個(gè)數(shù)據(jù)被訪問(wèn)過(guò),不久之后該數(shù)據(jù)很可能再次被訪問(wèn)。(因?yàn)槌绦蛑写嬖诖罅康难h(huán))
空間局部性:一旦程序訪問(wèn)了某個(gè)存儲(chǔ)單元,在不久之后,其附近的存儲(chǔ)單元也很有可能被訪問(wèn)。 (因?yàn)楹芏鄶?shù)據(jù)在內(nèi)存中都是連續(xù)存放的,并且程序的指令也是順序地在內(nèi)存中存放的)
如何應(yīng)用局部性原理?
高速緩沖技術(shù)的思想: 將近期會(huì)頻繁訪問(wèn)到的數(shù)據(jù)放到更高速的存儲(chǔ)器中,暫時(shí)用不到的數(shù) 據(jù)放在更低速存儲(chǔ)器中。
快表機(jī)制就是將近期常訪問(wèn)的頁(yè)表項(xiàng)副本放到更高速的聯(lián)想寄存器中
-
基于局部性原理,在程序裝入時(shí),可以將程序中很快會(huì)用到的部分裝入內(nèi)存,暫時(shí)用不到的部分留在外存, 就可以讓程序開(kāi)始執(zhí)行。
-
在程序執(zhí)行過(guò)程中,當(dāng)所訪問(wèn)的信息不在內(nèi)存時(shí),由操作系統(tǒng)負(fù)責(zé)將所需信息從外存調(diào)入內(nèi)存,然后繼續(xù) 執(zhí)行程序。
-
若內(nèi)存空間不夠,由操作系統(tǒng)負(fù)責(zé)將內(nèi)存中暫時(shí)用不到的信息換出到外存。 在操作系統(tǒng)的管理下,在用戶看來(lái)似乎有一個(gè)比實(shí)際內(nèi)存大得多的內(nèi)存,這就是虛擬內(nèi)存
-
操作系統(tǒng)虛擬性的一個(gè)體現(xiàn),實(shí)際的物理內(nèi)存大小沒(méi)有變,只是在邏輯上進(jìn)行了擴(kuò)充。
易混知識(shí)點(diǎn):
虛擬內(nèi)存的最大容量是由計(jì)算機(jī)的地址結(jié)構(gòu)(CPU尋址范圍)確定的
虛擬內(nèi)存的實(shí)際容量= min(內(nèi)存和外存容量之和,CPU尋址范圍)
Eg:某計(jì)算機(jī)地址結(jié)構(gòu)為32位,按字節(jié)編址,內(nèi)存大小為512MB,外存大小為2GB。 則虛擬內(nèi)存的最大容量為2 32B=4GB
虛擬內(nèi)存的實(shí)際容量=min(2 32B,512MB+2GB)=2GB+512MB
1.3 虛擬內(nèi)存主要特征
虛擬內(nèi)存有一下三個(gè)主要特征:
1.4 如何實(shí)現(xiàn)虛擬內(nèi)存技術(shù)
虛擬內(nèi)存技術(shù),允許一個(gè)作業(yè)分多次調(diào)入內(nèi)存。如果采用連續(xù)分配方式,會(huì)不方便實(shí)現(xiàn)。因此, 虛擬內(nèi)存的實(shí)現(xiàn)需要建立在離散分配的內(nèi)存管理方式基礎(chǔ)上。
主要區(qū)別:
在程序執(zhí)行過(guò)程中,當(dāng)所訪問(wèn)的信息不在內(nèi)存時(shí),由操作系統(tǒng)負(fù)責(zé)將所需信息從外存調(diào)入內(nèi)存,然后繼續(xù)執(zhí)行程序。 操作系統(tǒng)要提供請(qǐng)求調(diào)頁(yè)(或請(qǐng)求調(diào)段)功能
若內(nèi)存空間不夠,由操作系統(tǒng)負(fù)責(zé)將內(nèi)存中暫時(shí)用不到的信息換出到外存。操作系統(tǒng)要提供頁(yè)面置換(或段置換)的功能
1.5 虛擬內(nèi)存的基本概念小結(jié)
2 請(qǐng)求分頁(yè)管理方式
請(qǐng)求分頁(yè)存儲(chǔ)管理與基本分頁(yè)存儲(chǔ)管理的主要區(qū)別:
2.1 頁(yè)表機(jī)制
為此引入頁(yè)表機(jī)制描述頁(yè)面和內(nèi)存的情況
基本分頁(yè)存儲(chǔ)管理的頁(yè)表VS請(qǐng)求分頁(yè)存儲(chǔ)管理的頁(yè)表:
2.2 缺頁(yè)中斷機(jī)構(gòu)
缺頁(yè)中斷是因?yàn)楫?dāng)前執(zhí)行的指令想要訪問(wèn)的目標(biāo)頁(yè)面未調(diào)入內(nèi)存而產(chǎn)生的,因此屬于內(nèi)中斷。
一條指令在執(zhí)行期間,可能產(chǎn)生多次缺頁(yè)中斷。
(如:copy A to B,即將邏輯地址A中的數(shù)據(jù)復(fù)制到邏輯地址B,而A、B屬于不同的頁(yè)面,則有可能產(chǎn)生兩次中斷)
中斷回顧:
2.3 地址變換機(jī)構(gòu)
請(qǐng)求分頁(yè)存儲(chǔ)管理的地址變換機(jī)構(gòu)較基本分頁(yè)存儲(chǔ)管理的地址變換機(jī)構(gòu)的主要區(qū)別:
新增步驟1:請(qǐng)求調(diào)頁(yè)(查到頁(yè)表項(xiàng)時(shí)進(jìn)行判斷)
新增步驟2:頁(yè)面置換(需要調(diào)入頁(yè)面,但沒(méi)有空閑內(nèi)存塊時(shí)進(jìn)行)
新增步驟3:需要修改請(qǐng)求頁(yè)表中新增的表項(xiàng)
過(guò)程如下:
注意:
在具有快表機(jī)構(gòu)的請(qǐng)求分頁(yè)系統(tǒng)中,訪問(wèn)一個(gè)邏輯地址時(shí),若發(fā)生缺頁(yè),則地址變換步驟是: 查快表(未命中)——查慢表(發(fā)現(xiàn)未調(diào)入內(nèi)存)——調(diào)頁(yè)(調(diào)入的頁(yè)面對(duì)應(yīng)的表項(xiàng)會(huì)直接加入快表)——查快表(命中)——訪問(wèn)目標(biāo)內(nèi)存單元
補(bǔ)充細(xì)節(jié):
①只有“寫(xiě)指令”才需要修改 “修改位”。并且,一般來(lái)說(shuō)只需修改快表中的數(shù)據(jù),只有要將快表項(xiàng)刪除時(shí)才需要寫(xiě)回內(nèi)存中的慢表。這樣可以減少訪存次數(shù)。
②和普通的中斷處理一樣,缺頁(yè)中斷處理依然需要保留CPU現(xiàn)場(chǎng)。
③需要用某種“頁(yè)面置換算法” 來(lái)決定一個(gè)換出頁(yè)面。
④換入/換出頁(yè)面都需要啟動(dòng)慢速的I/O操作,可見(jiàn),如果換入/ 換出太頻繁,會(huì)有很大的開(kāi)銷。
⑤頁(yè)面調(diào)入內(nèi)存后,需要修改慢表,同時(shí)也需要將表項(xiàng)復(fù)制到快表中。
2.4 請(qǐng)求分頁(yè)管理方式小結(jié)
3 頁(yè)面置換算法
頁(yè)面的換入、換出需要磁盤(pán)I/0,會(huì)有較大的開(kāi)銷,因此好的頁(yè)面置換算法應(yīng)該追求更少的缺頁(yè)率
3.1 最佳置換算法 OPT
- 最佳置換算法(OPT,Optimal):每次選擇淘汰的頁(yè)面將是以后永不使用,或者在最長(zhǎng)時(shí)間內(nèi)不再被訪問(wèn)的頁(yè)面,這樣可以保證最低的缺頁(yè)率。
例:假設(shè)系統(tǒng)為某進(jìn)程分配了三個(gè)內(nèi)存塊,并考慮到有一下頁(yè)面號(hào)引用串(會(huì)依次訪問(wèn)這些頁(yè)面):7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
最佳置換算法可以保證最低的缺頁(yè)率,但實(shí)際上,只有在進(jìn)程執(zhí)行的過(guò)程中才能知道接下來(lái)會(huì)訪問(wèn)到的是哪個(gè)頁(yè)面。操作系統(tǒng)無(wú)法提前預(yù)判頁(yè)面訪問(wèn)序列。因此,最佳置換算法是無(wú)法實(shí)現(xiàn)的。
3.2 先進(jìn)先出置換算法(FIFO)
- 先進(jìn)先出置換算法(FIFO):每次選擇淘汰的頁(yè)面是最早進(jìn)入內(nèi)存的頁(yè)面
- 實(shí)現(xiàn)方法:把調(diào)入內(nèi)存的頁(yè)面根據(jù)調(diào)入的先后順序排成一個(gè)隊(duì)列,需要換出頁(yè)面時(shí)選擇隊(duì)頭頁(yè)面即可。
- 隊(duì)列的最大長(zhǎng)度取決于系統(tǒng)為進(jìn)程分配了多少個(gè)內(nèi)存塊。
例:假設(shè)系統(tǒng)為某進(jìn)程分配了三個(gè)內(nèi)存塊,并考慮到有以下頁(yè)面號(hào)引用串:
3,2,1,0,3,2,4,3,2,1,0,4
例:假設(shè)系統(tǒng)為某進(jìn)程分配了四個(gè)內(nèi)存塊,并考慮到有以下頁(yè)面號(hào)引用串:
3,2,1,0,3,2,4,3,2,1,0,4
Belady異常一一當(dāng)為進(jìn)程分配的物理塊數(shù)增大時(shí),缺頁(yè)次數(shù)不減反增的異常現(xiàn)象。
只有FIFO算法會(huì)產(chǎn)生Belady異常。另外,FIFO算法雖然實(shí)現(xiàn)簡(jiǎn)單,但是該算法與進(jìn)程實(shí)際運(yùn)行時(shí)的規(guī)律不適應(yīng),因?yàn)橄冗M(jìn)入的頁(yè)面也有可能最經(jīng)常被訪問(wèn)。因此,算法性能差
3.3 最近最久未使用置換算法(LRU)
- 最近最久未使用置換算法(LRU,least recently used):每次淘汰的頁(yè)面是最近最久未使用的頁(yè)面
- 實(shí)現(xiàn)方法:賦予每個(gè)頁(yè)面對(duì)應(yīng)的頁(yè)表項(xiàng)中,用訪問(wèn)字段記錄該頁(yè)面自上次被訪問(wèn)以來(lái)所經(jīng)歷的時(shí)間t。
當(dāng)需要淘汰一個(gè)頁(yè)面時(shí),選擇現(xiàn)有頁(yè)面中t值最大的,即最近最久未使用的頁(yè)面。
例:假設(shè)系統(tǒng)為某進(jìn)程分配了四個(gè)內(nèi)存塊,并考慮到有以下頁(yè)面號(hào)引用串:
1,8,1,7,8,2,7,2,1,8,3,8,2,1,3,1,7,1,3,7
在手動(dòng)做題時(shí),若需要淘汰頁(yè)面,可以逆向檢查此時(shí)在內(nèi)存中的幾個(gè)頁(yè)面號(hào)。在逆向掃描過(guò)程中最后一個(gè)出現(xiàn)的頁(yè)號(hào)就是要淘汰的頁(yè)面。
該算法的實(shí)現(xiàn)需要專門(mén)的硬件支持,雖然算法性能好,但是實(shí)現(xiàn)困難,開(kāi)銷大
3.4 時(shí)鐘置換算法(CLOCK)
- 最佳置換算法性能最好,但無(wú)法實(shí)現(xiàn);
- 先進(jìn)先出置換算法實(shí)現(xiàn)簡(jiǎn)單,但算法性能差;
- 最近最久未使用置換算法性能好,是最接近OPT算法性能的,但是實(shí)現(xiàn)起來(lái)需要專門(mén)的硬件支持,算法開(kāi)銷大。
時(shí)鐘置換算法是一種性能和開(kāi)銷較均衡的算法,又稱CLOCK算法,或最近未用算法(NRU,Not Recently Used)
3.4.1 簡(jiǎn)單的CLOCK算法
簡(jiǎn)單的CLOCK算法實(shí)現(xiàn)方法:為每個(gè)頁(yè)面設(shè)置一個(gè)訪問(wèn)位,再將內(nèi)存中的頁(yè)面都通過(guò)鏈接指針鏈接成一個(gè)循環(huán)隊(duì)列。當(dāng)某頁(yè)被訪問(wèn)時(shí),其訪問(wèn)位置為1。當(dāng)需要淘汰一個(gè)頁(yè)面時(shí),只需檢查頁(yè)的訪問(wèn)位。如果是0,就選擇該頁(yè)換出;如果是1,則將它置為0,暫不換出,繼續(xù)檢查下一個(gè)頁(yè)面,若第一輪掃描中所有頁(yè)面都是1,則將這些頁(yè)面的訪問(wèn)位依次置為0后,再進(jìn)行第二輪掃描(第二輪掃描中一定會(huì)有訪問(wèn)位為0的頁(yè)面,因此簡(jiǎn)單的CLOCK算法選擇一個(gè)淘汰頁(yè)面最多會(huì)經(jīng)過(guò)兩輪掃描)
3.4.2 改進(jìn)型的時(shí)鐘置換算法
- 簡(jiǎn)單的時(shí)鐘置換算法僅考慮到一個(gè)頁(yè)面最近是否被訪問(wèn)過(guò)。事實(shí)上,如果被淘汰的頁(yè)面沒(méi)有被修改過(guò),就不需要執(zhí)行I/0操作寫(xiě)回外存。只有被淘汰的頁(yè)面被修改過(guò)時(shí),才需要寫(xiě)回外存。
- 因此,除了考慮一個(gè)頁(yè)面最近有沒(méi)有被訪問(wèn)過(guò)之外,操作系統(tǒng)還應(yīng)考慮頁(yè)面有沒(méi)有被修改過(guò)。在其他條件都相同時(shí),應(yīng)優(yōu)先淘汰沒(méi)有修改過(guò)的頁(yè)面,避免I/0操作。這就是改進(jìn)型的時(shí)鐘置換算法的思想。
- 修改位=0,表示頁(yè)面沒(méi)有被修改過(guò);修改位=1,表示頁(yè)面被修改過(guò)。
- 為方便討論,用(訪問(wèn)位,修改位)的形式表示各頁(yè)面狀態(tài)。如(1,1)表示一個(gè)頁(yè)面近期被訪問(wèn)過(guò),且被修改過(guò)。
算法規(guī)則:將所有可能被置換的頁(yè)面排成一個(gè)循環(huán)隊(duì)列
由于第二輪已將所有幀的訪問(wèn)位設(shè)為0,因此經(jīng)過(guò)第三輪、第四輪掃描一定會(huì)有一個(gè)幀被選中,因此改進(jìn)型CLOCK置換算法選擇一個(gè)淘汰頁(yè)面最多會(huì)進(jìn)行四輪掃描
3.5 頁(yè)面置換算法小結(jié)
4 頁(yè)面分配策略
4.1 頁(yè)面分配、置換策略
4.1.1 駐留集
- 駐留集:指請(qǐng)求分頁(yè)存儲(chǔ)管理中給進(jìn)程分配的物理塊的集合。
- 在采用了虛擬存儲(chǔ)技術(shù)的系統(tǒng)中,駐留集大小一般小于進(jìn)程的總大小。
若駐留集太小,會(huì)導(dǎo)致缺頁(yè)頻繁,系統(tǒng)要花大量的時(shí)間來(lái)處理缺頁(yè),實(shí)際用于進(jìn)程推進(jìn)的時(shí)間很少;駐留集太大,又會(huì)導(dǎo)致多道程序并發(fā)度下降,資源利用率降低。所以應(yīng)該選擇一個(gè)合適的駐留集大小。
考慮一個(gè)極端情況,若某進(jìn)程共有100個(gè)頁(yè)面,則該進(jìn)程的駐留集大小為100時(shí)進(jìn)程可以全部放入內(nèi)存,運(yùn)行期間不可能再發(fā)生缺頁(yè)。若駐留集大小為1,則進(jìn)程運(yùn)行期間必定會(huì)極頻繁地缺頁(yè)。
注意:系統(tǒng)為某個(gè)進(jìn)程分配N個(gè)物理塊等價(jià)于某個(gè)進(jìn)程的駐留集大小為N
4.1.2 分配、置換策略
分配、置換策略搭配:
這種策略的缺點(diǎn)是:很難在剛開(kāi)始就確定應(yīng)為每個(gè)進(jìn)程分配多少個(gè)物理塊才算合理。(采用這種策略的系統(tǒng)可以根據(jù)進(jìn)程大小、優(yōu)先級(jí)、或是根據(jù)程序員給出的參數(shù)來(lái)確定為一個(gè)進(jìn)程分配的內(nèi)存塊數(shù))
采用這種策略時(shí),只要某進(jìn)程發(fā)生缺頁(yè),都將獲得新的物理塊,僅當(dāng)空閑物理塊用完時(shí),系統(tǒng)才選擇一個(gè)未鎖定的頁(yè)面調(diào)出。被選擇調(diào)出的頁(yè)可能是系統(tǒng)中任何一個(gè)進(jìn)程中的頁(yè),因此這個(gè)被選中的進(jìn)程擁有的物理塊會(huì)減少,缺頁(yè)率會(huì)增加。
鎖定:系統(tǒng)會(huì)鎖定一些頁(yè)面,這些頁(yè)面中的內(nèi)容不能置換出外存(如:重要的內(nèi)核數(shù)據(jù)可以設(shè)為“鎖定”)
可變分配全局置換:只要缺頁(yè)就給分配新物理塊
可變分配局部置換:要根據(jù)發(fā)生缺頁(yè)的頻率來(lái)動(dòng)態(tài)地增加或減少進(jìn)程的物理塊
4.2 何時(shí)調(diào)入頁(yè)面
4.3 從何處調(diào)入頁(yè)面
4.4 抖動(dòng)(顛簸)現(xiàn)象
剛剛換出的頁(yè)面馬上又要換入內(nèi)存,剛剛換入的頁(yè)面馬上又要換出外存,這種頻繁的頁(yè)面調(diào)度行為稱為抖動(dòng),或顛簸。
產(chǎn)生抖動(dòng)的主要原因是進(jìn)程頻繁訪問(wèn)的頁(yè)面數(shù)目高于可用的物理塊數(shù)(分配給進(jìn)程的物理塊不夠)
為進(jìn)程分配的物理塊太少,會(huì)使進(jìn)程發(fā)生抖動(dòng)現(xiàn)象。為進(jìn)程分配的物理塊太多,又會(huì)降低系統(tǒng)整體的并發(fā)度,降低某些資源的利用率
為了研究為應(yīng)該為每個(gè)進(jìn)程分配多少個(gè)物理塊,Denning提出了進(jìn)程 “工作集”的概念
駐留集VS 工作集
操作系統(tǒng)會(huì)根據(jù)“窗口尺寸”來(lái)算出工作集。
例: 某進(jìn)程的頁(yè)面訪問(wèn)序列如下,窗口尺寸為4,各時(shí)刻的工作集為?
工作集大小可能小于窗口尺寸,實(shí)際應(yīng)用中,操作系統(tǒng)可以統(tǒng)計(jì)進(jìn)程的工作集大小,根據(jù)工作集大小給進(jìn)程分配若干內(nèi)存塊。
如:窗口尺寸為5,經(jīng)過(guò)一段時(shí)間的監(jiān)測(cè)發(fā)現(xiàn)某進(jìn)程的工作集最大為3,那么 說(shuō)明該進(jìn)程有很好的局部性,可以給這個(gè)進(jìn)程分配3個(gè)以上的內(nèi)存塊即可滿足進(jìn)程的運(yùn)行需要。
一般來(lái)說(shuō),駐留集大小不能小于工作集大小,否則進(jìn)程運(yùn)行過(guò)程中將頻繁缺頁(yè)。
拓展:基于局部性原理可知,進(jìn)程在一段時(shí)間內(nèi)訪問(wèn)的頁(yè)面與不久之后會(huì)訪問(wèn)的頁(yè)面是有相關(guān)性的。 因此,可以根據(jù)進(jìn)程近期訪問(wèn)的頁(yè)面集合(工作集)來(lái)設(shè)計(jì)一種頁(yè)面置換算法——選擇一個(gè)不在工作集中的頁(yè)面進(jìn)行淘汰。
4.5 頁(yè)面分配策略小結(jié)
總結(jié)
以上是生活随笔為你收集整理的13 操作系统第三章 内存管理 虚拟内存 请求分页管理方式 页面置换算法 页面分配策略的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基于ARQ反馈的无人机通信中继自主选择研
- 下一篇: 18 操作系统第五章 设备管理 IO设