前一章所介紹的各種存儲器管理方式稱為傳統(tǒng)存儲器管理方式风瘦,有以下兩個特征:
1)一次性队魏。作業(yè)必須一次性全部裝入內(nèi)存后才能開始運行。
2)駐留性万搔。作業(yè)被裝入內(nèi)存后胡桨,就一直駐留在內(nèi)存中,其中任何部分都不會被換出瞬雹。即使有的進程被阻塞了昧谊,或有的模塊運行一次就不需要了。
但這兩個特征并不是程序運行時所必須的酗捌,因為有局部性原理呢诬,所以可以采用虛擬存儲器涌哲,應用程序在運行之前沒有必要將之全部裝入內(nèi)存,而僅須將哪些當前要運行的少數(shù)頁面或段先裝入內(nèi)存便可運行尚镰,其余部分暫留在盤上阀圾。程序在運行是,若它所要訪問的頁(段)已調(diào)入內(nèi)存狗唉,便可繼續(xù)執(zhí)行下去初烘;若要訪問的頁(段)尚未調(diào)入內(nèi)存(缺頁/缺段),便發(fā)出中斷請求敞曹。
虛擬存儲器:具有請求調(diào)入功能和置換功能账月,能從邏輯上對內(nèi)存容量加以擴充的一種存儲器系統(tǒng)综膀。
具有以下三個特征:1)多次性澳迫;2)對換性;3)虛擬性
虛擬性以多次性和對換性為基礎(chǔ)剧劝,多次形和對換性建立在離散分配的基礎(chǔ)上橄登。
請求分頁存儲管理方式
在分頁系統(tǒng)的基礎(chǔ)上增加了請求調(diào)頁功能和頁面置換功能。
請求分頁中的硬件支持
1.請求頁表機制
([頁號][物理塊號][狀態(tài)位P][訪問字段A][修改位M][外存地址])
狀態(tài)位P:用于指示該頁是否已調(diào)入內(nèi)存讥此,供程序訪問時參考拢锹。
訪問字段A:記錄本頁在一段時間內(nèi)被訪問次數(shù)或最近已有多長時間未被訪問。在置換程序中會作為是否被換出的參考萄喳。
修改位M:是否被修改過卒稳,決定被換出的時候要不要寫回到外存。
外存地址:通常是物理塊號(外存上的)
2.缺頁中斷機構(gòu)
缺頁中斷作為中斷同樣需要經(jīng)歷保護CPU現(xiàn)場他巨,分析中斷原因充坑,轉(zhuǎn)入缺頁中斷處理程序,處理完后恢復CPU現(xiàn)場等步驟染突。但與一般的中斷不同的是:
1)在指令執(zhí)行期間產(chǎn)生和處理中斷信號
2)一條指令在執(zhí)行期間可能會產(chǎn)生多次缺頁中斷
3.地址變換機構(gòu)
pic
快表 頁:內(nèi)存塊號
快表中沒有就去內(nèi)存中的頁表找 頁:內(nèi)存塊號
頁表中指示該頁不再內(nèi)存中 就根據(jù)外存地址(外存物理塊號)來調(diào)頁
然后要修改頁表(狀態(tài)位捻爷,物理塊號)
修改快表
請求分頁中的內(nèi)存分配
1.最小物理塊數(shù)的確定
為保證進程能正常運行,最小需要多少物理塊份企。若太少的話也榄,進程執(zhí)行中的缺頁率就會上升。
2.內(nèi)存分配策略
固定和可變分配策略司志。
全局和局部置換策略甜紫。
1)固定分配局部置換
固定分配:為每個進程分配一組固定數(shù)目的物理塊,在運行期間不再改變骂远。
局部置換:只能從分配給該進程的n個頁面中選出一頁換出囚霸,然后再調(diào)入一頁,以保證分配給該進程的內(nèi)存空間不變吧史。
2)可變分配全局置換
可變分配:先為每個進程分配一定數(shù)目的物理塊邮辽,在運行期間可根據(jù)情況適當增加或減少唠雕。
全局置換:缺頁時給它一個空閑塊,或者從所有進程的全部物理塊中挑一頁換出吨述。
3)可變分配局部置換
若進程在運行中頻繁發(fā)生缺頁中斷岩睁,則系統(tǒng)須再為該進程分配若干附加的物理塊,直至該進程的缺頁率減少到適當程度為止揣云。反之捕儒,若一個進程在運行過程中缺頁率特別低,則此時可適當減少分配給該進程的物理塊數(shù)邓夕,但不引起其缺頁率明顯增加刘莹。
3.物理塊分配算法
在采用固定分配策略時,如何將系統(tǒng)中可供分配的所有物理塊分配給各個進程焚刚。
1)平均分配算法
2)按比例分配算法
進程的頁面數(shù)/總頁面數(shù)*總塊數(shù)(取整并大于最小物理塊數(shù))
3)考慮優(yōu)先權(quán)的分配算法
把內(nèi)存中可供分配的所有物理塊分成兩部分:一部分按比例分配給各進程点弯;另一部分根據(jù)優(yōu)先權(quán)進行分配,為高優(yōu)先進程適當增加份額矿咕。
頁面調(diào)入策略
1.何時調(diào)入頁面
1)預調(diào)頁策略
預計在不久之后便會被訪問的頁面預先調(diào)入內(nèi)存抢肛,但這個預測的成功率不太高。
在采用工作集的系統(tǒng)中碳柱,每個進程都具有一張表捡絮,表中記錄有運行時的工作集,每當程序被調(diào)度運行時莲镣,將工作集中的所有頁調(diào)入內(nèi)存福稳。
2)請求調(diào)頁策略
發(fā)現(xiàn)要訪問的頁不在時才調(diào)。
每次僅調(diào)入一頁瑞侮,須花費較大的系統(tǒng)開銷的圆,增加了磁盤I/O的啟動頻率。
2.從何處調(diào)入頁面
外存被分為兩部分:存放文件的文件區(qū)区岗,存放對換頁面的對換區(qū)略板。
由于對換區(qū)采用連續(xù)分配方式,文件區(qū)采用離散分配方式慈缔,所以對換區(qū)的數(shù)據(jù)存取速度比對換區(qū)高叮称。
1)系統(tǒng)擁有足夠的對換空間。
在進程運行前將與該進程有關(guān)的文件從文件區(qū)拷貝到對換區(qū)藐鹤,然后全部從對換區(qū)調(diào)入所需頁面瓤檐。
2)系統(tǒng)缺少足夠的對換空間。
凡是不會被修改的文件娱节,都直接從文件區(qū)調(diào)入挠蛉,這樣換出的時候就不用寫回,下次還是從文件區(qū)調(diào)肄满。對于那些可能被修改的部分谴古,在將它們換出時便須調(diào)到對換區(qū)质涛,以后需要時從對換區(qū)調(diào)入。
3)UNIX方式
未運行過的頁面從文件區(qū)調(diào)掰担,曾經(jīng)運行過又被換出的頁面從對換區(qū)調(diào)汇陆。UNIX系統(tǒng)允許頁面共享,某進程所請求的頁面有可能已被其它進程調(diào)入內(nèi)存带饱,此時也無需從對換區(qū)調(diào)了毡代。
3.頁面調(diào)入過程
缺頁中斷-》保存CPU現(xiàn)場-》缺頁中斷程序-》從頁表找到外存上的物理塊-》若內(nèi)存能容納新頁(若內(nèi)存不夠則要置換出一頁并且要考慮是否需要寫回),啟動磁盤I/O勺疼,將所缺之頁調(diào)入內(nèi)存教寂,修改頁表-》修改塊表-》訪問內(nèi)存中的數(shù)據(jù)
整個過程對用戶是透明的
4.缺頁率
頁面訪問次數(shù)/(頁面訪問失敗次數(shù)+成功次數(shù))
缺頁率受以下因素影響
1)頁面大小。頁面劃分較大执庐,缺頁率較大酪耕。
2)進程所分配物理塊的數(shù)目越多缺頁率越低。
3)頁面置換算法耕肩。
4)程序固有特性因妇。局部化程度越高问潭,缺頁率越低猿诸。
缺頁中斷處理時間:
假設頁面被修改的概率為β,缺頁中斷處理時間為ta狡忙,沒被修改的話終端處理時間時tb
t=βta+(1-β)tb
woc剛才忘記保存了梳虽,哭了orz
頁面置換算法
不適當?shù)乃惴〞е露秳樱簞偙粨Q出的頁很快又要被使用
最佳置換算法
換出距離下一次訪問最久的頁
先進先出FIFO
把一個進程已調(diào)入內(nèi)存的頁面按先后次序鏈接成一個隊列,并設置一個指針灾茁,稱為替換指針窜觉,總是指向最老的頁面。
最近最久為使用LRU
距離上一次被訪問時間最久
硬件支持(寄存器和棧之一)
1)為內(nèi)存中的每個頁面配一個移位寄存器
訪問時把最高位置1北专,然后定時右移一位禀挫,將寄存器數(shù)看作整數(shù),數(shù)值最小的就是最久未訪問的
pic
2)棧
用一個棧保存當前使用的各頁面的頁面號拓颓,某頁面被訪問時把它從棧中移出放到棧頂语婴。置換棧底的頁。
最少使用LFU
移位寄存器驶睦,被訪問時最高位置一砰左,定時右移,ΣRi最小的就是最少被訪問的
訪問內(nèi)存的有效時間
1)頁在內(nèi)存场航,頁表項在快表
EAT=訪問快表的時間λ+訪問內(nèi)存的時間t
2)在內(nèi)存缠导,不再快表
EAT=λ+t+修改快表λ+t
3)不再內(nèi)存
EAT=λ+t+缺頁中斷處理β+λ+t(修改頁表的時間包含在中斷處理了)
綜合,假設命中率為a溉痢,缺頁率為f
EAT=λ+at+(1-a)[t+f(β+λ+t)+(1-f)(λ+t)]
若不考慮命中率僅考慮缺頁率僻造,λ=0憋他,a=0
請求分段存儲管理方式
在分段系統(tǒng)的基礎(chǔ)上增加了請求調(diào)段及分段置換功能。
([段名][段長][段基址][存取方式][訪問字段A][修改位M][存在位P][增補位][外存始址])
存取方式:段是邏輯單位髓削,所以可以根據(jù)信息的屬性對其加以保護举瑰。只執(zhí)行,只讀蔬螟,允許讀/寫
增補位:本段在運行過程中是否做過動態(tài)增長
缺頁中斷機構(gòu)
pic
地址變換機構(gòu)
pic
分段的共享
1.共享段表
pic
count:僅當count為0時此迅,系統(tǒng)才能回收內(nèi)存
不同的進程賦予不同的存取權(quán)限
段號:對于一個共享段,在不同的進程中可以用不同的段號去訪問它旧巾。
2.共享段的分配
在調(diào)用進程的段表中增加一項耸序,填寫共享段的物理地址;
在共享段的段表中增加一項鲁猩,填寫調(diào)用進程的信息,count+1
3.共享段的回收
撤銷調(diào)用進程段表中該段的表項廓握,count-1搅窿,若為0隙券,回收內(nèi)存,不為0娱仔,撤銷共享段表項中調(diào)用進程的記錄沐飘。
分段的保護
1.越界檢查
段號與段表長度的比較牲迫;段內(nèi)地址與段長的比較
2.存取控制檢查
3.環(huán)保護機構(gòu)
一個程序可以訪問駐留在相同環(huán)或較低特權(quán)環(huán)(外環(huán))中的數(shù)據(jù)
一個程序可以調(diào)用駐留在相同環(huán)或較高特權(quán)環(huán)(內(nèi)環(huán))中的服務