常規(guī)存儲器管理方式的特征
一次性:作業(yè)在運行前一次性地全部裝入內存
駐留性:作業(yè)裝入內存后,便一直駐留在內存中碧聪,直至作業(yè)運行結束。
程序執(zhí)行時局部性
在一較短的時間內
程序的執(zhí)行僅局限于某個部分渣聚;
相應地溅固,所訪問的存儲空間也局限于某個區(qū)域。
程序執(zhí)行的特點
多數情況下仍是順序執(zhí)行闲孤。
少部分的轉移和過程調用指令會使程序執(zhí)行由一部分區(qū)域轉至另一部分區(qū)域(但研究表明調用深度多數情況下不超過5)
許多由少數指令構成的循環(huán)結構會多次執(zhí)行耘婚。
對許多數據結構的處理(如數組)往往局限于很小的范圍內。
時間局部性
被引用過一次的存儲器位置很可能在不遠的將來再被多次引用资铡。
空間局部性
如果一個存儲器位置被引用了一次电禀,那么程序很可能在不遠的將來引用附近的一個存儲器位置。
程序運行前笤休,不需全部裝入內存(打破一次性)
僅裝入當前要運行的部分頁面或段即可運行,其余部分暫留在外存上症副。
缺頁/段的情況:要訪問的頁(段) 尚未調入內存店雅。程序應利用OS所提供的請求調頁(段)功能,將它們調入內存贞铣,使程序繼續(xù)執(zhí)行闹啦。
調入需要的頁/段時,如果內存已滿辕坝,無法再裝入新頁(段)窍奋,通過置換功能將內存中暫時不用的頁(段)調至外存,騰出足夠的內存空間。(不總駐留)
為了用小的內存實現在大的虛空間中程序的運行目的
基于局部性原理
虛擬存儲器管理——由操作系統提供一個比實際內存大的琳袄,假想的特大存儲器江场。
虛擬存儲管理
允許將一個作業(yè)分多次調入內存。
若采用連續(xù)分配方式窖逗,需申請足夠空間址否,再分多次裝入,造成內存資源浪費碎紊,并不能從邏輯上擴大內存容量佑附。
虛擬的實現建立在離散分配存儲管理基礎上
方式:請求分頁/請求分段系統
細節(jié):分頁/段機構、中斷機構仗考、地址變換機構音同、軟件支持
虛擬存儲器的特征
離散分配方式是基礎
多次性:一個作業(yè)被分成多次調入內存運行
對換性:允許在作業(yè)的運行過程中進行換進、換出秃嗜。(進程整體對換不算虛擬)
最終體現虛擬性:能夠從邏輯上擴充內存容量权均,使用戶所看到的內存容量遠大于實際內存容量。
請求分頁存儲管理方式
1.頁表基本功能不變:邏輯地址映射為物理地址
2.缺頁中斷機構
每當要訪問的頁面不在內存時痪寻,便產生一缺頁中斷通知OS螺句,OS則將所缺之頁調入內存。作為中斷橡类,需經歷幾個步驟:
“保護CPU環(huán)境”
“分析中斷原因”
“轉入缺頁中斷處理程序”
“恢復CPU環(huán)境”等蛇尚。
作為一種特殊中斷,與一般中斷有明顯區(qū)別:
(1) 在指令執(zhí)行期間產生和處理中斷信號顾画。
(2) 一條指令在執(zhí)行期間取劫,可能產生多次缺頁中斷
3.地址變換機構
分頁系統地址變換機構的基礎上增加
產生和處理缺頁中斷(請求調入)
從內存中換出一頁的功能(置換)
內存分配
作業(yè)不一次裝入,部分裝入的情況下如何為進程分配內存研侣,涉及三個問題:
最小物理塊數的確定
少于此數量進程將不能運行
與計算機的硬件結構有關谱邪,取決于指令的格式、功能和尋址方式
物理塊的分配策略
物理塊的分配算法
物理塊分配策略
固定分配庶诡、局部置換
為每個進程分配一定數目的物理塊惦银,在整個運行期間不再改變(基于進程的類型,或根據程序員末誓、程序管理員的建議)
運行中缺頁時扯俱,只能從該進程內存中n個頁面中選出一頁換出,然后再調入一頁喇澡。
困難:難以把握為每個進程分配“適量”物理塊數
可變分配迅栅、全局置換
先為每個進程分配一定數目的物理塊
OS管理一個空閑物理塊隊列,發(fā)生缺頁時晴玖,系統從隊列中取出一塊分配給該進程读存,將欲調入的頁裝入(動態(tài)增長型为流,全局空閑空間都可分配使用)
空閑空間不足時,可與其他任何進程頁面置換让簿【床欤“會使其他進程缺頁率提高,影響運行”
最易實現
物理塊分配算法
1.平均分配算法
2.按比例分配算法
3.考慮優(yōu)先權分配算法
頁面調度策略
1.預調頁策略
2.請求調頁策略
頁面置換算法
最佳置換算法
換出以后永不再用的拜英,或在最長(未來)時間內不再被訪問的頁面静汤。
優(yōu)點:保證獲得最低的缺頁率
不足:無法實現,因為無法預知一進程將來的運行情況
作用:作為參照標準居凶,評價其他算法虫给。
先進先出置換算法
先進入的先淘汰,即選擇內存中駐留時間最久的頁面予以淘汰侠碧。
優(yōu)點:實現簡單抹估,把一進程已調入內存的頁面按先后次序組織成一個隊列,并設置一個指針(替換指針)弄兜,使它總是指向隊首最老的頁面药蜻。
不足:與進程實際運行規(guī)律不相適應(較早調入的頁往往是經常被訪問的頁,頻繁被對換造成運行性能降低)
最久未使用置換算法
無法預測將來的使用情況替饿,只能利用“最近的過去”作為“最近的將來”的近似语泽,因此,LRU置換算法選擇最近最久未使用(least recently used)的頁面予以淘汰视卢。
寄存器記錄時間原理
一進程有8個頁面踱卵,每個頁面需配備一個8位的(移位)寄存器。
移位寄存器表示為
R=Rn-1Rn-2Rn-3…R2R1R0
頁面被訪問后的操作:
將該頁對應的寄存器的Rn-1位置為1
如何記時:
由系統發(fā)出定時信號据过,每隔一定時間將所有寄存器右移1位惋砂。
某一時刻,比較各寄存器的值绳锅,被用到的標志1逐漸往低位上積累西饵,若高位上沒有1,就說明最近沒用過鳞芙。所以最近最久未使用的就是寄存器值最小的那個頁眷柔。
棧記錄時間原理
某頁面被訪問,便將該頁面的頁面號從棧中移出原朝,將它壓入棧頂闯割。因此:棧頂始終是最新被訪問頁面的編號,越久未使用竿拆,頁面越被壓在棧底。
輪轉算發(fā)
LRU(最近最久未使用算法)近似算法
折衷FIFO
每個頁設一個使用標志位(use bit)宾尚,若該頁被訪問則將其置為1丙笋。
設置一個指針谢澈,從當前指針位置開始按地址先后檢查各頁,尋找use bit=0的頁面作為被置換頁御板。
若指針經過的頁use bit=1锥忿,修改use bit=0(暫不凋出,給被用過的頁面駐留的機會 )怠肋,指針繼續(xù)向下敬鬓。到所有頁面末尾后再返回隊首檢查。
頁面緩沖算法
對FIFO算法的發(fā)展笙各,彌補了FIFO可能造成的I/O開銷钉答,又不需要LRU等算法的硬件支持。
仍用FIFO算法選擇被置換頁
但并不將其馬上換入外存杈抢。
系統將頁面放入兩個鏈表之一:如果頁面未被修改数尿,就將其歸入到空閑頁面鏈表的末尾;否則將其歸入到已修改頁面鏈表惶楼。
需要調入新的物理頁面時右蹦,將新頁面內容讀入到空閑頁面鏈表的第一項所指的頁面,然后將第一項刪除(從空閑鏈表摘下)歼捐。
空閑頁面和已修改頁面何陆,仍停留在內存中一段時間,如果這些頁面被再次訪問豹储,只需較小開銷贷盲,而被訪問的頁面可以返還作為進程的內存頁。
當已修改頁面達到一定數目后颂翼,再將它們一起調出到外存晃洒,然后將它們歸入空閑頁面鏈表,這樣能大大減少I/O操作的次數朦乏。
抖動
系統抖動
為了提高處理機利用率球及,可增加多道程序并發(fā)度;
但進程數目增加過多呻疹,每個進程分配得到的物理塊太少吃引,在某個臨界點上,會出現剛被淘汰的頁很快又需重新調入刽锤;而調入不久又被淘汰出去镊尺;出現頻繁缺頁
大部分處理器時間都用在來回的頁面調度上,這種局面稱為系統抖動或顛簸(thrashing)
抖動的后果
缺頁率急劇增加
內存有效存取時間加長并思,
系統吞吐量驟減庐氮;系統已基本不能完成什么任務,而是忙于頁面對換操作宋彼,cpu雖然忙弄砍,但效率急劇下降仙畦。
根本原因
頁面淘汰算法不合理;分配給進程的物理頁面數(駐留集)太少音婶。
防止抖動方法
局部置換策略慨畸;
頁面調入內存前檢查各進程工作集,為缺頁率高的增加有限物理塊衣式;
L缺頁間的平均時間=S置換一個頁面所需時間寸士,可使磁盤和cpu達到最大利用率;
抖動發(fā)生時選擇暫停一些進程碴卧,調節(jié)多道程序度
缺頁率與物理塊數有關聯弱卡,基于程序局部性原理,若能預知程序在某段時間要訪問的頁面并全部調入他們螟深,將大大降低缺頁率谐宙。
駐留集
駐留(常駐)集是指在當前時刻,進程實際駐留在內存當中的頁面集合界弧。
工作集是進程在運行過程中固有的性質凡蜻,而駐留集取決于系統分配給進程的物理頁面數目,以及所采用的頁面置換算法垢箕;
如果一個進程的整個工作集都在內存當中划栓,即駐留集 ? 工作集,那么進程將很順利地運行条获,而不會造成太多的缺頁中斷(直到工作集發(fā)生劇烈變動忠荞,從而過渡到另一個狀態(tài));
當駐留集達到某個數目之后帅掘,再給它分配更多的物理頁面委煤,缺頁率也不會明顯下降。
請求分段管理方式
段表
缺頁中斷
發(fā)現運行進程所訪問段尚未調入內存
由缺段中斷機構產生一缺段中斷信號
進入OS修档,由缺段中斷處理程序將所需的段調入內存碧绞。
缺段中斷同樣在一條指令的執(zhí)行期間產生和處理中斷,一條指令執(zhí)行可能產生多次缺段中斷吱窝。但不會出現一條指令被分割在兩個分段中或一組信息被分割在兩個分段中的情況讥邻。
地址變換機構
基于分段系統地址變換機構的基礎
段調入內存
修改段表
再利用段表進行地址變換。
總之:就是增加了缺段中斷的請求及處理等功能
共線段如何分享與回收
共享段的分配
第一個請求使用該共享段的進程A:系統為該共享段分配一物理區(qū)院峡,再把共享段裝入該區(qū)兴使;
將該區(qū)的始址填入A的段表相應項;
共享段表中增加一表項照激,填寫有關數據发魄,count置1;
其他進程B也調用該共享段時俩垃,無需再為該段分配內存欠母,只需在B的段表中增加一表項欢策,填寫該共享段的物理地址;在共享段的段表中赏淌,填上調用進程的進程名、存取控制等啄清,再執(zhí)行count:=count+1操作六水。
共享段的回收
包括撤消在進程段表中共享段所對應的表項,執(zhí)行count:=count-1辣卒。
如果count為0掷贾,則由系統回收該共享段的物理內存,并取消共享段表中該段所對應的表項荣茫。
分段保護
越界檢查
段表寄存器存放了段表長度想帅;段表中存放了每個段的段長。
在進行存儲訪問時啡莉,將段號與段表長度比較港准,段內地址與段長比較。
存取控制檢查
尤其表現在不同進程對共享段的不同使用上咧欣。段表每個表項都設置“存取控制”字段浅缸,規(guī)定該段的訪問方式:只讀,只執(zhí)行魄咕,讀/寫
環(huán)保護機構
規(guī)定:低編號的環(huán)具有高優(yōu)先權
遵循的原則:一個程序可以訪問駐留在相同環(huán)或較低特權環(huán)中的數據衩椒。一個程序可以調用駐留在相同環(huán)或較高特權環(huán)中的服務