25、非連續配置設定管理方式
(1)基本分頁存儲管理方式
在分區存儲管理中,要把作業放在一個連續的存儲區中,因而會産生碎片問題(外部碎片)。盡管通過拼接方式可以解決碎片問題,但代價較高。如果允許将一個作業存放到許多不相鄰接的分區中,那麼就可以避免拼接,,進而有效解決外部碎片問題。基于這一思想引入了分頁存儲管理(或稱頁式存儲管理)技術
1)分頁管理
在分頁存儲管理中,使用者作業的位址空間被劃分稱若幹個大小相等的區域,稱為頁或頁面。相應地,将主存的存儲空間也分成與頁面大小相等的區域,稱為塊或實體塊。在為作業配置設定存儲空間時,總是以塊為機關來配置設定,可以将作業中的任意一頁放入主存的任意一塊中。
在排程作業運作時,必須将他的所有頁面一次調入主存,若選擇的頁面較小,可使頁内碎片較小并減少記憶體碎片的總空間,有利于提高記憶體使用率;但也會使每個程序要求較多的頁面,進而導緻頁表過長,占用較多記憶體,還會降低頁面換進換出的效率。若選擇的頁面較大,雖然可以減少頁表長度,提高頁面換進換出的效率,但又使頁内碎片增大
是以,頁面的大俠應選擇适中,通常為2的整數幂,友善位址變換,一般為512B~4KB之間
2)頁表
為了将邏輯位址上連續的頁号映射到實體記憶體中後稱為離散分布的多個實體塊,需要将每個頁面和每個實體塊一一對應,這種映射關系就展現在頁表上。頁表中每個頁表項都由頁号和塊号組成,根據頁表項就可以找到每個也好所對應實體記憶體中實體塊的塊号。頁表通常存放在記憶體中
3)基本位址變換機構
整個變換過程都是由硬體自動完成的
4)具有快表的位址變換機構
若頁表全部放在主存中,則存取一個資料或一條指令至少要通路兩次主存,一次是通路頁表,确定所存取的資料或指令的實體位址,第二次才根據所得到的實體位址存取資料或指令。顯然,這種方法比通常執行指令的速度慢了一半
為了提高位址變換的速度,可以在位址變換機構中增設一個具有并行查找能力的高度緩沖存儲器(又稱聯想存儲器的快表),部分頁表項放在這個高速緩沖存儲器中。快表(TLB)一般是由半導體存儲器實作的,其工作周期與CPU的周期大緻相同,但造價較高。為了降低成本,通常是在快表中存放正在運作作業目前通路的那些頁表項,頁表的其餘部分仍然存放在記憶體中
增加快表後位址變換過程為:
a)根據邏輯位址得出頁号與頁内位移
b)先将頁号與快表中的所有頁号進行對比,如果有比對的頁号,則直接讀出對應的塊号,與頁内位移拼接得到實體位址,若沒有比對的頁号,則還需要通路記憶體中的頁表,從頁表中取出實體塊号,與頁内位移拼接得到實體位址,并将此次的頁表項存入快表中
c)用得到的實體位址通路記憶體
由于快表是寄存器,是以存儲空間有限,往往放不了幾個頁表單元,是以在快表中不一定總能找到所需的頁号對應的塊号。每次查找頁表之前都先查找快表,如果找到所需的頁号,就直接讀出塊号,然後隻需通路記憶體一次:如果沒有找到所需的頁号,那麼隻能再從頁表中找塊号,這樣就需要通路記憶體兩次,而且比沒有快表時增加了通路快表所需的時間。是以要盡量保證快表中放常用的頁号和對應的塊号,這樣才能真正的做到減少通路時間
5)兩級頁表和多級頁表
a)頁表大小計算 在基礎分頁系統中,頁表長度M是由頁号的位數決定的,而頁表的大小可以了解為一個矩形的面積,這個矩形的長度就是頁表的長度M,寬度是每個頁表項的大小,及塊号的位數。關于頁表的計算通常第一步就是分析位址結構
b)兩級頁表 從頁表的大小計算公式可知,頁表的大小和頁表長度成正比,而頁表長度又随着頁号的位數的增長而呈指數式增長。是以,如果系統的邏輯位址的位數較多,頁表會非常大,而整張頁表都需要連續的存放在記憶體中,這是件很困難的事。本來記憶體就不大,而且還要找個連續的空間來存放,于是就有了兩級頁表來解決這個難題
而兩層頁表機制下,無論是外層頁号位數還是外層頁内位址的位數都比一級頁表機制少了很多,這樣頁表的長度就可以減少很多,相應的頁表的大小也大大減小了
c)多級頁表 對于32位機器(邏輯位址的位數是32位),采用兩級頁表結構是合适的,但對于64位的系統,兩級頁表機構會使頁表的大小變得不可接受,是以可以通過繼續增加頁表的級數來減小頁表的大小,不過會使頁表的數量大大增加,多級頁表最主要的缺點是要多次通路記憶體
6)頁的共享和保護
在多道程式系統中,資料的共享是很重要的,在分頁存儲管理系統中,實作共享的方法是使共享使用者位址空間中的頁指向相同的實體塊
在分頁存儲管理系統中實作共享比在分段系統中要困難。這是因為,分頁存儲管理系統中将作業的位址空間劃分為頁面的做法是對使用者透明的,同時作業的位址空間是線性連續的,當系統将作業的位址空間分成大小相同的頁面時,被共享的部分不一定被包含在夜歌完整的頁面中,這樣不應共享的資料也被共享了,不利于保密,另外,共享部分的起始位址在各作業的位址空間劃分成頁的過程中,在各自頁面中的頁内位移可能不同,這樣也使得共享比較難
分頁存儲系統可以為記憶體提供兩種保護方式。以是位址越界保護,即通過比較位址變化機構中的頁表長度和所要通路的邏輯位址中的頁号完成;另一種是通過頁表中的通路控制資訊對記憶體資訊提供保護。例如,在頁表中設定一個存儲控制字段,根據頁面使用情況将該字段定義為讀、寫、執行等權限,在進行位址變換·時,不僅要從頁表的相應表目中得到該頁對應的塊号,同時還要檢查本次操作與存取控制字段允許的操作是否相符,若不相符,則有硬體捕獲并發出保護性中斷
7)基本分頁存儲管理方式
優點:記憶體使用率高;實作了離散配置設定;便于存儲通路控制;無外部碎片
缺點:需要硬體支援,尤其是快表;記憶體通路效率下降;共享困難;内部碎片
(2)基本分段存儲管理方式
前面介紹的各種存儲技術中,使用者邏輯位址空間是一個線性連續的位址空間,而通常情況下,一個作業是由多個程式段和程式段組成的,這就要求編譯連結程式将他們按照一維線性位址排列,進而給程式和資料的共享帶來困難。另外,程式員一般希望按照邏輯關系将作業分段,每段有自己的名字,可以根據名字通路相應的程式段或者資料段。分段存儲管理能較好的解決上述問題。是以,分段存儲管理相較于分頁存儲管理有如下優點
- 友善程式設計:使用者把自己的作業按照邏輯關系劃分為若幹個段,每段都是從0開始編址,有自己的名稱和長度
- 資訊共享:頁面是存放資訊的實體機關,沒有完整的意義;而段時資訊的邏輯機關,使用者可以把需要共享的部分代碼和資料放在同一段以便資訊共享
- 資訊保護:由于每一段都包含相對獨立的資訊,是以對資訊保護可以采取對段進行保護,資訊保護相對于分頁式友善許多
1)分段存儲原理
在分段存儲管理系統中作業的位址空間由若幹個邏輯分段組成,每個分段是一組邏輯意義上相對完整的資訊整合,每個分段都有自己的名字,每個分段都從0開始編址,并采用連續的一段位址空間。是以,整個作業的位址空間是二維的(段的分類是一維,段内位移是另一維)。分段存儲管理中以段為機關配置設定記憶體,每段配置設定一個連續的記憶體區,但各段之間不要求連續。記憶體的配置設定與回收類似于動态分區配置設定
這裡解釋下為什麼分頁存儲管理系統的位址空間是一維的,而分段存儲管理系統就是二維的
大家可能比較疑惑,認為分頁的地質結構也分為頁号與頁内位移,與分段類似,也應當是二維的。這裡要注意段号與頁号的來曆是不同的,段号是程式員自己定義的,每個段都是有特定含義的,是以不同的段大小不同,代表的二意義也不相同,是以要找到某個資料或指令,需要指定段号和位移兩個變量。而頁号是系統自動生成的,本身位址是線性連續的,當腰通路特定位址時,隻需要提供位址即可,系統會自動将位址劃分為頁号和頁内位移,頁号對于程式員來水哦是沒有實際意義的,是以是一維的
2)段表及位址變換過程
與分頁存儲管理類似,為了實作從邏輯位址到實體位址的變換,系統為每個程序建立一個段表,其中每個表項描述一個分段的資訊,表項中包含段号、段長和該段的記憶體起始位址。
為了實作從邏輯位址到實體位址的轉換,在系統中設定了段表寄存器用于存放段表的起始位址(簡稱始址)和段表長度,在進行位址變換時,系統将邏輯位址中的段号和段表長度進行比較,若段号超過了段表長度,則表示段号越界,産生越界中斷:否則根據段表起始位址和段号計算出該段表項的位置,從中讀出該段在記憶體中的起始位址,然後檢查段内位移是否超過該段段長,若超過,則同樣産生了越界中斷;否則将該段的起始位址與段内位移相加,進而得到要通路的實體位址。為了提高記憶體的通路速度,也可以使用快表。位址變換過程都是由硬體自動完成的
3)段的共享與保護
在分段管理系統中,分段的共享是通過多個作業的段表中相應表項都指向被共享段的同一個實體副本來實作的
在多道程式環境下,必須注意共享段中資訊的保護問題。當一個作業正從共享段中讀取資料時,必須防止另一個作業修改此共享段中的資料。在當今大多數實作共享的系統中,程式被分成代碼區和資料區。不能修改的代碼稱為純代碼或可重入代碼,這樣的代碼和不能修改的資料時可以共享的,而可修改的程式和資料則不能共享
與分頁管理類似,分段管理的保護主要有兩種:位址月結保護和通路控制保護
關于通路控制保護的實作方式已經介紹過。這裡不再重複,而位址越界保護則是利用段表寄存器中的段表長度與邏輯位址中的段号比較,若段号越界,則産生越界中斷;再利用段表項中的段長與邏輯位址中的段内位移進行比較,若段内位移大于段長,則會産生越界中斷。不過在允許段動态增長的系統中,段内位移大于段長時允許的。為此,段表中應設定相應的而增補位以訓示該段是否允許動态增長
4)基本分段存儲管理方式的優缺點
優點:便于程式子產品化處理和處理變換的資料結構;便于動态連結和共享;無内部碎片
缺點:與分頁類似,需要硬體支援;滿足分段的動态增長和減少外部碎片,要采用拼接技術;分段的最大吃醋才能收到主存可用空間的限制;有外部碎片
5)分段與分頁的差別
分頁存儲管理與分段存儲管理有許多相似之處。例如,兩者都采用離散配置設定方式,且都要通過位址變換機構來實作位址變換,但也有很多差別,差別如下:
- 頁是資訊的實體機關,分頁是為了實作離散配置設定方式,以減少記憶體的碎片,提高記憶體的使用率。或者說,分頁僅僅是處于系統管理的需要,而不是使用者的需要。段時資訊的邏輯機關,它含有一組意義相對完整的資訊。分段的目的是更好的滿足使用者的需要
- 頁的大小固定費且由系統決定,把邏輯位址劃分位頁号和頁内位移兩部分,是由機器硬體實作的。段的長度不固定,是由使用者所編寫的程式決定的,通常由編譯系統在對源程式進行編譯時根據資訊的性質來劃分
- 分頁系統中作業的位址空間是一維的,即單一的象形位址空間,程式員隻需要利用一個值來表示一個位址。分段系統中作業的位址空間是二維的,程式員在辨別一個地方時,紀要給出段名,又要給出段内位移
(3)基本段頁式存儲管理方式
從上面的介紹可以看出,分頁系統能有效提高記憶體使用率并能解決碎片問題,而分段系統能反映程式的邏輯結構并有利于段的共享。如果将這兩種存儲管理方式結合起來,就形成了段頁式存儲管理方式。
在段頁式存儲管理系統中,作業的位址空間首先被分成若幹個邏輯分段,每段都有自己的段号,然後再将每一段分成若幹個大小固定的頁,對于主存空間的管理仍然和分頁管理一樣,将其分成若幹個和頁面大小相同的實體塊,對于主存的配置設定以實體塊為機關
在段頁式存儲管理系統中,作業的邏輯地質結構包含三部分:段号S、段内頁号P和頁内位移D
注意:段頁式的确結合了段式和頁式的優點,但是段頁式的内部碎片并不是和頁式一樣少
段頁式的确結合了段式和頁式的優點,而且克服了段式的外部碎片問題,但是段頁式的内部碎片并沒有做到和頁式的一樣少。頁式存儲管理方式下平均一個程式有半頁碎片,而段内式存儲管理方式下平均一段就有半頁碎片,而一個程式往往有很多段,是以平均下來段頁式的内部碎片比頁式要多
26、虛拟記憶體的概念
(1)虛拟記憶體的引入原因
前面介紹的若幹種存儲管理方法都是分析如何将多個程式裝入記憶體中并行,這些方法都具有如下兩個特點:一次性(作業全部裝入記憶體後才能執行)和駐留性(作業常駐記憶體知道運作結束),難以滿足較大的作業或者較多的作業進入記憶體執行
而程式在執行過程中,有些代碼時較少用到的(比如錯誤處理部分),而且有的程式需要較長時間的I/O處理,導緻很多記憶體空間的浪費。是以,引入了一種能夠讓作業部分裝入就可以運作的存儲管理技術,即虛拟記憶體管理技術
(2)局限性原理
大多數程式執行時,在一個較短時間内僅使用程式代碼的一部分,相應的,程式所通路的存儲空間也局限于某個區域,這就是程式執行的局部性原理,她可表現為:
時間局限性:即一條指令的一次執行和下次執行,一個資料的一次通路和下次通路,都集中在一個較短的時期内
空間局限性:即目前指令和鄰近的幾條指令,目前通路的資料和鄰近的資料,都集中在一個較小的區域内
(3)虛拟記憶體的定義及特征
基于局部性原理,在程式裝入時可以将程式的一部分放入記憶體,而将其餘部分放在外存,然後啟動程式。在程式執行過程中,黨所通路的資訊不在記憶體中時,再由作業系統所需的部分調入記憶體。另一方面,作業系統将記憶體中暫時不使用的内容換到外存上,進而騰出空間存放将要調入記憶體的資訊。從效果上看,計算機系統好像為使用者提供了一個存儲容量比實際記憶體大得多的存儲器,這個存儲器稱為虛拟存儲器(簡稱虛存)
之是以将其稱為虛拟存儲器,是因為這種存儲器實際上并不存在,系統隻是提供了部分裝入,請求調入和置換功能,給使用者的感覺好像存在一個能滿足作業位址空間要求的記憶體。
虛拟記憶體的意義是讓程式存在的位址空間與運作時的存儲空間分開,程式員可以完全不考慮實際記憶體的大小,而在位址空間内編寫程式虛拟存儲器的容量由計算機的位址結構決定,并不是無限大
虛拟記憶體具有如下特征:
- 離散型:程式在記憶體中離散存儲
- 多次性:一個作業可以分成多次調入記憶體
- 交換性:作業在運作過程中可以換入,換出
- 虛拟性:從邏輯上擴充記憶體容量,使用者可以使用的空間可以遠大于實際記憶體容量
(4)實際虛拟記憶體的硬體支援
實作虛拟記憶體技術,需要有一定的物質基礎
- 要有相當數量的外存,足以存放多個使用者的程式
- 要有一定容量的記憶體,在處理器上運作的程式必須有一部分資訊存放在記憶體中
- 中斷機構,當使用者通路的部分不在記憶體中時中斷程式的運作
- 位址變換機構,以動态實作虛位址到實位址的位址變換
- 相關資料結構 段表或頁表
常用的虛拟存儲技術有請求分頁存儲管理、請求分段存儲管理和請求段頁式存儲管理
27、請求分頁管理方式
分頁存儲管理方式雖然解決了記憶體中的外部碎片的問題,但他要求将作業的所有頁面一次性調入記憶體。當記憶體可用空間不足或作業太大,就會限制一些作業進入主存運作。為此提出了請求分頁(也稱請求頁式)存儲管理方法,先将程式部分載入記憶體執行,當需要其他部分時在調入記憶體,很明顯,這種方法是根據程式的局部性原理産生的
(1)請求分頁原理
請求分頁存儲管理方法在作業位址空間的分頁、存儲空間的分塊等概念上和分頁存儲管理完全一樣,他是在分頁存儲管理系統的基礎上,增加請求調頁的功能、頁面置換功能索性曾的一種虛拟存儲系統,在請求分頁存儲管理中,作業運作之前,隻需要将目前需要的一部分頁面裝入主存,便可以啟動作業運作。在作業運作過程中,若所要通路的頁面不在主存,則通過調頁功能将其調入,同時還可以通過置換功能将暫時不同的頁面換到外存上,以便騰出記憶體空間
可以說。請求分頁=基本分頁+請求調頁功能+頁面置換功能
(2)頁表結構
在請求分頁系統中使用的主要資料結構仍然是頁表,其基本作用是将程式位址空間中的邏輯位址轉換成記憶體空間中的實體位址。由于請求分頁系統隻将作業的一部分調入記憶體,還有一部分存放在磁盤上,故需要在頁表中增加若幹項,供作業系統在實作頁面的調入、換出功能時參考
頁表的個字段的作用如下:
- 頁号和實體塊号:其在分頁存儲管理中已經定義過,這兩個資訊時進行位址變換所必需的
- 狀态位:用于判斷頁面是否在主存中。每當進行主存通路時,根據該位判斷要通路的頁面是否在主存,若不在主存中,則産生缺頁中斷
- 通路字段:用于記錄頁面在一段時間内被通路的次數、或最近已有多久未被通路。供置換算法在選擇換出頁面時參考
- 修改位:用于辨別頁面調入記憶體後是否被修改過。當處理器以寫方式通路頁面時,系統将設定該頁面的修改位。有與記憶體中的頁面在外存上都有副本,是以,若頁面未修改,則在該頁面換出時不需要将頁面寫到外存,以減少磁盤寫的次數;若頁面被修改,則必須将頁面重新寫到外存上
- 外存位址:用于指出頁面在外存上的存放位址,供調入頁面時使用
(3)缺頁中斷與位址變換
在請求分頁存儲管理系統中,當所通路的頁面在記憶體時,其位址變換過程與分頁存儲管理相同;當通路的頁面不在記憶體時,則應先将該頁面調入記憶體,再按照與分頁存儲管理相同的方式進行位址變換
當系統發現索要通路的頁面不在記憶體時,便産生一個缺頁中斷信号,此時使用者程式被中斷,控制轉到作業系統的缺頁中斷處理程式。缺頁中斷處理程式根據該頁在外存的位置把他調入記憶體。在調頁過程中,若記憶體有空閑空間,則缺頁中斷處理程式隻需要把缺頁裝入任何一個空閑存儲塊中,再對頁表中的相應表項進行修改(如填寫實體塊号、修改狀态位、設定通路字段及修改位初始值等)即可;若記憶體中無空閑空間,則必須先淘汰記憶體中的某些頁面,若被淘汰頁曾被修改過,則要将其寫回外存
缺頁中斷是一個比較特殊的中斷,他與一般中斷相比有明顯的差別,主要表現在如下方面:
- 在指令的執行期間産生和處理缺頁中斷。通常,CPU實在指令執行完畢後檢查是否有中斷請求到達,若有便響應。而缺頁中斷實在一條指令的執行期間,發現要通路的指令和資料不在記憶體時産生和處理的
- 一條指令可以産生多個缺頁中斷。例如,一條雙操作數的指令,每個操作數都不在記憶體中,則這條指令執行時至少将産生兩個缺頁中斷
(4)請求分頁管理方式的優缺點
優點:可以離散儲存程式,降低了碎片數量;提供虛拟存儲器,提高了主存使用率有利于多道程式運作,友善使用者
缺點:必須有硬體支援;有些情況下系統會産生抖動現象;程式最後一頁仍然存在違背利用的部分空間
28、頁面置換算法
頁面置換算法(也稱為頁面淘汰算法)是用來選擇換出頁面的算法。在請求頁式存儲管理方式中,由于一個程序運作的時候不是所有的頁面都在記憶體中,是以會出現缺頁中斷。當缺頁的時候記憶體沒有空閑的實體塊時就需要換出記憶體中的一頁,具體換出哪一頁面是由頁面置換算法決定的,頁面置換算法的優劣直接影響到系統的效率
- 要注意把頁面置換和連續配置設定方式中的交換差別開來,頁面置換的機關是頁面而不是整個程序,交換的機關是整個程序
- 當發生缺頁中斷後,系統不一定會執行頁面置換算法。因為發生缺頁中斷僅僅說明需要執行的頁面沒有在記憶體中,如果記憶體空間中還有空閑塊的話,隻需要用缺頁中斷處理程式把需要的頁面從外存調入記憶體即可。不需要頁面置換算法:隻有記憶體中沒有空閑塊的時候才需要頁面置換算法。是以,缺頁中斷不一定導緻執行頁面置換算法。
(1)最佳置換算法(OPT)
在預知一個程序的頁面号引用串的情況下,每次都淘汰以後不再使用的或以後最遲再被使用的頁面,這種算法就是最佳置換算法
顯然,最佳置換算法是最優的,具有最低的缺頁率。但由于實際操作中往往無法事先知道以後會引用到所有頁面的資訊,是以最佳置換算法無法實作,隻能作為一個标準來衡量其他置換算法的優劣
(2)先進先出算法(FIFO)
FIFO算法是最簡單的頁面置換算法,每次總是淘汰最先進入記憶體的頁面,也就是将在記憶體存駐留時間最長的頁面淘汰掉
該算法實作簡單,用一個隊列的資料結構就可以實作,将頁面按照次序排成一個隊列,并設定指針指向最先進入的頁面,每次需要淘汰頁面時,将指針所指的頁面淘汰即可
不過FIFO算法可能會産生Belady一場(缺頁次數随着配置設定的實體塊号的增加而增加),而且由于FIFO算法與程序實際運作規律不符,可能會選擇淘汰程式經常使用的界面,實際效果不好
(3)最近最少使用算法(LRU)
選擇最近最久沒有被使用的頁面予以淘汰,其思想是用以前的頁面引用情況來預測将來會出現頁面引用情況,也就是假設一個頁面剛被通路,那麼不久該頁面還會被通路。即最佳置換算法是“向後看”,而“LRU”算法則是“向前看”
該算法可以用寄存器組和棧來實作,性能較好
(4)時鐘置換算法(CLOCK)
時鐘置換(CLOCK)算法也稱為最近未使用算法(NRU),是LRU和FIFO的折中。作為LRU的近似算法,CLOCK算法給每個頁面設定一個通路位,辨別該頁最近有沒有被通路過。CLOCK維護一個記憶體中所有頁面的循環連結清單,當程式需要通路連結清單中存在的頁面時,該通路的通路位就被置為1:否則,若程式要通路的頁面沒有在連結清單中,那就需要淘汰一個記憶體中的頁面,于是一個指針就從上次被淘汰頁面的下一個位置開始順序的去周遊這個循環連結清單,當這個指針指向的頁面通路位為1時,就把該通路位置0,指針再向下移動,當指針所指的頁面的通路位為0時,就選擇這一頁面淘汰掉,若周遊了一遍連結清單仍沒找到可以淘汰的頁,那麼久繼續周遊下去
CLOCK算法比LRU算法少了很多硬體的支援,實作比較簡單,但比FIFO算法所需的硬體要求更多
29、工作集與頁面配置設定政策
(1)工作集理論
為了解決抖動現象,引入了工作集的概念。工作集是基于局部性原理的假設的。如果能預知程式在某段時間間隔内要通路哪些頁面,并能提前将他們調入記憶體,将會大大降低缺頁率,進而減少置換工作,提高CPU使用率
工作及是最近n次記憶體通路的頁面的集合,數字n被稱為工作集視窗,也就是工作集的大小。經常會使用的頁面會在工作集中,若一個頁面不再被使用,則它會被從工作集中丢棄。當一個程序尋址一個不在工作集内的界面時,會産生一個缺頁中斷。在處理缺頁中斷時,更新工作集并在需要時從磁盤讀出此界面
工作及模型的原理是:讓作業系統監視各個程序的工作集,主要是監視各個工作集的大小。若有空閑的實體塊,則可以再調一個程序到記憶體以增加多道的程度:若工作集的大小總和增加超過了所有可用實體塊的數量總和,那麼作業系統可以選擇一個記憶體中的程序對換到磁盤中去,以減少記憶體中的程序數量來防止抖動的發生
正确的而選擇工作集視窗的大小,即配置設定給程序的頁面數,對存儲器的有效使用率和系統吞吐率的提高,都将産生重要的影響。一方面,如果視窗選的很大,程序雖不易産生缺頁,但存儲器也将不會得到充分的利用。另一方面,如果視窗過小,則會使程序在運作過程中頻繁産生缺頁中斷,反而降低了系統吞吐率
(2)頁面配置設定政策
在請求分頁存儲管理系統中,可以采用兩種頁面配置設定政策,即固定配置設定和可變配置設定。在進行頁面置換時,也可以采用兩種政策,即全局置換和局部置換。将他們組合起來,有如下三種适合的政策(固定配置設定全局置換不合理,是以不存在這種政策)
固定配置設定局部置換:為每個程序配置設定一定數目的實體塊,這個數目是确定的,程序運作期間都不會改變。這樣程序和程序之間不會争奪實體塊,會導緻有些程序因為實體塊太少而頻繁的缺頁中斷,有些程序由于配置設定的實體塊太多而浪費記憶體空間。采用固定配置設定政策時,需要用算法決定每個程序配置設定多少塊實體塊,常用的算法有平均配置設定算法、按比例配置設定算法、考慮優先權的配置設定算法
可變配置設定全局置換:作業系統維護一個空閑實體塊隊列,每次有程序缺頁時都從空閑實體塊隊列上取下一個配置設定隊列給它,若系統中已經沒有空閑的實體塊了,那麼系統将有可能調出任何程序的其中一頁
可變配置設定局部置換:為每個程序配置設定一定數量的實體塊後,每次發生缺頁中斷且記憶體中沒有空閑塊的時候隻讓程序換處自己的某個記憶體頁,但當一個程序頻繁的發生缺頁中斷時OS為它配置設定額外的實體塊直到缺頁率降低到合适程度為止,當一個程序缺頁率特别低的時候适當減少配置設定給它的實體塊的數量。可變配置設定局部置換政策在可以獲得較高的記憶體空間使用率的同時,保證每個程序有較低的缺頁率
(3)頁面調入政策
請求調頁政策:一個頁面隻有在用到的時候才被調入到記憶體中,否則就放在外存中。這種調頁方式在一個程序剛啟動的時候會頻繁的出現缺頁中斷,因為一開始記憶體中沒有該程序的任何頁面。該政策實作簡單,但容易産生較多的缺頁中斷,時間開銷大,容易産生抖動現象
預調頁政策:是指将預計不久之後會被用到的頁面一并調入記憶體,盡管他們暫時還沒被用到。在程式啟動之時,如果程式員能指出哪些頁面是首先應該被調入的,并把它們放一起,那麼通過預調頁政策就可以一次性把他們調入記憶體,能節省不少時間,這是一種基于局部性原理的預測,通常用于程式的首次調入
(4)從何調入頁面
請求分頁系統中的外存分為兩部分:用于存放檔案的檔案區和用于存放對換界面的對換區。通常,由于對換區是采用連續配置設定方式,而檔案是采用離散配置設定方式,故對換區的磁盤I/O速度比檔案區高。這樣每當發生缺頁請求時,系統應從何處将缺頁調入記憶體,可分成如下三種情況:
系統擁有足夠的對換區空間:這時可以全部從對換區調入所需界面頁面,以提高調頁速度。為此,在程序運作前,便須将與該程序有關的檔案從檔案區複制到對換區
系統缺少足夠的對換區空間:這時凡是不會被修改的檔案,都直接從檔案區調入:而當換出這些界面時,由于他們未被修改而不必再将它們換出,以後再調入時,仍從檔案區直接調入
UNIX方式:由于與程序有關的檔案都放在檔案區,故凡是未運作過的頁面都應從檔案區調入。對于曾經運作過但又被換出的頁面,由于是被放在對換區,是以再下次調入時,應從對換區調入。由于UNIX系統允許頁面共享,是以某程序所請求的頁面有可能已被其他程序調入記憶體,此時也就無需再從對換區調入
30、抖動現象與缺頁率
(1)Belady異常
FIFO置換算法的缺頁率可能會随着所配置設定的實體塊數的增加而增加,這種奇怪的現象就是Belady異常。例如對于引用串1,2,3,4,1,2,5,1,2,3,4,5.記憶體中實體塊數為3的時候發生9次缺頁中斷,而實體塊數為4的時候反倒會發生10次缺頁中斷,這種随着配置設定得到的實體塊數的增加缺頁率反而增加的現象就是Belady異常
産生Belady異常的原因是FIFO算法的置換特征與程序通路主存的動态特征是沖突的,即被置換的頁面并部署程序不會通路的。FIFO算法可能會出現Belady異常,而LRU算法和最佳置換算法永遠不會出現Belady異常,被歸類為堆棧算法的頁面置換算法也不可能出現Belady異常
(2)抖動現象
若選用的頁面置換算法不合适,可能會出現這種現象:剛被淘汰的頁面,過後不久又要通路,而且調入不久後又調出,如此反複,是的系統把大部分時間用在了頁面的調入調出上,而幾乎不能完成任何有效的工作,這種現象稱為抖動(或颠簸)
抖動産生的主要原因是在請求分頁系統中每個程序隻能配置設定到所需全部記憶體空間的一部分
(3)缺頁率
假定一個作業共有n頁,系統配置設定給該作業m頁的空間(m<=n),如果該作業再運作中共需要通路A次頁面(即引用串長度為A),其中所要通路的頁面不在記憶體,需要将所需頁調入記憶體的次數為F,則缺頁率定義為f=F/A,命中率即為1-f
缺頁率是衡量頁面置換算法的重要名額。通常缺頁率會受置換算法、配置設定的頁面數量、頁面大小等因素的影響。
缺頁率對于請求分頁管理系統是很重要的。如果缺頁率過高,會直接導緻讀取頁面的平均時間增加,顯著降低程序執行速度,是以如何降低缺頁率是一項非常重要的操作
31、請求分段
請求分段存儲管理系統也與請求分頁存儲管理系統一樣,為使用者提供了一個比主存可用空間大得多的虛拟存儲器。同樣,虛拟存儲器的實際容量由計算機的位址結構确定
在請求分段存儲管理系統中,作業運作之前,隻要将目前需要的若幹段裝入主存,便可啟動作業運作。在作業運作過程中,如果要通路的分段不在主存,則通過調段功能将其調入,同時還可以通過置換功能将暫時不用的分段換到外存上,以便騰出記憶體空間。為此,應對段表進行擴充,擴充後的段表項如圖所示
段号、段長和記憶體始址三個資訊是進行位址變換所必需的,其他字段的含義與請求分頁存儲管理相同。當段在記憶體時,位址變換過程與分段存儲管理相同;當段不在記憶體時,應先将該段調入記憶體,然後再進行位址變換
當被通路的段不在主存時,将産生一個缺段中斷信号。作業系統處理該中斷時,在主存中查找是否有足夠大的分區存放該段。如果沒有這樣的分區,則檢查空閑分區容量總和,确定是否需要對分區進行拼接,或者調出一個或幾個段後再裝入所需段
32、記憶體管理方式之間的對比與聯系
在記憶體管理方式中,離散配置設定管理方式比連續配置設定管理方式重要得多: