操作系統(五)虛擬存儲器管理

在這裏插入圖片描述

一學期的可也算是基本上完了,不知道大家學的怎樣。
應朋友之約,我來總結一下這學期學的操作系統課程,方便大家複習。
總綱:https://blog.csdn.net/qq_43762191/article/details/106411766 (帶思維導圖)

概述

虛擬存儲器就是使用虛擬技術從邏輯上對存儲器進行擴充。

局部性原理

一次性和駐留性嚴重地降低內存的利用率,顯著地減少了系統吞吐量。
研究表明,程序在執行過程中呈現局部性原理。

時間局部性

一條指令被執行後,那麼它可能很快會再次被執行

空間局部性

若某一存儲單元被訪問,那麼與該存儲單元相鄰的單元可能也會很快被訪問

局部性原理使得虛擬存儲技術的實現成爲可能。一個程序特別是一個大型程序的一部分裝入內存是可以運行的。

虛擬存儲器的特徵

可以把一個程序分多次裝入內存,每次裝入當前運行需要使用的部分——多次性;
在程序執行過程中,可以把當前暫不使用的部分換出內存,若以後需要時再換進內存——交換性即非駐留性;
程序在內存中可分段存放,每一段是連續的——離散性。
虛擬存儲器還有一個最重要的特徵——虛擬性,從邏輯上擴充內存容量,使用戶所看到的內存容量遠大於實際內存容量。

虛擬存儲器定義

所謂虛擬存儲器,是指僅把程序的一部分裝入內存便可運行程序的存儲器系統。具體地說,所謂虛擬存儲器是指具有請求調入功能和置換功能,能從邏輯上對內存容量進行擴充的一種存儲器系統。

虛擬存儲器並非可以無限大,其容量受外存大小和指令中地址長度兩方面的限制。

分頁虛擬存儲管理方式

分頁虛擬存儲管理

基本原理

分頁虛擬存儲管理方式是在分頁系統的基礎上,增加了請求調頁功能、頁面置換功能所形成的虛擬存儲器系統。
在分頁虛擬存儲管理時使用的頁表,是在原來頁表的基礎上發展起來的,包括以下內容:物理塊號、狀態位、訪問位、修改位、外存地址 。

缺頁中斷

每當要訪問的頁面不在內存時,便產生一缺頁中斷,請求操作系統把所缺頁面調入內存。,請求操作系統把所缺頁面調入內存。缺頁中斷作爲中斷,它同樣需要經歷諸如保護CPU現場環境、分析中斷原因、轉入缺頁中斷處理程序進行處理、恢復CPU環境等幾個步驟。

缺頁中斷與與一般的中斷的區別

-在指令執行期間產生和處理中斷信號。
-一條指令在執行期間,可能產生多次缺頁中斷。

地址變換

在分頁存儲管理方式中的地址變換機構的基礎上,增加了產生和處理缺頁中斷,以及從內存中換出一頁等功能。具體過程:

  • 保存當前進程的CPU現場環境,從輔存中找到該頁;
  • 查看當前內存是否有空閒空間調入該頁,如果有則啓動I/O,將該頁由輔存調入內存,同時修改頁表,再按分頁存儲管理方式的地址變換過程轉換地址;如果內存已滿,則按照某種算法選擇一頁作爲淘汰頁調出,騰出空間後再調入。當然如果被淘汰的頁在內存中已經被修改過,則需將該頁寫回輔存。

頁面置換算法

如果內存空間己被裝滿而又要裝入新頁時,必須按某種算法將內存中的一些頁淘汰出去,以便調入新頁,這個工作稱爲“頁面置換”。選擇被淘汰頁的方法成爲頁面置換算法。

下面都看這張圖,並思考如何實現

在這裏插入圖片描述

最佳置換算法

-算法:淘汰那些以後永不使用,或者是在最長時間內不再被訪問的頁
-無法實現的,只能作爲其它置換算法的衡量標準

先進先出算法

-算法:每次淘汰最先進入內存的頁
-優點:簡單,易於實現
-缺點:效率不高,可能產生“抖動”現象

先進先出算法

-算法:每次淘汰最先進入內存的頁
-優點:簡單,易於實現
-缺點:效率不高,可能產生“抖動”現象

最近最久未使用(LRU)算法

-算法:淘汰那些在最近一段時間裏最久未被使用的一頁
- LRU算法是較好的一個算法,但是開銷太大,要求系統有較多的支持硬件(移位寄存器或棧)

改進型Clock置換算法

-算法:除了考慮到頁面的使用情況外,還增加了置換代價,選擇換出頁面時,既要是未使用過的頁面,又要是未被修改過的頁面把同時滿足兩條件的頁面作爲首選被淘汰的頁。
-該算法與簡單Clock算法比較,可減少磁盤的I/O操作次數 ,但實現該算法本身的開銷將有所增加

分頁虛擬存儲器

內存分配策略和分配算法

最小物理塊數
  • 最小物理塊數是指能保證進程正常運行所需的最少物理塊數。
  • 進程所需的最少物理塊數與計算機的硬件結構有關,取決於指令的格式、功能和尋址方式。
物理塊的分配策略
固定分配局部置換
  • 基於進程的類型或根據程序員的建議,爲每個進程分配一定數量的物理塊,在整個運行期間都不再改變。

  • 如果進程在運行期間發現缺頁,則只能在該進程在內存的n個頁面中選出一頁換出,然後在調入一頁,保證分配給該進程的物理塊數保持不變。

  • 困難:難以確定爲每個進程分配的物理塊數,若太少,則會頻繁地出現缺頁中斷,降低了系統的吞吐量;若太多,則必然使內存中駐留的進程數目減少,進而可能造成CPU空間或其它資源的浪費,而且在實現進程交換時,會花費更多的時間。

可變分配全局置換
  • 先爲系統中的每個進程分配一定數量的物理塊,而操作系統本身也保留一個空閒物理塊隊列。
  • 當某個進程發現缺頁時,由系統從空閒物理塊隊列中,取出一個物理塊分配給該進程,並將欲調入的(缺)頁裝入其中。僅當空閒物理塊隊列中的物理塊用完時,操作系統才從內存中選擇一頁調出,該頁可能是系統中任一進程的頁,
  • 會使被淘汰頁的那個進程的物理塊數減少,進而使其缺頁率增加。
  • 最容易實現的一種物理塊分配和置換策略。
可變分配局部置換
  • 進程的類型或根據程序員的要求,爲每個進程分配一定數目的物理塊;但當某進程發生缺頁時,只允許從該進程在內存的頁面中選出一頁換出。
  • 如果進程在運行中頻繁地發生缺頁中斷,則系統須再爲該進程分配若干附加的物理塊,直至進程的缺頁率減低到適當程度爲止;反之,若一個進程在運行過程中的缺頁率特別低,則此時可適當減少分配給該進程的物理塊,但不應引起其缺頁率的明顯增加。

調頁策略

請求調頁策略
  • 當缺頁中斷髮生時進行調度,即當訪問某一頁面而該頁面不在內存時由操作系統將其調入內存。
    預調頁策略
  • 也稱先行調度,是當缺頁中斷髮生前進行調度,即當一個頁面即將被訪問之前就將其調入內存。
  • 預調頁可以節省進程因缺頁中斷而等待頁面調入的時間。

抖動問題

-進程的大部分時間,都用於頁面的換進換出,而幾乎不能再去做任何有效的工作,從而導致發生處理機利用率急劇下降,而趨於零的現象,我們稱此時系統處於抖動狀態。
-產生抖動的原因
產生抖動的根本原因是,系統中進程的數量太多,因此分配給每個進程的物理塊數量太少,使得每個進程在運行時頻繁的發生缺頁中斷
-工作集
所謂工作集就是指在某段時間間隔∆內,進程訪問頁面的集合。爲了使進程有較低的缺頁率,應在該段時間內把進程的全部工作集裝入內存中

預防抖動的方法
採用局部置換策略
利用工作集算法防止抖動
利用“L=S”準則調節缺頁率
掛起某些進程	  

分段虛擬存儲管理

基本原理

-分段虛擬存儲管理原理同分頁虛擬存儲管理原理一樣,在程序運行前,不必調入所有分段,只需先調入若干個分段便可啓動運行。當所訪問的段不在內存中時,可請求操作系統將所缺的段調入內存
-分段虛擬存儲管理中的段表包括:段名、段長、段的基址、存取方式、訪問位、修改位、存在位、增補位和外存地址

缺段中斷

-在分段虛擬存儲管理系統中,如果訪問的段不在內存中,系統將產生一個缺段中斷,請求操作系統將該段調入到內存
-缺段中斷和缺頁中斷一樣 ,但段是信息的邏輯單位,所以不可能出現一條指令和一組信息被分割在兩個段裏的情況

段的共享

-利用段的動態鏈接很容易實現段的共享,一個共享段在不同作業中可具有不同的段號
-設立一張共享段表對段的共享進行集中管理

  • 可重入代碼又稱爲“純代碼”,是一種允許多個進程同時訪問的代碼。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章