1. 程式人生 > >作業系統(5)虛擬儲存器

作業系統(5)虛擬儲存器

  一、虛擬儲存器介紹

  前面介紹的各種儲存器管理方式有一個共同的特點,即它們都要求將一個作業全部裝入記憶體後方能執行。於是,出現了下面的兩種情況:

  • 有的作業很大,其所要求的記憶體空間超過了記憶體總容量,作業不能全部被裝入記憶體,致使該作業無法執行。
  • 有大量作業要求執行,但由於記憶體容量不足以容納所有這些作業,只能將少數作業裝入記憶體讓它們先執行,而將其他大量的作業留在外存上等待。

  出現上面兩種情況的原因都是由於記憶體容量不夠大。一個顯而易見的解決方法是從物理上增加記憶體容量,但這些往往會受到機器自身的限制,而且無疑要增加系統成本,因此這種方法是受到一定限制的。另一種方法並非是從物理上實際地擴大記憶體的容量,而是從邏輯上擴充記憶體容量,讓使用者所感覺到的記憶體容量比實際記憶體容量大得多。於是便可以讓比記憶體空間更大的程式執行,或者讓更多的使用者程式併發執行。這樣既滿足了使用者的需要,又改善了系統的效能。這正是虛擬儲存技術所要解決的問題。

  1.常規儲存管理方式的特徵和區域性性原理

  (1)常規儲存器管理方式的特徵

  • 一次性。是指作業必須一次性地全部裝入記憶體後方能開始執行。而正是這一特徵導致了大作業無法在小記憶體中執行,以及無法進一步提高系統的多道程式度,直接限制了對處理機的利用率和系統的吞吐量的提高。事實上,許多作業在執行時,並非需要用到全部程式和資料,如果一次性地裝入其全部程式和資料,顯然也是對記憶體空間的一種浪費。
  • 駐留性,是指作業被裝入記憶體後,整個作業都一直駐留在記憶體中,其中任何部分都不會被換出,直至作業執行結束。儘管執行中的程序會因 I/O 等原因而被阻塞,可能處於長期等待狀態,或者有的程式模組在執行過一次後就不再需要(執行)了,它們都仍然駐留在記憶體中,繼續佔用寶貴的記憶體資源。

  由此可以看出,一次性及駐留性特徵使得許多在程式執行中不用或暫不用的程式(資料)佔據了大量的記憶體空間,使得一些需要執行的作業無法裝入執行。現在要研究的問題是:一次性及駐留性在程式執行時是否是必需的。

  (2)區域性性原理

  程式在執行時將呈現出區域性性規律,即在一較短的時間內,程式的執行僅侷限於某個部分;相應地,它所訪問的儲存空間也侷限於某個區域。

  • 程式執行時,除了少部分的轉移和過程呼叫指令外,在大多數情況下仍是順序執行的。
  • 過程呼叫將會使程式的執行軌跡由一部分割槽域轉至另一部分割槽域,但過程呼叫的深度在大多數情況下都不超過 5。這就是說,程式將會在一段時間內都侷限在這些過程的範圍內執行。
  • 程式中存在許多迴圈結構,這些結構雖然只由少數指令構成,但是它們將多次執行。
  • 程式中還包括許多對資料結構的處理,如對陣列進行操作,它們往往都侷限於很小的範圍內。

侷限性還表現在下述兩個方面:

  • 時間侷限性。如果程式中的某條指令一旦執行,則不久以後該指令可能再次執行;如果某資料被訪問過,則不久以後該資料可能再次被訪問。產生時間侷限性的典型原因是由於在程式中存在著大量的迴圈操作。
  • 空間侷限性。一旦程式訪問了某個儲存單元,在不久之後,其附近的儲存單元也將被訪問,即程式在一段時間內所訪問的地址,可能集中在一定的範圍之內,其典型情況便是程式的順序執行。

  (3)虛擬儲存器的基本工作情況

  基於區域性性原理,應用程式在執行之前,沒有必要全部裝入記憶體,僅須將那些當前要執行的少數頁面或段先裝入記憶體便可執行,其餘部分暫留在盤上。程式在執行時,如果它所要訪問的頁(段)已調入記憶體,便可繼續執行下去;但如果程式所要訪問的頁(段)尚未調入記憶體(稱為缺頁或缺段),便發出缺頁(段)中斷請求,此時程式應利用 OS 所提供的請求調頁(段)功能,將它們調入記憶體,以使程序能繼續執行下去。如果此時記憶體已滿,無法再裝入新的頁(段),則還須再利用頁(段)的置換功能,將記憶體中暫時不用的頁(段)調至盤上,騰出足夠的記憶體空間後,再將要訪問的頁(段)調入記憶體,使程式繼續執行下去。這樣,便可使一個大的使用者程式能在較小的記憶體空間中執行;也可在記憶體中同時裝入更多的程序使它們併發執行。

  2.虛擬儲存器的定義和特徵

  (1)虛擬儲存器的定義

  當用戶看到自己的程式能在系統中正常執行時,他會認為,該系統所具有的記憶體容量,一定比自己的程式大,或者說,使用者所感覺到的記憶體榮愛玲將比實際記憶體容量大得多。但須說明,使用者所看到的大容量只是一種感覺,是虛的,故人們把這樣的儲存器稱為虛擬儲存器。
  所謂虛擬儲存器,是指具有請求調入功能和置換功能,能從邏輯上對記憶體容量加以擴充的一種儲存器系統。其邏輯容量由記憶體容量和外存容量之和所決定,其執行速度接近於記憶體速度,而每位的成本卻又接近於外存。可見,虛擬儲存技術是一種效能非常優越的儲存器管理技術,故被廣泛地應用於大、中、小型機器和微型機中。

  (2)虛擬儲存器的特徵

  • 多次性。多次性是相對於傳統儲存器管理方式的一次性而言的,是指一個作業中的程式和資料無需在作業執行時一次性地全部裝入記憶體,而是允許被分成多次調入記憶體執行,即只需將當前要執行的那部分程式和資料裝入記憶體即可開始執行。以後每當要執行到尚未調入的那部分程式時,再將它調入。正是由於虛擬儲存器的多次性特徵,才使它具有從邏輯上擴大記憶體的功能。毫無以為的是,多次性是虛擬儲存器最重要的特徵,任何其它的儲存管理方式都不具有這一特徵。因此,我們也可以認為虛擬儲存器是具有多次性特徵的儲存器系統。
  • 對換性。對換性是相對於創痛儲存器管理方式的常駐性而言的,是指一個作業中的程式和資料,無須在作業執行時一直常駐記憶體,而是允許在作業的執行過程中進行換金、換出,亦即,在程序執行期間,允許將那些暫不使用的程式和資料,從記憶體調至外存的對換區(換出),待以後需要時再將它們從外存調至記憶體(換進);甚至還允許將暫時不執行的程序調至外存,待它們重又具備執行條件時再調入記憶體。換進和換出能有效地提高記憶體利用率。可見,虛擬儲存器具有對換性特徵,也正是由於這一特徵,才使得虛擬儲存器得以正常執行。
  • 虛擬性。虛擬性是指能夠從邏輯上擴充記憶體容量,使使用者所看到的記憶體容量遠大於實際記憶體容量。這樣,就可以在小的記憶體中執行大的作業,或者能提高多道程式度。它不僅能有效改善記憶體的利用率,還可以提高程式執行的併發程度,從而可以增加系統的吞吐量。這是虛擬儲存器所表現出來的最重要的特徵,也是實現虛擬儲存器的最重要的目標。值得說明的是,虛擬性是以多次性和對換性為基礎的,或者說,僅當系統允許將作業分多次調入記憶體,並能將記憶體中暫時不執行的程式和資料換至盤上時,才有可能實現虛擬儲存器;而多次性和對換性又必須建立在離散分配的基礎上。

  3.虛擬儲存器的實現方法

  在虛擬儲存器中,允許將一個作業分多次調入記憶體。如果採用連續分配方式時,要求必須將作業裝入一個連續的記憶體區域中,則必須事先為它一次性地申請一個足以容納整個作業的記憶體空間,以便將整個作業先後分多次裝入記憶體。

  這不僅會使相當一部分記憶體空間都處於暫時或“永久”的空閒狀態,造成記憶體資源的嚴重浪費,而且也無法從邏輯上擴大記憶體容量。因此,虛擬儲存器的實現,都毫無例外地建立在離散分配的儲存管理方式的基礎上。目前,所有的虛擬儲存器都是採用下述方式之一實現的。

(1)請求分頁系統

  請求分頁系統是在分頁系統的基礎上,增加了請求調頁功能和頁面置換功能所形成的頁式虛擬儲存系統。

  它允許只裝入少數頁面的程式(及資料),便啟動執行。以後,再通過調頁功能及頁面置換功能,陸續地把即將要執行的頁面調入記憶體,同時把暫不執行的頁面換出到外存上。

  置換時以頁面為單位。為了能實現請求調頁和置換功能,系統必須提供必要的硬體支援和相應的軟體。

  • 硬體支援:① 請求分頁的頁表機制,它是在純分頁的頁表機制上增加若干項而形成的,作為請求分頁的資料結構;② 缺頁中斷機構,即每當使用者程式要訪問的頁面尚未調入記憶體時,便產生一缺頁中斷,以請求 OS 將所缺的頁調入記憶體;③ 地址變換機構,它同樣是在純分頁地址變換機構的基礎上發展形成的。
  • 實現請求分頁的軟體:這裡包括有用於實現請求調頁的軟體和實現頁面置換的軟體。它們在硬體的支援下,將程式正在執行時所需的頁面(尚未在記憶體中的)調入記憶體,再將記憶體中暫時不用的頁面從記憶體置換到磁碟上。

(2)請求分段系統

  請求分段系統是在分段系統的基礎上,增加了請求調段及分段置換功能後所形成的段式虛擬儲存系統。

  它允許只裝入少數段(而非所有的段)的使用者程式和資料,即可啟動執行。以後再通過調段功能和段的置換功能將暫不執行的段調出,同時調入即將執行的段。

  置換是以段為單位進行的。為了能實現請求調頁和置換功能,系統必須提供必要的硬體支援和相應的軟體。

  • 硬體支援:① 請求分段的段表機制。這是在純分段的段表機制基礎上增加若干項而形成的,作為請求分段的資料結構。② 缺段中斷機構。每當使用者程式所要訪問的段尚未調入記憶體時,產生一個缺段中斷,以請求 OS 將所缺的段調入記憶體。③ 地址變換機構。它同樣是在純分段地址變換機構的基礎上發展形成的。
  • 軟體支援:包括用於實現請求調段的軟體和實現段置換的軟體。它們在硬體的支援下,先將記憶體中暫時不用的段從記憶體置換到磁碟上,再將程式正在執行時所需的段(尚未在記憶體中的)調入記憶體。虛擬儲存器在實現上是有一定難度的。相對於請求分段系統,因為請求分頁系統換進換出的基本單位都是固定大小的頁面,所以在實現上要容易些。而請求分段系統換進換出的基本單位是段,其長度是可變的,分段的分配類似於動態分割槽方式,它在記憶體分配和回收上都比較複雜。

 

  二、請求分頁儲存管理方式

  1.請求分頁中的硬體支援

  (1)請求頁面機制

    在請求分頁系統中需要的主要資料結構是請求頁表,其基本作用仍然是將使用者地址空間中的邏輯地址對映成記憶體空間中的實體地址。

    為了滿足頁面換進換出的需要,在請求頁表中增加了四個欄位,即請求分頁系統中每個頁表應該包含六個欄位:即頁號、物理塊號、狀態位P,訪問欄位A,修改位M,外存地址。

  • 狀態位 P:由於在請求分頁系統中,只將應用程式的一部分調入記憶體,還有一部分仍在外存磁碟上,故在頁表中增加一個存在位欄位用於指示該頁是否已調入記憶體,供程式訪問時參考。
  • 訪問欄位 A:用於記錄本頁在一段時間內被訪問的次數,或記錄本頁最近已有多長時間未被訪問,提供給置換演算法(程式)在選擇換出頁面時參考。
  • 修改位 M:標識該頁在調入記憶體後是否被修改過。由於記憶體中的每一頁都在外存上保留一份副本,因此,在置換該頁時,若未被修改,就不需要再將該頁回寫到外存上,以減少系統的開銷和啟動磁碟的次數;若已被修改,則必須將該頁重寫到外存上,以保證外存中所保留的副本始終是最新的。簡而言之,M 位供置換頁面時參考。
  • 外存地址:用於指出該頁在外存上的地址,通常是物理塊號,供調入該頁時參考。

  (2)缺頁中斷機構

  在請求分頁系統中,每當所要訪問的頁面不存在時,邊產生一缺頁中斷,請求 OS 將所缺的頁調入記憶體。缺頁中斷作為中斷,它們同樣需要經歷諸如保護 CPU 環境、分析中斷原因、轉入缺頁中斷處理程式進行處理,以及在中斷處理完成後再恢復 CPU 環境等幾個步驟。

  缺頁中斷又是一種特殊的中斷,它與一般的中斷相比,有著明顯的區別,主要表現在下面兩個方面:

  • 在指令執行期間產生和處理中斷訊號。通常,CPU 都是在一條指令執行完後,才檢查是否有中斷請求到達。若有,便去響應,否則,繼續執行下一條指令。然而,缺頁中斷是在指令執行期間,發現所要訪問的指令或資料不在記憶體時,便立即所產生和處理缺頁中斷訊號,以便能及時地將所缺的頁調入記憶體。
  • 一條指令在執行期間,可能產生多次缺頁中斷。基於這些特徵,系統中的硬體機構應能儲存多次中斷時的狀態,並保證最後能返回到中斷前產生缺頁中斷的指令處繼續執行。

  (3)地址變換機構

  請求分頁系統中的地址變換機構,是在分頁系統地址變換機構的基礎上,再為實現虛擬儲存器而增加了某些功能而形成的,如產生和處理缺頁中斷,以及從記憶體中換出一頁的功能等等。

  在進行地址變換時,首先去檢索快表,試圖從中找出所要訪問的頁。若找到,便修改頁表項中的訪問位,供置換演算法選換出頁面時參考。對於寫指令,還須將修改位置成“1”,表示該頁在調入記憶體後已被修改。然後利用頁表項中給出的物理塊號和頁內地址形成實體地址。地址變換過程到此結束。

  

  如果在快表中未找到該頁的頁表項時,應到記憶體中去查詢頁表,再從找到的頁表項中的狀態位 P,來了解該頁是否已調入記憶體。若該頁已調入記憶體,這時應將此頁的頁表項寫入快表,當快表已滿時,應先調出按某種演算法所確定的頁的頁表項,然後再寫入該頁的頁表項;若該頁尚未調入記憶體,這時應產生缺頁中斷,請求 OS 從外存把該頁調入記憶體。

  2.請求分頁中的記憶體分配

  在為程序分配記憶體時,將涉及到三個問題:

  • 為保證程序能正常執行,所需要的最小物理塊的確定
  • 在為每個程序分配物理塊時,應採取什麼樣的分配策略,即所分配的物理塊時固定的,還是可變的
  • 為不同程序所分配的物理塊數,是採取平均分配演算法,還是根據程序的大小按比例分配

  (1)最小物理塊數的確定

  一個顯而易見的事實是,隨著為每個程序所分配的物理塊的減少,將使程序在執行中的缺頁率上升,從而會降低程序的執行速度。為使程序能有效地工作,應為它分配一定數目的物理塊,但這並不是最小物理塊數的概念。

  這裡所說的最小物理塊數,是指能保證程序正常執行所需的最小物理塊數。當系統為程序分配的物理塊數少於此值時,程序將無法執行。

  至於程序應獲得的最少物理塊數,與計算機的硬體結構有關,取決於指令的格式、功能和定址方式。對於某些簡單的機器,若是單地址指令且採用直接定址方式,則所需的最少物理塊數為 2。其中,一塊是用於存放指令的頁面,另一塊則是用於存放資料的頁面。如果該機器允許間接定址時,則至少要求有三個物理塊。對於某些功能較強的機器,其指令長度可能是兩個或多於兩個位元組,因而其指令本身有可能跨兩個頁面,且源地址和目標地址所涉及的區域也都可能跨兩個頁面。對於這種機器,至少要為每個程序分配 6 個物理塊,以裝入 6 個頁面。

  (2)記憶體分配策略

在請求分頁系統中,可採取兩種記憶體分配策略,即固定和可變分配策略。在進行置換時,也可採取兩種策略,即全域性置換和區域性置換。於是可組合出以下三種適用的策略。

  • 固定分配區域性置換(Fixed Allocation,Local Replacement)

  固定分配,是指為每個程序分配一組固定數目的物理塊,在程序執行期間不再改變。

  區域性置換,是指如果程序在執行中發現缺頁,則只能從分配給該程序的 n 個頁面中選出一個頁換出,然後再調入一頁,以保證分配給該程序的記憶體空間不變。

採用該策略時,為每個程序分配多少物理塊時根據程序型別(互動性或批處理型等)或根據程式設計師、程式管理員的建議來確定的。

實現這種策略的困難在於:應為每個程序分配多少個物理塊難以確定。若太少,會頻繁地出現缺頁中斷,降低了系統的吞吐量;若太多,又必然使記憶體中駐留的程序數目減少,進而可能造成 CPU 空閒或其它資源空閒的情況,而且在實現程序對換時,會花費更多的時間。

  • 可變分配全域性置換(Variable Allocation,Global Replacement)

  可變分配,是指先為每個程序分配一定數目的物理塊,在程序執行期間,可根據情況做適當的增加或減少。

  全域性置換,是指如果程序在執行中發現缺頁,則將 OS 所保留的空閒物理塊(一般組織為一個空閒物理塊序列)取出一塊分配給該程序,或者在所有程序的全部物理塊中選擇一塊換出,然後將所缺的頁裝入其中。這樣, 分配給該程序的記憶體空間就隨之增加。

  可變分配全域性置換是最易於實現的一種物理塊分配和置換策略,已用於若干個 OS 中。在採用這種策略時,凡產生缺頁(中斷)的程序,都將獲得新的物理塊。僅當空閒物理塊佇列中的物理塊用完時,OS 才能從記憶體中選擇一頁調出,該頁可能是系統中任一程序的頁,這樣,自然又會使那個程序的物理塊減少,進而使其缺頁率增加。

  • 可變分配區域性置換(Variable Allocation,Local Replacement)

  該策略同樣是基於程序的型別或根據程式設計師的要求,為每個程序分配一定數目的物理塊,但當某程序發現缺頁時,只允許從該程序在記憶體的頁面中選出一頁換出,這樣就不會影響其它程序的執行。如果程序在執行中頻繁地發生缺頁中斷,則系統須再為該程序分配若干附加的物理塊,直至該程序的缺頁率減少到適當程度為止;反之,若一個程序在執行過程中的缺頁率特別低,則此時可適當減少分配給該程序的物理塊數,但不應引起其缺頁率的明顯增加。

  (3)物理塊分配策略

  在採用固定分配策略時,如何將系統中可供分配的所有物理塊分配給各個程序,可採用下述幾種演算法。

  • 平均分配演算法

  這是將系統中所有可供分配的物理塊平均分配給各個程序。例如,當系統中有 100 個物理塊,有 5 個程序在執行時,每個程序可分得 20 個物理塊。這種方式貌似公平,但實際上是不公平的,因為它未考慮到各程序本身的大小。如有一個程序其大小為 200 頁,只分配給它 20 個塊,這樣,它必然會有很高的缺頁率;而另一個程序只有 10 頁,卻有 10 個物理塊閒置未用。

  • 按比例分配演算法

  這是根據程序的大小按比例分配物理塊的演算法。如果系統中共有 n 個程序,每個程序的頁面數為 Si ,則系統中各程序頁面數的總和為:S=(S1+S2+...+Sn),又假定系統中可用的物理塊總數為 m,則每個程序所能分到的物理塊數為 bi ,則bi = (Si/S) × m, bi 應該取整,它必須大於最小物理塊數。

  • 考慮優先權的分配演算法

  在實際應用中,為了照顧到重要的、緊迫的作業能儘快地完成,應為它分配較多的記憶體空間。通常採取的方法是把記憶體中可供分配的所有物理塊分成兩部分:一部分按比例地分配給各程序;另一部分則根據各程序的優先權,適當地增加其相應份額後,分配給各程序。在有的系統中,如重要的實時控制系統,則可能是完全按優先權來為各程序分配其物理塊的。

  3.頁面調入策略

  為使程序能夠正常執行,必須事先將要執行的那部分程式和資料所在的頁面調入記憶體,需要解決三個問題:

  • 系統應在何時調入所需頁面
  • 系統應從何處調入這些頁面
  • 系統是如何調入的

  (1)何時調入頁面

    為了確定系統將程序執行時所缺的頁面調入記憶體的時機,可採取預調頁策略或請求調頁策略:

  • 預調頁策略。如果程序的許多頁是存放在外存的一個連續區域中,則一次調入若干個相鄰的頁,會比一次調入一頁更高效些。但如果調入的一批頁面中的大多數都未被訪問,則又是低效的。可採用一種以預測為基礎的預調頁策略,將那些預計在不久之後便會被訪問的頁面預先調入記憶體。如果預測較準確,那麼,這種策略顯然是很有吸引力的。但遺憾的是,目前預調頁的成功率僅約 50%。故這種策略主要用於程序的首次調入時,由程式設計師指出應該先調入哪些頁。
  • 請求調頁策略。當程序在執行中需要訪問某部分程式和資料時,若發現其所在的頁面不在記憶體,便立即提出請求,由 OS 將其所需頁面調入記憶體。由請求調頁策略所確定調入的頁,是一定會被訪問的,再加之請求調頁策略比較易於實現,故在目前的虛擬儲存器中大多采用此策略。但這種策略每次僅調入一頁,故須花費較大的系統開銷,增加了磁碟 I/O 的啟動頻率。

  (2)從何處調入頁面

  在請求分頁系統中的外存分為兩部分:用於存放檔案的檔案區和用於存放對換頁面的對換區。通常,由於對換區是採用連續分配方式,而檔案區是採用離散分配方式,故對換區的磁碟 I/O 速度比檔案區的高。這樣,每當發生缺頁請求時,系統應從何處將缺頁調入記憶體,可分成如下三種情況:

  • 系統擁有足夠的對換區空間,這時可以全部從對換區調入所需頁面,以提高調頁速度。為此,在程序執行前,便須將與該程序有關的檔案從檔案區拷貝到對換區。
  • 系統缺少足夠的對換區空間,這時凡是不會被修改的檔案都直接從檔案區調入;而當換出這些頁面時,由於它們未被修改而不必再將它們換出,以後再調入時,仍從檔案區直接調入。但對於那些可能被修改的部分,在將它們換出時,便須調到對換區,以後需要時,再從對換區調入。
  • UNIX 方式。由於與程序有關的檔案都放在檔案區,故凡是未執行過的頁面,都應從檔案區調入。而對於曾經執行過但又被換出的頁面,由於是被放在對換區,因此在下次調入時,應從對換區調入。由於 UNIX 系統允許頁面共享,因此,某程序所請求的頁面有可能已被其它程序調入記憶體,此時也就無須再從對換區調入。

  (3)頁面調入過程

  • 每當程式所要訪問的頁面未在記憶體時(存在位為“0”),便向 CPU 發出一缺頁中斷,中斷處理程式首先保留 CPU 環境,分析中斷原因後轉入缺頁中斷處理程式。
  • 該程式通過查詢頁表,得到該頁在外存的物理塊後,如果此時記憶體能容納新頁,則啟動磁碟 I/O 將所缺之頁調入記憶體,然後修改頁表。
  • 如果記憶體已滿,則須先按照某種置換演算法從記憶體中選出一頁準備換出;如果該頁未被修改過(修改位為“0”),可不必將該頁寫回磁碟;
  • 但如果此頁已被修改,則必須將它寫回磁碟,然後再把所缺的頁調入記憶體,並修改頁表中的相應表項,置其存在位為“1”,並將此頁表項寫入快表中。
  • 在缺頁調入記憶體後,利用修改後的頁表,去形成所要訪問資料的實體地址,再去訪問記憶體資料。整個頁面的調入過程對使用者是透明的。

 

  三、頁面置換演算法

  在程序執行過程中,若其所要訪問的頁面不在記憶體而需把它們調入記憶體,但記憶體已無空閒空間時,為了保證該程序能正常執行,系統必須從記憶體中調出一頁程式或資料送磁碟的對換區中。

  但應將哪個頁面調出,須根據一定的演算法來確定。通常,把選擇換出頁面的演算法稱為頁面置換演算法(Page-Replacement Algorithms)。置換演算法的好壞,將直接影響到系統的效能。

  不適當的演算法可能會導致程序發生“抖動”,即剛被換出的頁很快又要被訪問,需要將它重新調入,此時又需要再選一頁調出;而這個剛被調出的頁很快又被訪問,又需將它調入,如此頻繁地更換頁面,以致一個程序在執行中把大部分時間都花費在頁面置換工作上,稱該程序發生了“抖動”。

   一個好的頁面置換演算法應具有較低的頁面更換頻率。從理論上來講,應將那些以後不再會訪問的頁面換出,或把那些在較長時間內不會再訪問的頁面調出。

  1.最佳置換演算法和先進先出置換演算法

  (1)最佳置換演算法

  最佳置換演算法中,其所選擇的被淘汰頁面將是以後永不使用的,或許是在最長(未來)時間內不再被訪問的頁面。採用最佳置換演算法通常可保證獲得最低的缺頁率。但由於人們目前還無法預知,一個程序在記憶體的若干個頁面中,哪一個頁面是未來最長時間內不再被訪問的,因而該演算法是無法實現的,但可以利用該演算法去評價其他演算法。

以7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 為例:
77
07 0
17 0 1
22 0 1
02 0 1
32 0 3
02 0 3
42 4 3
22 4 3
32 4 3
02 0 3
32 0 3
22 0 3
12 0 1
22 0 1
02 0 1
12 0 1
77 0 1
07 0 1
17 0 1
最佳置換演算法

  (2)先進先出(FIFO)頁面置換演算法

  FIFO 演算法是最早出現的置換演算法。該演算法總是淘汰最先進入記憶體的頁面,即選擇在記憶體中駐留時間最久的頁面予以淘汰。該演算法實現簡單,只需把一個程序已調入記憶體的頁面按先後次序連線成一個佇列,並設定一個指標,稱為替換指標,使它總是指向最老的頁面。

  但該演算法與程序實際執行的規律不相適應,因為在程序中,有些頁面經常被訪問,比如,含有全域性變數、常用函式、例程等的頁面,FIFO 演算法並不能保證這些頁面不被淘汰。

 

  2.

  3.

  4.

  5.

  四、“抖動”與工作集

 

  五、請求分段儲存管理方式