操做系統——頁式存儲管理

分區式存儲管理最大的缺點是碎片問題嚴重,內存利用率低。究其緣由,主要在於連續分配的限制,即它要求每一個做用在內存中必須佔一個連續的分區。算法

若是容許將一個進程分散地裝入到許多不相鄰的分區中,即可充分地利用內存,而無需再進行「緊湊」。編程

基於這一思想,產生了「非連續分配方式」,或者稱爲「離散分配方式」。數組

 

連續分配:爲用戶進程分配的必須是一個連續的內存空間。安全

非連續分配:爲用戶進程分配的能夠是一些分散的內存空間。數據結構

分頁存儲管理的思想:把內存分爲一個個相等的小分區,再按照分區大小把進程拆分紅一個個小部分。併發

分頁存儲管理分爲:實分頁存儲管理和虛分頁存儲管理

性能

1、實分頁式存儲管理

實分頁式存儲最大的優勢是內存利用率高,與目前流行的虛分頁存儲管理相比,具備實現簡單,程序運行快的優勢。目前,飛速發展的硬件製造技術使得物理內存愈來愈大,所以咱們認爲,實分頁式存儲管理將是一種最有發展前途的存儲管理方式。spa

一、基本原理

假設一個大型飯店,全部的客房都是標準的雙人間,部分客房已經住進客人,如今又有一個旅遊團要求入住。接待員統計了一下,對旅遊團領隊說:「貴團全體成員都能住下,兩人一個房間,可是不能住在同一樓層了,由於每層空着的客房不夠,更沒有幾個挨着的。請原諒!」。對於這樣的安排,通常人不會感到奇怪。由於旅遊團原本就是由一位位我的或夫妻等組成的,而飯店的客房原本也是兩人一間的,兩人一組正好可住在一個客房裏;另外,飯店幾乎天天都有入住的和退房的客人,想在同一樓層找幾間挨着的客房實在不容易。 操作系統

①將整個系統的內存空間劃分紅一系列大小相等的塊,每一塊稱爲一個物理塊物理頁實頁頁架頁幀(frame),可簡稱爲塊(block)。全部的塊按物理地址遞增順序連續編號爲0、一、二、……。
        這裏的塊至關於飯店的客房,系統對內存分塊至關於飯店把大樓全部的客房都設計成標準的雙人間。

②每一個做業的地址空間也劃分紅一系列與內存塊同樣大小的塊,每一塊稱爲一個邏輯頁虛頁,也有人叫頁面,可簡稱爲頁(page)。全部的頁按照邏輯地址遞增順序連續編號爲0、一、二、……。
           這裏,對做業地址空間分頁就至關於把旅遊團成員分紅兩人一組。 設計

 

③一個做業,只要它的總頁數不大於內存中的可用塊數,系統就能夠對它實施分配。系統裝入做業時,以頁爲單位分配內存,一頁分配一個塊,做業全部的頁所佔的塊能夠不連續。系統同時爲這個做業創建一個頁號與塊號的對照表,稱爲頁表。
        這就像飯店有個記錄客戶入住狀況的客戶登記表同樣。另外,飯店安排客戶入住是要查看所有客房的使用狀況一覽表,相應地系統給做業分配內存時要查看主存分配表或者內存塊說明表。‘


④每一個塊的大小是固定的,通常是個1/2KB~4KB之間的數值(請讀者思考:塊尺寸爲何太大或過小都很差),並且必須是個2的冪次。
         對塊尺寸這樣規定至關於飯店規定客房是雙人間。能夠設想一下,若是上例中飯店全部的客房都是十人間的話,效益確定不如全是雙人間的好

 

實模式下分頁存儲管理的基本原理:
操做系統以頁框爲單位爲各個進程分配內存空間。系統自動地將做業的地址空間分頁,將系統的主存空間分塊,頁與塊等大小,在做業運行時,一次性把做業的所有頁面裝入內存,各個頁所佔的內存塊能夠不連續,也沒必要按前後順序,能夠放到不相鄰的各個頁框中
這實際是個把做業從地址空間映射到存儲空間的過程

二、頁表

頁面的劃分徹底是一種系統硬件的行爲,一個邏輯地址放到這種地址結構中,天然就分紅了頁號和頁內單元號兩部分。

 

頁面大小爲:4KB

在分頁系統中,容許將做業(進程)的任一頁裝入到內存中的任一可用的物理塊中,但進程的地址空間原本是連續的,若把他分頁後裝入到不相鄰的物理塊中,要保證系統仍能正確運行,就要實現從進程的邏輯地址變換爲內存的物理地址

因此,系統爲每一個進程創建一張頁面映射表,簡稱頁表。

 

三、地址映射

在系統中設置地址變換機構,能將用戶進程地址空間中的邏輯地址變爲內存空間中的物理地址。
因爲頁面和物理塊的大小相等,頁內偏移地址和塊內偏移地址是相同的。無須進行從頁內地址到塊內地址的轉換。
地址變換機構的任務,關鍵是將邏輯地址中的頁號轉換爲內存中的物理塊號。物理塊號內的偏移地址就是頁內偏移地址。
頁表的做用就是從頁號到物理塊號的轉換,因此地址變換的任務藉助於頁表來完成的。

 

若是題目中是用十進制數表示邏輯地址,則:

例題1:有一系統採用頁式存儲管理,有一做業大小是8KB,頁大小爲2KB,依次裝入內存的第七、九、十、5塊,試將虛地址7145,3412轉換成內存地址。

 

虛地址 3412
    P=3412 % 2048=1

    W=3412 mod 2048=1364
    MA=9*2048+1364=19796
    虛地址3412的內存地址是19796
    

虛地址 7145
    P=7145 % 2048 =3
    W=7145 mod 2048 =1001
    MA=5*2048+1001=11241
    虛地址7145的內存地址是:11241

四、快表

由於頁表是存放在內存中的,CPU要存取一個數據,需訪問主存兩次
第一次:訪內存中的頁表,找到該頁的的物理塊號,將此塊號與頁內地址拼結造成物理地址;
第二次:真正訪問該物理地址,存取其中的內容。
這樣就把程序的執行速度下降一倍。
爲了提升存取速度,在地址變換機構中增設一組寄存器,用來存放訪問的那些頁表。

快表是一種訪存速度比內存快不少的高速緩衝器。
把存放在高速緩衝寄存器中的頁表叫快表,這個高速緩衝寄存器又叫聯想存貯器(TLB)。與此對應,內存中的頁表稱爲慢表。

當進程訪問一頁時,系統將頁號與快表中的全部項進行並行比較。若訪問的頁在快表中,便可當即進行地址轉換。
當被訪問的頁不在快表中時,去內存中查詢頁表,同時將頁表找到的內存塊號與虛頁號填入快表中

例題2:

快表命中率98%,訪問時間是10ns, 內存訪問時間是100ns, 平均訪問時間?
平均訪問時間=98%*(10+100)+(1-98%)*(10+100+100)

若快表命中

聯想寄存器檢索時間:10ns
訪問內存1次取數據時間:100ns
取數據總時間:110ns

若快表中未命中
聯想寄存器檢索時間:10ns
訪問內存1次檢索頁表時間:100ns
訪問內存1次取數據時間:100ns
取數據總時間:210ns

四、兩級和多級頁表

現代的大多數計算機系統,都支持很是大的邏輯地址空間(232~264)。頁表就變得很是大,要佔用至關大的內存空間。可採用兩個方法來解決這一問題:

① 採用離散分配方式來解決難以找到一塊連續的大內存空間的問題:

② 只將當前須要的部分頁表項調入內存,其他的頁表項仍駐留在磁盤上,須要時再調入。

 

 

二級頁表如何實現地址變換?

 

 

五、頁的分配與回收

用一張「位示圖」構成主存分配表。位示圖的每一位與一個主存塊對應,其值爲0,表示對應的主存塊空閒,其值爲1,表示對應的主存塊已分配。

位示圖優勢是佔用內存空間小,可常駐內存,加快分配進程,但缺點是不夠直觀。

 

內存分配過程:

計算一個做業所須要的總塊數N
查位示圖,看看是否還有N個空閒塊
若是有足夠的空閒塊,則頁表長度設爲N,可填入PCB中;申請頁表區,把頁表始址填入PCB
依次分配N個空閒塊,將塊號和頁號填入頁表
修改位示圖

六、存在的問題

爲每一個進程配置一張頁表,進程邏輯空間很是大,帶來的問題?

能夠引入Inverted page tables(反置頁表)
反置頁表 – 按物理塊號排序
 IBM RT; HP Spectrum…
反置頁表很大,使用Hash表加快檢索
全部在內存中的併發進程只有一張頁表
除了Hash表,聯想寄存器也被用來存放最近使用過的頁表項

 

七、分頁存儲管理方案的評價

優勢:
    較好地解決了碎片問題
    打破了存儲分配的連續性要求
    提升了主存的利用率

缺點
頁內碎片
動態地址變換、方案實施需耗用額外的系統資源
存儲擴充問題沒有解決——做業大小受到限制,可用塊數小於做業需求時需等待

2、虛擬存儲器(Virtual Memory)

一、局部性原理(principle of locality)

指程序在執行過程當中的一個較短時期,所執行的指令地址和指令的操做數地址,分別侷限於必定區域。還能夠表現爲:
時間局部性:一條指令的一次執行和下次執行,一個數據的一次訪問和下次訪問都集中在一個較短時期內;
空間局部性:當前指令和鄰近的幾條指令,當前訪問的數據和鄰近的數據都集中在一個較小區域內。

局部性原理的具體體現:
程序在執行時,大部分是順序執行的指令,少部分是轉移和過程調用指令。
過程調用的嵌套深度通常不超過5,所以執行的範圍不超過這組嵌套的過程。
程序中存在至關多的循環結構,它們由少許指令組成,而被屢次執行。
程序中存在至關多對必定數據結構的操做,如數組操做,每每侷限在較小範圍內。

二、引入虛擬存儲技術的好處

大程序:可在較小的可用內存中執行較大的用戶程序;
大的用戶空間:提供給用戶可用的虛擬內存空間一般大於物理內存(real memory)
併發:可在內存中容納更多程序併發執行;
易於開發:與覆蓋技術比較,沒必要影響編程時的程序結構

三、虛擬存儲技術的特徵

不連續性:物理內存分配的不連續,虛擬地址空間使用的不連續(數據段和棧段之間的空閒空間,共享段和動態連接庫佔用的空間)
部分交換:與交換技術相比較,虛擬存儲的調入和調出是對部分虛擬地址空間進行的;
大空間:經過物理內存和快速外存相結合,提供大範圍的虛擬地址空間

四、虛擬存儲技術的種類

虛擬頁式
虛擬段式
虛擬段頁式

3、虛擬頁式(virtual paging)存儲管理

一、基本原理

系統自動地將做業的地址空間分頁,將系統的主存空間分塊,頁與塊等大小,在做業運行前,只把初始須要的一部分頁面裝入內存塊裏,運行中須要訪問本身地址空間中的但當前不在內存的頁面時產生缺頁中斷,由缺頁中斷服務程序將所需的頁面調入內存,若此時內存中沒有空閒物理塊安置請求調入的新頁面,則系統按預約的置換策略自動選擇一個或一些在內存的頁面,把它們換出到外存。

虛擬頁式存儲管理實際是實分頁技術與虛擬存儲技術相結合的產物,其分頁思想與實分頁是同樣的。

這裏的請求調入置換功能都是比實分頁存儲管理增長的內容,是實現虛擬存儲的主要功能。

爲實現虛擬頁式存儲管理:
須要置換技術、請求裝入技術和大硬盤支持,另外:
頁表表目須要增長外存塊號、狀態位、訪問位或訪問字段、修改位、存取控制字段等。
外存塊號指出該頁在外存的地址,供調入該頁時用;
狀態位指示該頁是否在內存;
訪問位或訪問字段則是該頁被訪問過的標誌或被訪問過的次數;
修改位表示該頁是否被修改過;
存取控制字段則是用來限制頁面被安全共享的。


做業1在請求分頁系統中的存儲映像

 

當執行 「mov r1,[2120]」時
CPU產生的虛地址爲2120
分頁機構得 p=2,w=72(每頁1K)
查頁表。該頁中斷位i=1,發生缺頁中斷 

 

如主存中有空白塊,直接調入
如主存中無空白塊,則需淘汰該做業在主存中的一頁

 

二、主存頁面分配策略

在虛擬頁式存儲管理中,內存分配似實分頁方式,但還必須考慮解決下面兩個問題:
(1)是否對各進程採用平均分配策略?
(2)發生缺頁中斷時,如何爲所缺的頁面分配內存?

對問題(2)有一下幾種作法:

a、平均分配。

b、按進程長度比例分配。

c、按進程優先級分配。

d、按進程長度和優先級別分配。

對問題(2)主要有一下兩種作法:

a、固定分配局部置換。

b、可變分配全局置換。

三、頁面調入策略

(1)請求調入
當發生頁面故障時進行調度,即當進程訪問不在內存的頁面引起缺頁中斷時,由系統根據這種訪問請求把所缺頁面裝入內存。
優勢:由請求調入策略裝入的頁必定會被訪問,再加之比較容易實現,故在目前的虛擬存儲器中,大多采用此策略。
缺點:每次僅調入一頁,增長了磁盤I/O的啓動頻率。

( 2)預調入
=>也稱先行調度,即一頁面被訪問前就已經預先置入內存,以減小從此的缺頁率。
=>主要適於進程的許多頁存放在外存的連續區域中的狀況。有的系統結合請求調入使用,即每次缺頁時裝入多個頁面。
優勢:提升調頁的I/O效率。
缺點:基於預測,若調入的頁在之後不多被訪問,則效率低。經常使用於程序裝入時的調頁。

調入頁面的來源:

一般對外存交換區的I/O效率比文件區的高。
進程裝入時,將其所有頁面複製到交換區,之後老是從交換區調入。執行時調入速度快,要求交換區空間較大。
凡是未被修改的頁面,都直接從文件區讀入,而被置換時不需調出;已被修改的頁面,被置換時需調出到交換區,之後從交換區調入。

存儲分配的安全性考慮:
把一個頁面分配給進程以前,先要清除頁面中的數據(如所有填充爲0),以避免該進程讀取前一進程遺留在頁面中的數據;

 

四、頁面調度算法

由缺頁中斷服務程序將所需的頁面調入內存,若此時內存中沒有空閒物理塊安置請求調入的新頁面,則系統按預約的策略自動選擇一個(請求調入策略)或一些(預調入策略)在內存的頁面,把它們換出到外存。

a、什麼是淘汰策略(置換策略)?

 用來選擇淘汰哪一頁的規則就叫作置換策略,或稱淘汰算法。如何決定淘汰哪一頁?根據頁面在系統中的表現(如:使用的頻繁程度、進入系統時間的長短)

b、顛簸
顛簸(thrashing),又稱爲「抖動」。
簡單地說,致使系統效率急劇降低的主存和輔存之間的頻繁頁面置換現像稱爲「抖動」。
現象?淘汰的頁面剛好是不久又要訪問的頁面。

 

(1)最佳淘汰算法——OPT(Optimal)
這是Belady貝萊迪於1966年提出的一種理論上的算法。該算法每次都淘汰之後永不使用的,或者過最長的時間後纔會被訪問的頁面。
顯然,採用這種算法會保證最低的缺頁率,但它是沒法實現的,由於它必須知道頁面「未來」的訪問狀況。不過,該算法仍有必定意義,可做爲衡量其餘算法優劣的一個標準

假定系統爲某個進程分配了三個物理塊,進程的訪問順序爲7,0,1,2,0,3,0,4,2,3,0,3,2,1,2

採用OPT淘汰算法:

 

(2)先進先出淘汰算法——FIFO
這是最先出現的淘汰算法。
老是淘汰最早進入內存的頁面。它實現簡單,只需把進程中已調入內存的頁面,按前後次序鏈成一個隊列,並設置一個所謂的替換指針,使它老是指向內存中最老的頁面
缺點:效率不高,由於它與進程實際的運行規律不相適應,好比經常使用的全局變量所在的頁面或者循環體所在頁面均可能被它選爲淘汰對象。出現bleady現象。

頁面進入主存的前後次序:
2->4->5->1

 
當要調入第6頁時:
置換第2頁
將第2頁改成6
替換指針指向第4頁4->5->1->6

Belady現象:採用FIFO算法時,若是對一個進程未分配它所要求的所有頁面,有時就會出現分配的頁面數增多,缺頁率反而提升的異常現象。
Belady現象的描述:一個進程P要訪問M個頁,OS分配N個內存頁面給進程P;對一個訪問序列S,發生缺頁次數爲PE(S,N)。當N增大時,PE(S, N)時而增大,時而減少。
Belady現象的緣由:FIFO算法的置換特徵與進程訪問內存的動態特徵是很是不一致的,即被置換的頁面一般並非進程不會訪問的

採用FIFO淘汰算法:

 

 

(3) 最近最久未使用算法 (LRU, Least Recently Used)

根據頁面調入內存後的使用狀況,選擇內存中最久未使用的頁面被置換。這是局部性原理的合理近似,性能接近最佳算法。
OPT算法使用頁面將要被訪問的時間,LRU算法使用頁面最後一次被訪問的時間。兩者惟一的差異是:OPT是向前看的,而LRU是向後看的。
下面給出LRU的實現算法:
a、計時法:對於每一頁面增設一個訪問時間計時器,每當一個頁面被訪問時,當時的絕對時鐘內容被拷貝到對應的訪問時間計時器中,這樣系統記錄了內存中全部頁面最後一次被訪問的時間。淘汰時,選取訪問時間計時器的值最小的頁面。
b、堆棧法:每當進程訪問某頁面時,便將該頁面的頁號從棧中移出,將它壓入棧頂。棧頂始終是最新被訪問的頁面的編號。棧底則是最近最久未被使用的頁面的頁面號。
c、多位寄存器法
爲每頁設置一個R位的寄存器
每次訪問一頁時,將該頁所對應的寄存器最左位置1
每隔時間間隔T,全部寄存器右移一位。
選擇R值最小的頁淘汰。
例如,r寄存器共有四位,頁面P0、P一、P2在T一、T二、T3時刻的r寄存器內容以下:
     頁面                              時刻
                             T1            T2           T3      
     P0                 1000        0100        1010
     P1                 1000        1100        0110
     P2                 0000       1000         0100

給某做業分配了三塊主存,該做業依次訪問的頁號爲:4,3,0,4,1,1,2,3,2。當訪問這些頁時,頁面淘汰序列變化狀況以下

 

LRU的開銷是很大的,必須有硬件的支持,徹底由軟件實現其速度至少會減小10倍,所以LRU近似算法更實用些

(4)二次機會淘汰算法——SC(Second Chance)淘汰算法
這是一種LRU的近似算法,是經過對FIFO算法進行簡單改造,結合頁表中的訪問位而得來一種淘汰算法。
該算法首先檢查位於FIFO鏈鏈首的頁,若是它的訪問位爲0,則選擇該頁淘汰;若是它的訪問位爲1,則清除其訪問位,將它移至FIFO鏈的鏈尾,重複此算法的查找過程,直至遇到新鏈首頁是一個訪問位爲0的較早進入內存的頁爲止,把它選爲被淘汰的頁。

爲每個存儲塊(存儲分塊表)或頁面(頁表)設立一個引用位。
當訪問某頁時,就將該頁引用位置1
頁面管理軟件週期性地(設週期爲T)將全部引用位從新置0
在T內,被訪問過的頁面引用位爲1,不然爲0
選擇引用位爲0的頁面淘汰。

(5)時鐘(Clock)淘汰算法
二次機會淘汰算法缺點:就是須要把訪問位爲1的處於鏈首的頁移至鏈尾,這須要必定的開銷。
改進的方法:就是把進程所訪問的頁面鏈成一個環形鏈表,再設一個指針指向最老的頁面,因而造成了一種簡單實用的LRU近似算法——時鐘淘汰算法。
該算法首先檢測指針所指的頁面,若是它的訪問位爲0,則淘汰該頁,新裝入的頁插入到此位置,而後指針前進一個位置;若是它的訪問位爲1,則清除爲0,並將指針前進一個位置,繼續檢查訪問位。重複此過程,直到找到訪問位爲0的頁面爲止。

訪問頁號727
引起缺頁

 

 

 

 

(6)最近未用淘汰算法——NRU(Not Used Recently)淘汰算法
它把FIFO算法的思想與頁面的訪問位和修改位結合起來肯定一個接近LRU算法的淘汰對象。
該算法每次都儘可能選擇最近最久未被寫過的頁面淘汰,這種乾淨的頁面能夠不被寫回到磁盤。在實現時,爲每個頁面設置初始值0的訪問位和修改位。當對某頁面執行寫操做時,其修改位和訪問位均由硬件置成1;當對某頁面執行讀操做時,只有其訪問位被硬件置成1。系統每隔固定時間將全部訪問位都清0。

按照下列次序選擇被淘汰的頁面:
①訪問位=0,修改位=0;直接淘汰;
②訪問位=0,修改位=1;寫回外存後淘汰;
③訪問位=1,修改位=0;直接淘汰;
④訪問位=1,修改位=1;寫回外存後淘汰;

頁面請求序列爲:2,3,2,1,5,2,4,5,3,2,5,2
內存分配3塊
用OPT、LRU、FIFO、Clock算法寫出頁面置換過程

五、影響缺頁中斷率的因素  

(1)頁面調度算法不合理
抖動又叫顛簸,是指一段時間裏,頁面在內存與外存之間頻繁地調度或換入換出,以致於系統用於調度頁面所須要的時間比進程實際運行所佔用的時間還要多。
顯然,抖動是因爲缺頁中斷率很高而引發的一種壞現象,它將嚴重影響系統的效率,甚至可能使系統全面崩潰。
(2)分配給做業的內存塊數太少
做業的缺頁中斷率與做業所佔內存塊數成反比。分配給做業的內存塊數太少是致使抖動現象發生的最主要的緣由,實驗分析代表:對全部的程序來講,要使其有效地工做,它在內存中的頁面數不該少於它的總頁面數的一半。 (3)頁面大小的選擇不合理雖然缺頁中斷率與頁面尺寸成反比,但頁面尺寸卻不能一味地求大,它通常在0.5KB~4KB之間,是個實驗統計值。由於頁面大時,頁表較小,佔空間少,查錶速度快,缺頁中斷次數少,但頁面調度時間長,頁內碎片較大。頁面小時,偏偏相反。 (4)用戶程序編制的方法不合適 做業的缺頁中斷率與程序的局部化(包括時間局部化和空間局部化)程度成反比。用戶程序編制的方法不合適可能致使程序運行的時空複雜度高,缺頁次數多。

相關文章
相關標籤/搜索