操作系统存储管理之虚拟存储与分页式虚拟存储系统
虛擬存儲實(shí)現(xiàn)思路
在實(shí)際運(yùn)行過程,把有關(guān)作業(yè)的全部信息都裝入主存儲器后,作業(yè)執(zhí)行時(shí)實(shí)際上不是同時(shí)使用全部信息的,有些部分運(yùn)行一遍便再也不用,甚至有些部分在作業(yè)執(zhí)行的整個(gè)過程中都不會被使用到(如錯(cuò)誤處理部分)。進(jìn)程在運(yùn)行時(shí)不用的,或暫時(shí)不用的,或某種條件下才用的程序和數(shù)據(jù),全部駐留于內(nèi)存中是對寶貴的主存資源的一種浪費(fèi),大大降低了主存利用率。
于是,提出了這樣的問題:作業(yè)提交時(shí),先全部進(jìn)入輔助存儲器,作業(yè)投入運(yùn)行時(shí),能否不把作業(yè)的全部信息同時(shí)裝入主存儲器,而是將其中當(dāng)前使用部分先裝入主存儲器,其余暫時(shí)不用的部分先存放在作為主存擴(kuò)充的輔助存儲器中,待用到這些信息時(shí),再由系統(tǒng)自動把它們裝入到主存儲器中,這就是虛擬存儲器的基本思路。
虛擬存儲器定義
具有部分裝入和部分對換功能,能從邏輯上對內(nèi)存容量進(jìn)行大幅度擴(kuò)充,使用方便的一種存儲器系統(tǒng)。
虛擬存儲器是基于程序局部性原理上的一種假想的而不是物理存在的存儲器,允許用戶程序以邏輯地址來尋址,而不必考慮物理上可獲得的內(nèi)存大小,這種將物理空間和邏輯空間分開編址但又統(tǒng)一管理和使用的技術(shù)為用戶編程提供了極大方便。此時(shí),用戶作業(yè)空間稱虛擬地址空間,其中的地址稱虛地址
分頁式虛擬存儲系統(tǒng)
基本原理
分頁式虛擬存儲系統(tǒng)是將作業(yè)信息的副本存放在磁盤這一類輔助存儲器中,當(dāng)作業(yè)被調(diào)度投入運(yùn)行時(shí),并不把作業(yè)的程序和數(shù)據(jù)全部裝入主存,而僅僅裝入立即使用的那些頁面,至少要將作業(yè)的第一頁信息裝入主存,在執(zhí)行過程中訪問到不在主存的頁面時(shí),再把它們動態(tài)地裝入。用得較多的分頁式虛擬存儲管理是請頁式(demand Paging),當(dāng)需要執(zhí)行某條指令或使用某個(gè)數(shù)據(jù),而發(fā)現(xiàn)它們并不在主存時(shí),產(chǎn)生一個(gè)缺頁中斷,系統(tǒng)從輔存中把該指令或數(shù)據(jù)所在的頁面調(diào)入內(nèi)存。
請頁式虛擬存儲在執(zhí)行過程中,必然會發(fā)生某些頁面不在內(nèi)存中的情況,針對這種情況,處理方法是擴(kuò)充頁表的內(nèi)容,增加駐留標(biāo)志位和頁面輔存的地址等信息,擴(kuò)充后的頁表如下所示:
- 駐留標(biāo)志位(又稱中斷位)用來指出對應(yīng)頁是否已經(jīng)裝入主存,如果某頁所對應(yīng)欄的駐留標(biāo)志位為1,則表示該頁已經(jīng)在主存;若駐留標(biāo)志位為 0,此時(shí)產(chǎn)生一個(gè)缺頁中斷信號,可以根據(jù)輔存地址知道該頁在輔助存儲器中的位址,將這個(gè)頁面調(diào)入主存。
在作業(yè)執(zhí)行中訪問某頁時(shí),硬件的地址轉(zhuǎn)換機(jī)構(gòu)查頁表:
- 若該頁對應(yīng)駐留標(biāo)志為1,則按分頁實(shí)存管理給出的辦法進(jìn)行地址轉(zhuǎn)換,得到絕對地址。
- 若該頁駐留標(biāo)志為0,則由硬件發(fā)出一個(gè)缺頁中斷,表示該頁不在主存。操作系統(tǒng)必須處理這個(gè)缺頁中斷針對缺頁中斷的具體處理方法是先查看主存是否有空閑塊,若有則按該頁在輔助存儲器中的地址將這個(gè)頁面找出且裝入主存,在頁表中填上它占用的塊號且修改標(biāo)志位。若主存已沒有空閑塊,則必須先淘汰已在主存中的某一頁,再將所需的頁面裝入,對頁表和主存分配表作相應(yīng)的修改
- 為了提高系統(tǒng)效率,可在頁表中增加標(biāo)志位,其它標(biāo)志包括修改位(Modified )、引用 位( Renferenced )、禁止緩存位和訪問位,用來跟蹤頁的使用情況。當(dāng)一個(gè)頁被修改后,硬件自動設(shè)置修改位,一旦修改位被設(shè)置,當(dāng)該頁被調(diào)出主存時(shí)必須重新被寫回輔存;若一頁在執(zhí)行過程中沒有被修改過,那么不必重新寫回到存儲器中。引用位則在該頁被引用時(shí)設(shè)置,無論是讀或?qū)?#xff0c;它的值被用來幫助操作系統(tǒng)進(jìn)行頁面淘汰。禁止緩存位可以禁止該頁被緩存,這一特性對于那些正在與外設(shè)進(jìn)行數(shù)據(jù)交換的頁面時(shí)非常重要。訪問位則限定了該頁允許什么樣的訪問權(quán)限如可讀、可寫和可執(zhí)
頁面裝入策略
請頁式調(diào)度
請頁式調(diào)度是僅當(dāng)需要訪問程序和數(shù)據(jù)時(shí),才把所在頁面裝入主存。那么當(dāng)某個(gè)進(jìn)程第一次執(zhí)行時(shí),開始會有許多缺頁中斷,隨著越來越多的頁面裝入主存,根據(jù)局部性原理,大多數(shù)未來訪問的程序和數(shù)據(jù)都在最近被裝入主存的頁面中,一段時(shí)間之后,缺頁中斷就會下降到很低的水平,程序進(jìn)入相對平穩(wěn)階段。這種策略的主要缺點(diǎn)是處理缺頁中斷和調(diào)頁的系統(tǒng)開銷較大,由于每次僅調(diào)一頁 ,增加了磁盤 I/O 次數(shù)。
預(yù)調(diào)式調(diào)度
預(yù)調(diào)式調(diào)度由操作系統(tǒng)預(yù)測進(jìn)程將要使用的那些頁面,在使用入之前預(yù)先調(diào)入主存,每次調(diào)入若干個(gè)頁面,而不是像請頁式那樣僅調(diào)一個(gè)頁面。由于進(jìn)程的頁面大多數(shù)連續(xù)存放在輔存儲中器,一次調(diào)入多個(gè)頁面能減少磁盤I/O啟動次數(shù),節(jié)省了尋道和搜索時(shí)間。但是如果調(diào)入的一批頁面中多數(shù)未被使用,則效率就很低了,可見預(yù)調(diào)頁要建立在預(yù)測的基礎(chǔ)上,目前所用預(yù)調(diào)頁的成功率在 50%左右。
頁面清除策略
清除策略是與裝入策略相對的,它要考慮何時(shí)把一個(gè)修改過的頁面寫回輔存儲器。
請頁式清除
請頁式清除是僅當(dāng)一頁選中被替換,且之前它又被修改過,才把這個(gè)頁面寫回輔助存儲器
預(yù)清除
預(yù)清除方法對更改過的頁面,在需要之前就把它們都放回輔助存儲器,因此可以成批進(jìn)行。
頁面分配策略
分頁式虛擬存儲系統(tǒng)排除了主存儲器實(shí)際容量的約束,能使更多的作業(yè)同時(shí)多道運(yùn)行,從而提高了系統(tǒng)的效率,但缺頁中斷的處理要付出相當(dāng)?shù)拇鷥r(jià),由于頁面的調(diào)入、調(diào)出要增加I/O的負(fù)擔(dān)而且影響系統(tǒng)效率,因此應(yīng)盡可能的減少缺頁中斷的次數(shù)
在請頁式系統(tǒng)中,可采用兩種策略分配頁框給進(jìn)程:固定分配和可變分配
固定分配
如果進(jìn)程生命周期中,保持頁框數(shù)固定不變,稱頁面分配為固定分配;通常在進(jìn)程創(chuàng)建時(shí),根據(jù)進(jìn)程類型和程序員的要求決定頁框數(shù),只要有一個(gè)缺頁中斷產(chǎn)生,進(jìn)程就會有一頁被替換。
可變分配
如果進(jìn)程生命周期中,分得的頁框數(shù)可變,稱頁面分配為可變分配;當(dāng)進(jìn)程執(zhí)行的某一階段缺頁率較高,說明進(jìn)程程序目前的局部性較差,系統(tǒng)可多分些頁框以降低缺頁率,反之說明進(jìn)程程序目前的局部性較好,可以減少分給進(jìn)程的頁框數(shù)。
對比
固定分配策略缺少靈活性,而可變分配的性能會更好些,被許多操作系統(tǒng)所采用。采用可變分配策略的困難在于操作系統(tǒng)要經(jīng)常監(jiān)視活動進(jìn)程的行為和進(jìn)程缺頁中斷率的情況,這會增加操作系統(tǒng)的開銷。
頁面替換策略
實(shí)現(xiàn)虛擬存儲器能給用戶提供一個(gè)容量很大的存儲器,但當(dāng)主存空間已裝滿而又要裝入新頁時(shí),必須按一定的算法把已在主存的一些頁調(diào)出去,這個(gè)工作稱頁面替換
如果頁面替換算法的作用范圍是整個(gè)系統(tǒng),稱為全局頁面替換算法,它可以在可運(yùn)行進(jìn)程之間動態(tài)地分配頁框。如果頁面替換算法的作用范圍局限于本進(jìn)程,稱為局部頁面替換算法,它實(shí)際上需要為每個(gè)進(jìn)程分配固定的頁框。
淘汰算法
用來確定應(yīng)該淘汰哪頁的算法,稱淘汰算法。
算法的選擇是很重要的,選用了一個(gè)不適合的算法,就會出現(xiàn)這樣的現(xiàn)象:
剛被淘汰的頁面又立即要用,因而又要把它調(diào)入,而調(diào)入不久再被淘汰,淘汰不久再被調(diào)入。如此反復(fù) ,使得整個(gè)系統(tǒng)的頁面調(diào)度非常頻繁以至于大部時(shí)間都化在來回調(diào)度頁面上。這種現(xiàn)象叫做 “抖動”(Thrashing),又稱“顛簸”,一個(gè)好的調(diào)度算法應(yīng)減少和避免抖動現(xiàn)象。
缺頁中斷率
假定作業(yè) p 共計(jì)n頁,而系統(tǒng)分配給它的主存塊只有 m 塊(m,n均為正整數(shù),且1≤m≤n),即最多主存中只能容納該作業(yè)的m頁。如果作業(yè)p在運(yùn)行中成功的訪問次數(shù)為s(即所訪問的頁在主存中), 不成功的訪問次數(shù)為F(即缺頁中斷次數(shù)),則總的訪問次數(shù)A為:
A = S + F
又定義:
f = F / A
則稱 f 為缺頁中斷率。影響缺頁中斷率 f 的因素有:
1. 主存頁框數(shù)。作業(yè)分得的主存塊數(shù)多,則缺頁中斷率就低,反之,缺頁中斷率就高。
2. 頁面大小。如果劃分的頁面大,則缺頁中斷率就低,否則缺頁中斷率就高
3. 頁面替換算法。
4. 程序特性。程序編制的方法不同,對缺頁中斷的次數(shù)有很大影響,程序的局部性要好
頁面替換算法
一個(gè)理想的替換算法是:當(dāng)要調(diào)入一頁而必須淘汰一個(gè)舊頁時(shí),所淘汰的頁應(yīng)該是以后不再訪問的頁或距現(xiàn)在最長時(shí)間后再訪問的頁。這樣的調(diào)度算法使缺頁中斷率為最低。然而這樣的算法是無法實(shí)現(xiàn)的因?yàn)樵诔绦蜻\(yùn)行中無法對以后要使用的頁面作出精確的斷言。不過,這個(gè)理論上的算法可以用來作為衡量各種具體算法的標(biāo)準(zhǔn)。
下面介紹幾種實(shí)用的頁面調(diào)度算法:
隨機(jī)頁面替換算法
要淘汰的頁面是由一個(gè)隨機(jī)數(shù)產(chǎn)生程序所產(chǎn)生的隨機(jī)數(shù)來確定,選擇一個(gè)不常使用的頁面會使系統(tǒng)性能較好,但這種調(diào)度算法做不到這一點(diǎn),雖很簡單但效率卻低,一般不采用。
先進(jìn)先出頁面替換算法( FIFO )
先進(jìn)先出調(diào)度算法是一種低開銷的頁面替換算法,基于程序總是按線性順序來訪問物理空間這一假設(shè)。這種算法總是淘汰最先調(diào)入主存的那一頁,或者說在主存中駐留時(shí)間最長的那一頁(常駐的除外)
這種算法較易實(shí)現(xiàn),但效率不高,因?yàn)樵谥鞔嬷旭v留時(shí)間最長的頁面未必是最長時(shí)間以后才使用的
頁面。也就是說,如果某一個(gè)頁面要不斷地和經(jīng)常地被使用,采用FIFO算法,在一定的時(shí)間以后就會變成駐留時(shí)間最長的頁,這時(shí)若把它淘汰了,可能立即又要用,必須重新調(diào)入
最近最少用頁面替換算法( LRU,least Recently used )
最近最少用調(diào)度算法是一種通用的有效算法,被操作系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)和專用文件系統(tǒng)廣泛采用。該算法淘汰的頁面是在最近一段時(shí)間里較久未被訪問的那一頁。它是根據(jù)程序執(zhí)行時(shí)所具有的局部性來考慮的,即那些剛被使用過的頁面,可能馬上還要被使用,而那些在較長時(shí)間里未被使用的頁面,一般說可能不會馬上使用到。
第二次機(jī)會頁面替換算法
FIFO 算法可能會把經(jīng)常使用的頁面淘汰掉,可以對 FIFO 算法進(jìn)行改進(jìn),把FIFO算法與頁表中的”引用位”結(jié)合起來使用,算法可實(shí)現(xiàn)如下:
首先檢查FIFO中的隊(duì)首頁面(這是最早進(jìn)入主存的頁面),如果它的”引用位”是0,那么這個(gè)頁面既老又沒有用,選擇該頁面淘汰;如果它的”引用位”是 1,說明雖然它進(jìn)入主存較早,但最近仍在使用。于是把它的”引用位”清成0,并把這個(gè)頁面移到隊(duì)尾,把它看作是一個(gè)新調(diào)入的頁。這一算法稱為第二次機(jī)會(second chance)算法,其含義是最先進(jìn)入主存的頁面,如果最近還在被使用的話,仍然有機(jī)會作為像一個(gè)新調(diào)入頁面一樣留在主存中。
時(shí)鐘頁面替換算法 (Clock Policy)
如果利用標(biāo)準(zhǔn)隊(duì)列機(jī)制構(gòu)造FIFO隊(duì)列,第二次機(jī)會頁面調(diào)度算法將可能產(chǎn)生頻繁地出隊(duì)入隊(duì),實(shí)現(xiàn)代價(jià)較大。因此,往往采用循環(huán)隊(duì)列機(jī)制構(gòu)造頁面隊(duì)列,這樣就形成了一個(gè)類似于鐘表面的環(huán)形表,隊(duì)列指針則相當(dāng)于鐘表面上的表針,指向要淘汰的頁面,這就是時(shí)鐘頁面替換算法的得名
算法的實(shí)現(xiàn)要點(diǎn):
1. 一個(gè)頁面首次裝入主存時(shí),其”引用位”置 0。
2. 在主存中的任何一個(gè)頁面被訪問時(shí), 其”引用位”置 1。
3. 淘汰頁面時(shí),存儲管理從指針當(dāng)前指向的頁面開始掃描循環(huán)隊(duì)列,把所遷到的”引用位”是 1 的頁面的”引用位”清成 0,并跳過這個(gè)頁面; 把所遷到的”引用位”是0的頁面淘汰掉,指針推進(jìn)一步。
最不常用頁面替換算法(LFU :Least Erequently used )
如果對應(yīng)每一頁設(shè)置一個(gè)計(jì)數(shù)器,每當(dāng)訪問一頁時(shí),就使它對應(yīng)的計(jì)數(shù)器加1。過一定時(shí)間 t 后 ,將所有計(jì)數(shù)器全部清0。當(dāng)發(fā)生缺頁中斷時(shí),可選擇計(jì)數(shù)值最小的對應(yīng)頁面淘汰,顯然它是在最近一段時(shí)間里最不常用的頁面。這種算法實(shí)現(xiàn)不難,但代價(jià)太高而且選擇多大的 t 最適宜也是個(gè)難題。
下面是針對幾個(gè)頁面替換算法的效率對比圖:
寫時(shí)復(fù)制(copy-on-write)
寫時(shí)復(fù)制(copy-on-write)是存儲管理用來節(jié)省物理內(nèi)存(頁框)的一種頁面級優(yōu)化技術(shù),已被unix 和 Windows等許多操作系統(tǒng)所采用,它能減少主存頁面內(nèi)容的復(fù)制操作,減少相同內(nèi)容頁面在主存的副本數(shù)目。
當(dāng)兩個(gè)進(jìn)程(如父子進(jìn)程)共享一個(gè)頁面時(shí),并不是立即為每個(gè)進(jìn)程各建一個(gè)頁面副本,而是把該頁面定義為只讀方式,讓諸進(jìn)程共享。當(dāng)其中某個(gè)進(jìn)程要修改頁面內(nèi)容執(zhí)行寫操作時(shí),會產(chǎn)生一個(gè)”寫時(shí)復(fù)制”中斷,操作系統(tǒng)處理這個(gè)中斷信號,為該進(jìn)程分配一個(gè)空閑頁框,復(fù)制頁面的一個(gè)副本,且修改相應(yīng)的頁表項(xiàng),當(dāng)進(jìn)程重新執(zhí)行寫頁面操作時(shí)指令被順利執(zhí)行。
下圖是寫時(shí)復(fù)制前的示意圖
當(dāng)進(jìn)行寫時(shí)復(fù)制操作時(shí),示意圖如下所示:
可見操作系統(tǒng)采用寫時(shí)復(fù)制技術(shù)后,就可以延遲到修改時(shí)才對共享頁面做出副本,從而.節(jié)省了大量頁面復(fù)制操作和副本占用空間。
總結(jié)
以上是生活随笔為你收集整理的操作系统存储管理之虚拟存储与分页式虚拟存储系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电动汽车续航标准傻傻分不清楚?别再被车企
- 下一篇: gis与一般计算机应用系统有哪些异同,g