天天看點

記憶體管理-基本分頁管理方式

在存儲器管理中,連續配置設定方式會形成許多“碎片”,雖然可通過“緊湊”方法将許多碎片拼接成可用的大塊空間,但須為之付出很大開銷。如果允許将一個程序直接分散地裝入到許多不相鄰的分區中,則無須再進行“緊湊”。基于這一思想而産生了離散配置設定方式。如果離散配置設定的基本機關是頁,則稱為分頁存儲管理方式。在分頁存儲管理方式中,如果不具備頁面對換功能,則稱為基本分頁存儲管理方式,或稱為純分頁存儲管理方式,它不具有支援實作虛拟存儲器的功能,它要求把每個作業全部裝入記憶體後方能運作。

頁面

1) 頁面和實體塊

分頁存儲管理是将一個程序的邏輯位址空間分成若幹個大小相等的片,稱為頁面或頁,并為各頁加以編号,從0開始,如第0頁、第1頁等。相應地,也把記憶體空間分成與頁面相同大小的若幹個存儲塊,稱為(實體)塊或頁框,也同樣為它們加以編号,如0#塊、1#塊等等。在為程序配置設定記憶體時,以塊為機關将程序中的若幹個頁分别裝入到多個可以不相鄰接的實體塊中。由于程序的最後一頁經常裝不滿一塊而形成了不可利用的碎片,稱之為“頁内碎片”。

2) 頁面大小

在分頁系統中的頁面其大小應适中。頁面若太小,一方面雖然可使記憶體碎片減小,進而減少了記憶體碎片的總空間,有利于提高記憶體使用率,但另一方面也會使每個程序占用較多的頁面,進而導緻程序的頁表過長,占用大量記憶體;此外,還會降低頁面換進換出的效率。然而,如果選擇的頁面較大,雖然可以減少頁表的長度,提高頁面換進換出的速度,但卻又會使頁内碎片增大。是以,頁面的大小應選擇适中,且頁面大小應是2的幂,通常為512

b~8 kb。

位址結構

分頁位址中的位址結構如下:

記憶體管理-基本分頁管理方式

對于某特定機器,其位址結構是一定的。若給定一個邏輯位址空間中的位址為a,頁面的大小為l,則頁号p和頁内位址d可按右圖所示公式求得:

記憶體管理-基本分頁管理方式

其中,int是整除函數,mod是取餘函數。

例如,其系統的頁面大小為1 kb,設a = 2170 b,則由上式可以求得p = 2,d = 122。

頁表

在分頁系統中,允許将程序的各個頁離散地存儲在記憶體不同的實體塊中,但系統應能保證程序的正确運作,即能在記憶體中找到每個頁面所對應的實體塊。為此,系統又為每個程序建立了一張頁面映像表,簡稱頁表。在程序位址空間内的所有頁(0~n),依次在頁表中有一頁表項,其中記錄了相應頁在記憶體中對應的實體塊号,見右圖的中間部分。在配置了頁表後,程序執行時,通過查找該表,即可找到每頁在記憶體中的實體塊号。可見,頁表的作用是實作從頁号到實體塊号的位址映射。

記憶體管理-基本分頁管理方式

基本的位址變換機構

頁表的功能可以由一組專門的寄存器來實作。一個頁表項用一個寄存器。由于寄存器具有較高的通路速度,因而有利于提高位址變換的速度;但由于寄存器成本較高,且大多數現代計算機的頁表又可能很大,使頁表項的總數可達幾千甚至幾十萬個,顯然這些頁表項不可能都用寄存器來實作,是以,頁表大多駐留在記憶體中。在系統中隻設定一個頁表寄存器ptr(page-table register),在其中存放頁表在記憶體的始址和頁表的長度。平時,程序未執行時,頁表的始址和頁表長度存放在本程序的pcb(程序控制塊)中。當排程程式排程到某程序時,才将這兩個資料裝入頁表寄存器中。是以,在單處理機環境下,雖然系統中可以運作多個程序,但隻需一個頁表寄存器。

當程序要通路某個邏輯位址中的資料時,分頁位址變換機構會自動地将有效位址(相對位址)分為頁号、頁内位址兩部分,再以頁号為索引去檢索頁表。查找操作由硬體執行。在執行檢索之前,先将頁号與頁表長度進行比較,如果頁号大于或等于頁表長度,則表示本次所通路的位址已超越程序的位址空間。于是,這一錯誤将被系統發現并産生一位址越界中斷。若未出現越界錯誤,則将頁表始址與頁号和頁表項長度的乘積相加,便得到該表項在頁表中的位置,于是可從中得到該頁的實體塊号,将之裝入實體位址寄存器中。與此同時,再将有效位址寄存器中的頁内位址送入實體位址寄存器的塊内位址字段中。這樣便完成了從邏輯位址到實體位址的變換。右圖示出了分頁系統的位址變換機構。

記憶體管理-基本分頁管理方式

由于頁表是存放在記憶體中的,這使cpu在每存取一個資料時,都要兩次通路記憶體。第一次是通路記憶體中的頁表,從中找到指定頁的實體塊号,再将塊号與頁内偏移量w拼接,以形成實體位址。第二次通路記憶體時,才是從第一次所得位址中獲得所需資料(或向此位址中寫入資料)。是以,采用這種方式将使計算機的處理速度降低近1/2。可見,以此高昂代價來換取存儲器空間使用率的提高,是得不償失的。

為了提高位址變換速度,可在位址變換機構中增設一個具有并行查尋能力的特殊高速緩沖寄存器,又稱為“聯想寄存器”(associative memory),或稱為“快表”,用以存放目前通路過的那些頁表項。此時的位址變換過程是:在cpu給出有效位址後,由位址變換機構自動地将頁号p送入高速緩沖寄存器(不再先送到頁表寄存器ptr),并将此頁号與高速緩存中的所有頁号進行比較,若其中有與此相比對的頁号,便表示所要通路的頁表項在快表中。于是,可直接從快表中讀出該頁所對應的實體塊号,并送到實體位址寄存器中。如在塊表中未找到對應的頁表項,則還須再通路記憶體中的頁表,找到後,把從頁表項中讀出的實體塊号送位址寄存器;同時,再将此頁表項存入快表的一個寄存器單元中,亦即,重新修改快表。但如果快表已滿,則os必須找到一個老的且已被認為不再需要的頁表項,将它換出。下圖示出了具有快表的位址變換機構。

記憶體管理-基本分頁管理方式

本文由cout_sev 搜集整理并修改

自《計算機作業系統(第三版)》(西安電子科技大學出版社),

轉載注明出處。

謝謝!

繼續閱讀