操作系统之内存管理(二)之虚拟内存管理(引入虚拟内存之后)
一、虛擬內存的基本概念
1.傳統存儲管理方式的特征
(1)一次性:作業必須一次性裝入內存后,方能開始運行。這會導致
*作業很大以致不能全部裝入內存時,改作業無法運行
*大量作業要求運行時,內存不足容納所有,只能少部分先,多道程序度下降
(2)駐留性:作業裝入內存后,一直駐留在內存中,其任何部分都不會換出,直至運行over
由以上可知,許多在程序運行中不用或暫時不用的程序(數據)占據了大量空間。浪費了內存資源。
2.局部性原理
要理解虛擬內存技術的思想,首先必須了解局部性原理??毂怼㈨摳咚倬彺嬉约疤摂M內存技術從廣義上講都屬于高速緩存技術。這個技術所依賴的原理就是局部性原理。
局部性原理表現在以下兩個方面:
(1)時間局部性:某條指令一旦執行,不久后該指令可能再次執行;如果數據被訪問過,不久后該數據可能再次被訪問。產生時間局部性的典型原因是由于程序中存在著大量的循環操作。
(2)空間局部性:一旦程序訪問了某個存儲單元,不久后,其附近的存儲單元也將被訪問,集中在那一定范圍內。
時間局部性是通過將近來使用的指令和數據保存到高速緩存存儲器中,并使用高速緩存的層次結構實現。空間局部性通常是使用較大的高速緩存,并將預取機制集成到高速緩存控制邏輯中實現。
3.虛擬存儲器的定義和特征
基于局部性原理,程序裝入時可以將程序的一部分裝入內存,而將其余部分留在外存,就可以啟動程序執行。程序執行過程中,當所訪問的信息不再內存時,由操作系統將所需要的部分調入內存,然后繼續執行。額外的,操作系統還可以將內存中暫時不用的內容換到外存,騰出空間。這樣,系統好像為用戶提供了一個比實際大的多的存儲器,稱為,虛擬存儲器。
特征:
(1)多次性,無需作業運行時一次性裝入內存。
(2)對換性,允許作業運行過程中,進行換入和換出。
(3)虛擬性,從邏輯上擴充內存的容量,使用戶看到的內存容量,遠大于實際的內存容量。
4.虛擬內存技術的實現
虛擬內存技術建立在離散(即非連續)分配的內存管理方式之上。
虛擬內存的實現有三種方式:
(1)請求分頁存儲管理
(2)請求分段存儲管理
(3)請求段頁式存儲管理
二、請求分頁管理方式
建立在基本分頁系統基礎之上,為了支持虛擬存儲器功能而增加了請求調頁功能和頁面置換功能。請求分頁是目前最常用的一種實現虛擬存儲器的方法。
1.頁表機制
請求分頁系統在一個作業運行之前不要求全部一次性調入內存,因此在作業的運行過程中,必然會出現要訪問的頁面不在內存的情況,如何發現和處理這種情況是請求分頁系統必須解決的兩個基本問題。
請求分頁系統中的頁表項
2.缺頁中斷機構
請求分頁系統中,每當要訪問的頁面不在內存時,便產生一個缺頁中斷,請求操作系統將所缺的頁調入內存。
缺頁中斷與一般的中斷相比,它有以下兩個明顯的區別:
*在指令執行期間產生和處理中斷信號,而非一條指令執行完成后,屬于內部中斷。
*一條指令在執行期間,可能產生多次缺頁中斷
3.地址變換機構
如圖3-25所示,在進行地址變換時,先檢索快表:
若找到要訪問的頁,便修改頁表項中的訪問位(寫指令則還須重置修改位),然后利用頁表項中給出的物理塊號和頁內地址形成物理地址。若未找到該頁的頁表項,應到內存中去查找頁表,再對比頁表項中的狀態位P,看該頁是否已調入內存,未調入則產生缺頁中斷,請求從外存把該頁調入內存
三、頁面置換算法
進程運行時,若訪問的頁面不在內存而需將其調入,但內存已無空閑空間時,就需要從內存中調出一頁程序或數據,送入磁盤的兌換區。
而選擇調出頁面的算法就稱為頁面置換算法。常見的置換算法有以下四種。
1.最佳置換(OPT)算法
最佳置換算法所選擇的被淘汰頁面將是以后永不使用的,或者是在最長時間內不再被訪問的頁面,這樣可以保證獲得最低的缺頁率。但因為無法預知,因此該算法無法實現。但可以用來評價其它算法。
2.先進先出(FIFO)算法
優先淘汰最早進入內存的頁面,也就是在內存中駐留時間最久的頁面。
FIFO算法還會產生當所分配的物理塊數增大而頁故障數不減反增的異?,F象,稱為“Belady”異常。
3.最近最久未使用(LRU)算法
選擇最近最長時間未訪問過的頁面予以淘汰,它認為過去一段時間內未訪問的頁面,在最近的將來可能也不會被訪問。
4.時鐘(CLOCK)算法
LRU算法性能接近OPT但實現困難,且開銷大;FIFO算法實現簡單,但性能差。試圖用比較小的開銷接近LRU的性能,這類算法都是CLOCK算法的變體。因為算法要掃描緩沖區,像時鐘的針一樣的轉動,所以叫CLOCK算法。
四、頁面分配策略
工作集理論
引入:工作集是基于局部性原理的假設的。如果能預知程序在某段時間間隔內要訪問哪些頁面,并能提前將它們調入內存,將會大大降低缺頁率,從而減少置換工作,提高* * 用率。定義:工作集是最近* 內存訪問的頁面的集合,數字* 稱為工作集窗口,也就是工作集的大小。原理:讓操作系統監視各個工作集的大小,若有空閑的物理塊,則可以再調一個進程到內存以增加多道的程度;若工作集的大小總和增加超過了所有可用物理塊的數量總和,那么操作系統可以選擇一個內存中的進程對換到磁盤中去,以減少內存中的進程數量來防止抖動的發生。
頁面分配策略
固定分配局部置換:為每個進程分配一定數目的物理塊,這個數目是確定的,進程運行期間都不會改變??勺兎峙淙种脫Q:操作系統維護一個空閑物理塊隊列,每次有進程缺頁時都從空閑物理塊隊列上取下一個分配給它,若系統中已經沒有空閑的物理塊了,那么系統將有可能調出任何進程中的其中一頁。
頁面調入策略
請求調頁策略:一個頁面只有在被用到時才被調入到內存中,否則就放在外存中。這種調頁方式容易產生較多的缺頁中斷,時間開銷大,容易產生抖動現象。預調頁策略:是指將預計不久之后會被用到的頁面一并調入到內存,盡管暫時它們還沒被用到。這是一種基于局部性原理的預測,通常用于程序的首次調入。
從何處調入頁面
系統擁有足夠的對換區空間:這時可以全部從對換區調入所需頁面,以提高調頁速度。系統缺少足夠的對換區空間:這時凡是不會被修改的文件,都直接從文件區調入;而當置換出這些頁面時,由于它們未被修改而不必再將它們換出,以后再調入時,仍從文件區直接調入。但對于那些可能被修改的部分,在將它們換出時,便需調到對換區,以后需要時再從對換區調入。方式:由于與進程有關的文件都放在文件區,因此凡是未運行過的頁面都應從文件區調入。而對于曾經運行過但又被換出的頁面,由于是被放在對換區,因此在下次調入時,應從對換區調入。
Belady異常
定義:FIFO置換算法的缺頁率可能會隨著所分配的物理塊數的增加而增加,這種奇怪的現象就是Belady 異常。原因:FIFO算法的置換特征與進程訪問內存的動態特征相矛盾,即被置換的頁面并不是進程不會訪問的。注意:FIFO法和最佳置換算法永遠不會出現Belady異常,被歸類為堆棧算法的頁面置換算法也不可能出現Belady異常。
抖動現象
定義:若選用的頁面置換算法不合適,可能會出現抖動現象:剛被淘汰的頁面,過后不久又要訪問,并且調入不久后又調出,如此反復,使得系統把大部分時間用在了頁面的調入調出上,而幾乎不能完成任何有效的工作,這種現象稱為抖動(或顛簸)。原因:在請求分頁系統中每個進程只能分配到所需全部內存空間的一部分。
缺頁率
定義:假定一個作業共有* ,系統分配給該作業m的空間m<=n。如果該作業在運行中共需要訪問* 頁面(即引用串長度為* ,其中所要訪問頁面不在內存,需要將所需頁調入內存的次數為F 則缺頁率定義為f=F/A命中率即為1-f缺頁率會受置換算法、分配的頁面數量、頁面大小等因素的影響。缺頁率對于請求分頁管理系統是很重要的,如果缺頁率過高,會直接導致讀取頁面的平均時間增加,會使進程執行速度顯著降低。因此,如何降低缺頁率是一項非常重要的工作。
地址進制之間的轉換
通常題目給出的地址形式分為兩種:十進制與其他進制(通常是十六進制、八進制或二進制)。當題目中給出的地址是十進制時,通常地址是不會特別說明或者不帶后綴的,例如“訪問7105號單元”;而當給出的地址是其他進制時,通常會特別說明或者用符號后綴,十六進制、八進制與二進制對應的后綴分別為字母H、O、B,例如“訪問1A79H號單元”就是十六進制地址,其中字母H表示該地址是以十六進制給出的。而在答題過程中,通常會進行進制之間的轉換,在轉換之后可以將轉換后的地址加括號并加注下標來表明轉換后的進制,例如將17ACH(十六進制)轉化為二進制,則可以表示為17A*
= 17A* = 00* 01* 10* 1100邏輯地址轉換為物理地址的過程
將其他進制轉化為二進制,方便處理。求出頁號,頁號為邏輯地址與頁面大小的商,二進制下為地址高位。求出頁內位移,頁內位移為邏輯地址與頁面大小的余數,二進制下為地址低位。根據題意產生頁表,通過查找頁表得到對應頁的內存塊號或頁框號(頁框號為把物理塊地址除去頁內位移若干位后剩下的地址高位,也可以簡單理解為“物理地址的頁號”)。如果給出的是內存塊號,則用內存塊號乘以塊大小,加上基址,再加上頁內位移得到 物理地址(給出這種條件的題目通常會給出物理地址的基址或者起始地址)。如果給出的是頁框號,則用頁框號與頁內位移進行拼接(頁框號依然是高位,頁內位移是低位,與邏輯地址的頁號和頁內位移構成類似),得到物理地址。將二進制表示的物理地址根據題目要求轉換為十六進制或者十進制。
一次地址訪問的過程
首先程序內部的地址訪問通過分段查LDT表項,得到虛擬地址,虛擬地址通過MMU查頁表轉換為物理地址
總結
以上是生活随笔為你收集整理的操作系统之内存管理(二)之虚拟内存管理(引入虚拟内存之后)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php自动发邮件 -- 163邮箱设置s
- 下一篇: gt是什么货币