1. 程式人生 > 其它 >作業系統 記憶體空間的擴充(虛擬記憶體)

作業系統 記憶體空間的擴充(虛擬記憶體)

覆蓋與交換

1. 覆蓋與交換

覆蓋, 交換, 虛擬儲存技術常用於實現記憶體空間的擴充

1.1 覆蓋技術

覆蓋技術的思想:將程式分為多個段,常用的段常駐記憶體,不常用的段在需要的時候調入記憶體

記憶體中分為一個"固定區" 和若干個"覆蓋區",常用的段放在固定區,不常用的段放在覆蓋區

缺點:必須由程式設計師宣告覆蓋結構, 對使用者不透明, 增加了使用者的程式設計負擔,覆蓋技術只用於早期的作業系統中。

1.2 交換技術

交換技術的思想:記憶體空間緊張時, 系統將記憶體中某些程序暫時換出外存,把外存中某些已具備執行條件的程序換入記憶體(即程序在記憶體與磁碟間動態排程)

1、應該在外存(磁碟)的什麼位置儲存被換出的程序?

2、什麼時候應該交換?

3、應該換出哪些程序?

1.具有對換功能的作業系統中,通常把磁碟空間分為檔案區和對換區兩部分。檔案區主要用於存放檔案,主要追求儲存空間的利用率,因此對檔案區空間的管理採用離散分配方式;對換區空間只佔磁碟空間的小部分,被換出的程序資料就存放在對換區。由於對換的速度直接影響到系統的整體速度,因此對換區空間的管理主要追求換入換出速度,因此通常對換區採用連續分配方式。總之,對換區的I/o速度比檔案區的更快。

2.交換通常在許多程序執行且記憶體吃緊時進行,而系統負荷降低就暫停。例如:在發現許多程序執行時經常發生缺頁,就說明記憶體緊張,此時可以換出一些程序;如果缺頁率明顯下降,就可以暫停換出。

3.可優先換出阻塞程序;可換出優先順序低的程序;為了防止優先順序低的程序在被調入記憶體後很快又被換出,有的系統還會考慮程序在記憶體的駐留時。

  

2. 虛擬記憶體

虛擬記憶體的目的是為了讓實體記憶體擴充成更大的邏輯記憶體,從而讓程式獲得更多的可用記憶體。

2.1 傳統儲存管理方式的特徵、缺點

1、一次性:作業必須一次性全部裝入記憶體後才能開始執行

  • 作業很大時,無法裝入導致大作業無法執行
  • 大量作業要求執行時記憶體無法容納所有作業,導致多道程式併發度下降


2、駐留性:一旦作業被裝入記憶體,就會一直駐留在記憶體中,直到作業執行結束,這樣會導致記憶體中駐留大量的,暫時用不到的資料,浪費記憶體資源。



2.2 高速緩衝技術的思想

將近期會頻繁訪問到的資料放到更高速的儲存器中,暫時用不到的資料放在更低速儲存器中。

2.3 虛擬記憶體的定義和特徵

  • 在程式裝入時,將程式中很快會用到的部分裝入記憶體暫時用不到的部分留在外存,就可以讓程式開始執行。
  • 在程式執行過程中,當所訪問的資訊不在記憶體時,由作業系統負責將所需資訊由外存調入記憶體,然後繼續執行程式。請求調頁/段
  • 記憶體空間不夠時, 作業系統負責將記憶體中暫時用不到的資訊換出到外存頁面置換
  • 在使用者看來,就有一個比實際記憶體大很多的記憶體,這就叫虛擬記憶體。

虛擬記憶體的最大容量是由計算機的地址結構(CPU的定址範圍)確定的

虛擬記憶體的實際容量 = min(記憶體容量+外存容量,CPU定址範圍)

特徵

多次性:無需在作業執行時一次性全部裝入記憶體,而是允許被分成多次調入記憶體。

對換性:在作業執行時無需一直常駐記憶體,而是允許在作業執行過程中,將作業換入、換出。

虛擬性:從邏輯上擴充了記憶體的容量,使使用者看到的記憶體容量遠大於實際容量。

2.4 虛擬記憶體的實現

請求分頁儲存管理

頁表機制

缺頁中斷機構

在請求分頁作業系統中,每當要訪問的頁面不在記憶體時,便產生一個缺頁中斷, 然後由作業系統的缺頁中斷處理程式處理中斷。

此時缺頁的程序阻塞,放入阻塞佇列,調頁完成後再將其喚醒, 放回就緒佇列。

  • 如果記憶體中有空閒塊,則為程序分配一個空閒塊,將所缺頁面裝入該塊,並修改頁表中相應的頁表項
  • 如果記憶體中沒有空閒塊,則由頁面置換演算法選擇一個頁面淘汰,若該頁面在記憶體期間被修改過,則要將其寫回外存,未修改過的頁面不用寫回外存。


缺頁中斷是因為當前執行的指令想要訪問目標頁面未調入記憶體而產生的,因此屬於內中斷(故障) 。

頁面置換演算法

1. 最佳置換(Optimal, OPT)

1.1 基本思想

  置換以後不再被訪問,或者在將來最遲才回被訪問的頁面,缺頁中斷率最低。但是該演算法需要依據以後各業的使用情況,而當一個程序還未執行完成是,很難估計哪一個頁面是以後不再使用或在最長時間以後才會用到的頁面。所以該演算法是不能實現的。但該演算法仍然有意義,作為很亮其他演算法優劣的一個標準。

1.2 算例

  採用固定分配區域性置換的策略,嘉定系統為某程序在記憶體中分配了3個物理塊,頁面訪問順序為2、3、2、1、5、2、4、5、3、2、5、2。假定系統未採用預調頁策略,即未事先調入任何頁面。

      程序執行時,一次將2、3、1三個頁面調入記憶體,發生3次缺頁中斷。當第一次訪問頁面5時,產生第4次缺頁中斷,根據OPT演算法,淘汰頁面1,因為它在以後不會在使用了;第5次缺頁中斷時,淘汰頁面2,因為它在5、3、2三個頁面中,是在將來最遲才會被頁面訪問的頁面。

      以此類推:   

    注意:第4次中斷時將最後不會訪問的1剔除,將最後才訪問的3放入最下面的記憶體塊中,以後的排程過程中,最後不會訪問或最後才被訪問的頁面總是放在最下面的記憶體塊中。記憶體塊從上到下依次存放最先訪問的頁面。   

    中斷次數為6,缺頁中斷率為6/12*100% = 50%。

2. 先進先出置換演算法(First In First Out, FIFO)

2.1 基本思想

  置換最先調入記憶體的頁面,即置換在記憶體中駐留時間最久的頁面。按照進入記憶體的先後次序排列成佇列,從隊尾進入,從隊首刪除。但是該演算法會淘汰經常訪問的頁面,不適應程序實際執行的規律,目前已經很少使用。

2.2 算例

  仍然以OPT算例為例子。   

  中斷次數為6,缺頁中斷率為9/12*100% = 75%。

2.3 Belady異常

  一般來說,分配給程序的物理塊越多,執行時的缺頁次數應該越少,使用FIFO時,可能存在相反情況,分配4個物理塊的缺頁竟然比3個物理塊的缺頁次數還多!   

  例如:程序訪問順序為0、2、1、3、0、2、4、0、2、1、3、4。   M=3時,缺頁中斷9次。

  缺頁中斷率9/12*100% = 75%。

  M=4時,缺頁中斷10次。缺頁中斷率10/12*100% = 83.3%。

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

3.1 基本思想

  置換最近一段時間以來最長時間未訪問過的頁面。根據程式區域性性原理,剛被訪問的頁面,可能馬上又要被訪問而較長時間內沒有被訪問的頁面,可能最近不會被訪問。   

  LRU演算法普偏地適用於各種型別的程式,但是系統要時時刻刻對各頁的訪問歷史情況加以記錄和更新,開銷太大,因此LRU演算法必須要有硬體的支援。

3.2 算例

  仍然以OPT算例為例子。   

   中斷次數為6,缺頁中斷率為7/12*100% = 58.3%。

堆疊實現LRU:   

  系統使用特殊的堆疊來存放記憶體中每一個頁面的頁號。每當訪問一頁時就調整一次,即把被訪問頁面的頁號從棧中移出再壓入棧頂。因此,棧頂始終是最新被訪問頁面的頁號,棧底始終是最近最久未被訪問的頁號。當發生缺頁中斷時,總是淘汰棧底頁號所對應的頁面。