作業系統(8)儲存器管理

笨蛋糕發表於2014-03-09

1、主存空間分為兩部分:系統區存放作業系統核心程式和資料結構等;使用者區存放應用程式和資料。

主存儲存器功能:1)分配和去分配:程式可請求對主存區的獨佔式使用。

2)抽象和對映:主存器被抽象,使得程式認為分配給它的地址空間是一個大且連續地址鎖組成的陣列,同時建立抽象機制支援程式用邏輯地址來對映到物理主存單元,實現地址轉換。

3)隔離和共享:系統負責隔離已分配給程式的主存區,允許多個程式共享主存區。

4)儲存擴充:主存和輔助儲存器被抽象成虛擬主存,允許使用者的虛擬地址空間大於主存實體地址空間。

2、儲存器層次結構:

1)暫存器:訪問速度最快,容量較小,一般以位元組為單位,用於加速儲存訪問速度。

2)快取記憶體:訪問速度快於主存,存放主存中經常訪問的一些資訊,以提高程式執行速度。

3)主儲存器:可執行程式必須被儲存在主儲存器中,與裝置相交換的資訊也依託於主存地址空間。

3、源程式及程式名字空間:

1)編譯:

程式模組包括文字段、資料段和堆疊段。由於模組包含外部引用,即指向其他模組中的資料或指令的運算元地址,或包含對庫函式的引用,編譯程式負責記錄引用的發生位置,編譯或彙編的結果將產生相應的多個目標模組,每個目標模組都附有供引用使用的內部符號表和外部符號表。符號表中依次給出各個符號及在本目標模組中的名字地址,在模組被連結時進行轉換。

2)連結:

把多個目標模組連結成一個完整的可重定位程式(包括應用程式要呼叫的標準庫函式、所引用的其他模組中的子程式),需要解析內部和外部符號表,把對符號名的引用轉換為數值引用,要將涉及名字地址的程式入口點和資料引用點轉換為數值地址。

可重定位目標程式又稱為裝載程式碼模組,它存放於磁碟中,由於程式在主存中的位置不可預知,連結時程式地址空間中的地址總是相對某個基準(通常為0)開始編號的順序地址,稱為邏輯地址或相對地址。

3)裝入:

在載入一個裝載程式碼模組之前,儲存管理器程式總會分配一塊實際主存區給程式,裝入程式根據指定的主存區首地址,再次修改和調整被裝載模組中的邏輯地址,將邏輯地址繫結到實體地址,使之稱為可執行二進位制程式碼。

把邏輯地址轉換(繫結)為實體地址的過程稱為地址重定位、地址對映或地址轉換。有兩種方式:靜態地址重定位和動態地址重定位。

4、固定分割槽:

主存空間被劃分成數目固定不變的分割槽,各分割槽的大小不等,每個分割槽只裝入一個作業,若多個分割槽中都裝有作業,則它們可以併發執行。

主存分配表:

記錄主儲存器中劃分的分割槽及其使用情況。固定分割槽的任務是何時及如何把主存空間劃分成分割槽。

作業進入分割槽有兩種排隊策略:一是每個分割槽有單獨的作用等待佇列,二是所有等待處理的作業排成一個等待佇列。

5、可變分割槽儲存管理:

按照作業的大小來劃分分割槽,但劃分的時間、大小、位置都是動態的。常用的分配演算法:

1)最先適應分配演算法:

順序查詢未分配區表或連結串列,直至找到第一個能滿足長度要求的空閒區為止,分隔此分割槽,一部分分配給作業,另一部分仍為空閒區(若有)。

2)下次適應分配演算法:

總是從未分配區的上次掃描結束處順序查詢為分配區表或連結串列。

3)最優適應分配演算法:

掃描整個未分配區表或連結串列,從空閒區中挑選一個能滿足使用者程式要求的最小分割槽進行分配。通常把空閒區按長度遞增順序排列。

4)最壞適應分配演算法:

掃描總是挑選一個最大的的空閒區分割給作業使用。

5)快速適應分配演算法:

為那些經常用到的長度的空閒區設立單獨的空閒區連結串列。

6、地址轉換與儲存保護:

對固定分割槽採用靜態地址重定位,程式執行時使用絕對地址,可由載入程式進行地址越界檢查。動態地址重定位時,程式的程式和資料的地址轉換由硬體完成,及基址暫存器和限長暫存器。

程式碼段暫存器CS在指令執行期間重定位指令地址,堆疊段暫存器SS為棧指令的執行重定位地址,資料段暫存器DS在指令執行週期內重定位其他地址。

7、主存不足的解決辦法:

1)移動技術:

把已在主存中的程式分割槽連結在一起,是分散的空閒區彙整合片。方法一是把所有當前佔用的分割槽移動到主存的另一端,二是把佔用分割槽移動到主存的一端,但當產生足夠大小的空閒區時就停止移動。

2)對換技術:

選擇其中一個程式將其移出主存,騰出空間給其他程式使用。通常系統把時間片耗盡或將優先順序較低的程式換出,因為短時間內它們不會投入執行。資料區和堆疊是程式執行時所建立和修改的,作業系統可通過檔案系統把這些可變資訊作為特殊檔案儲存。

3)覆蓋技術:

指程式執行過程中程式的不同模組在主存中相互替代,以達到小主存執行大程式的目的。

8、分頁儲存管理:
頁面——程式邏輯地址空間分成大小相等的區,每個區稱為頁面或頁,頁號從0依次開始。

頁框——即頁幀,把主存實體地址空間分成大小相等的區,其大小與頁面大小相等,每個區是一個物理塊或頁框,塊號從0依次開始。

邏輯地址——即頁號+頁內位移。採用分頁儲存管理時,邏輯地址是連續的,程式在主存中的每個頁框內的地址是連續的,但頁框之間的地址可以不連續。

頁表——是為程式建立的,目的是把頁面對映為頁框,頁表是一個函式,其變數是頁面號,函式值為頁框號。

實體地址=頁框號*塊長+頁內位移。

整個系統只有一個頁表基址暫存器,只有佔用CPU的程式才佔有它。

頁表可存放在一組暫存器或主存中。快表記錄最近轉換的頁號即頁框號,快取記憶體儲存最近實際訪問的指令或資料的副本。

9、資料共享:允許不同程式對共享的資料頁用不同的頁號,只要讓各自頁表中的有關表項指向共享的資料頁框。

程式共享:不同程式正確執行共享內碼表面,必須為它們在所有邏輯地址空間中指定同樣的頁號。

動態連結:需要使用共享庫,它包含共享函式的目的碼模組,在執行時可以載入到任意主存區域。

10、多級頁表:

邏輯地址結構分為:頁目錄位移,頁表頁位移,頁內位移。

二級頁表地址轉換需3次訪問主存,一次訪問頁目錄,一次訪問頁表頁,一次訪問指令或資料。

11、分段儲存管理:

邏輯地址=段號+段內位移。以段為單位來劃分和連續存放,為作業的各段分配一個連續的主存空間,而各段之間不一定連續。

在分頁儲存管理中,頁的劃分,即邏輯地址劃分為頁號和頁內位移,是使用者不可見的,連續的地址空間將根據頁面的大小自動分頁。在分段中,地址結構是使用者可見的。

共享的資料段在作業程式的段表中可指定不同的段號。每個使用者程式的段表分為兩個部分:區域性描述符表LDT和全域性描述符表GDT。

12、虛擬儲存器管理:

實存管理:必須為程式分配足夠的主存空間,裝入其全部資訊,否則程式無法執行。

虛擬儲存:僅將當前使用部分先裝入主存,其餘部分存放在磁碟中,使用時系統自動將其裝進來。允許使用者的邏輯地址空間大於主存實體地址空間。是將邏輯地址對映到實體地址的一種手段。以頁或段為單位。

13、請求分頁虛擬儲存管理:主存管理部件MMU。

1)管理硬體頁表基址暫存器。2)分解邏輯地址。3)管理快表。4)訪問頁表。5)發出相應中斷。6)管理特徵位。

如何發現頁面不在主存中?辦法是擴充頁表項的內容,增加駐留標誌位。

缺頁異常:

是由於發現當前訪問頁面不再主存時由硬體所產生的一種特殊中斷訊號,CPU通常在一條指令執行完成後操檢查是否有中斷到達,即只能在兩條指令之間響應中斷,但缺頁中斷卻是在指令執行期間產生並獲得系統處理的。

14、在請求分頁虛擬儲存管理中,頁表中存放的是把邏輯地址轉換為實體地址時硬體所需要的資訊,作用有:

1)獲得頁框號以實現虛實地址轉換。

2)設定各種訪問控制位,對頁面資訊進行保護。

3)設定各種標誌位來實現相應的控制功能(如缺頁標誌,髒頁標誌,訪問標誌,鎖定標誌,淘汰標誌)。

15、頁面裝入策略和清除策略:

1)請頁式:僅當需要訪問程式和資料時把所需頁面裝入主存。

2)預調式:動態預測程式最可能要訪問的那些頁面。

16、頁面替換策略:

1)區域性替換:

作用範圍侷限於程式自身。實現方法有:區域性最佳頁面替換演算法,工作集模型和工作集置換演算法,模擬工作集替換演算法,缺頁頻率替換演算法。

2)全域性替換:

不考慮程式屬主,範圍是整個系統。實現方法有:最佳頁面替換演算法,先進先出頁面替換演算法,最近最少使用頁面替換演算法LRU。其維護一個頁面淘汰佇列。LRU演算法的實現需要硬體支援,模擬方法有:引用位法,計數器法,記時法。第二次機會頁面替換演算法,時鐘頁面替換演算法。

要為每個程式維護一組頁面,稱其為工作集,其大小隨程式的執行而變化,應自動地排除不再在工作集中的頁面。

17、請求分段虛擬儲存管理:

在段表中加入若干表項,如特徵位、存取許可權、擴充位、標誌位、主存起始地址和段長等。每個分段在邏輯上是獨立的。便於越界檢查和存取控制檢查。

18、Intel X86系列CPU採用3種工作模式:

實地址模式:採用段式實存或單一連續分割槽,無特權級,不啟用分頁機制,定址範圍1MB。

保護模式:採用分段和分頁機制,共有段式、頁式、段頁式3種虛擬儲存管理模式。

虛擬8086模式:是在保護模式下對實地址模式的模擬。Windows和linux在保護模式下執行。

19、主存管理器:

實現虛擬主存,為程式提供一個受保護的大且專用的地址空間,組成:

1)儲存管理系統服務程式:用於虛擬主存的分配、回收和管理。

2)轉換無效和訪問錯誤的陷阱處理程式:用於解決硬體所檢測到的與主存管理有關的異常,並將虛頁面裝入主存。

3)一組系統執行緒:在核心態上下文中執行。包括有工作集管理器,程式/堆疊交換程式,已修改頁面寫入器,對映頁面寫入器,廢棄段執行緒,零頁執行緒。

20、程式主存空間分配:使用兩個資料結構:

1)虛擬地址描述符VAD:程式的虛擬地址不是連續的,空間可達4GB。

2)區域物件:即檔案對映物件,表示可被兩個或多個程式所共享的主存塊。作用如下:

---1、系統利用區域物件將可執行映像和動態連結庫裝入主存。

---2、快取記憶體管理器利用區域物件訪問快取記憶體檔案中的資料。

---3、使用區域物件將會檔案對映到程式虛擬地址空間,然後,可以像訪問主存中的陣列一樣訪問此檔案。

21、應用程式主存管理方法:

1)虛頁主存分配:管理大型物件資料或動態結構陣列。

2)主存堆分配:管理大量的小型主存申請。、

3)主存對映檔案:管理大型資料流檔案及多個程式之間的資料共享。

22、程式頁表與地址對映:

32位邏輯地址被解釋為3個分量:頁目錄索引(10位),頁表頁索引(10位),位移索引(12位),頁面大小為4KB。

程式擁有單獨的頁目錄,這是核心管理器所建立的特殊頁,用於對映程式所有頁表頁的位置,它被儲存在核心程式塊(KPROCESS)中。頁表是按需建立的,大多數程式頁目錄僅指向頁表的已小部分,所以程式頁表中的虛擬地址往往不連續。

頁目錄由頁目錄項PDE組成,每個PDE有4B長,描述程式所有頁表的狀態和位置。每個程式需要一張頁目錄表(有1024個PDE)指出1024張頁面表,每張頁表頁描述1024個頁面,合計描述4GB的虛擬地址空間。

頁框資料庫:由所有主存頁框組成。每個頁框佔一項,每一項稱為一個PFN結構,用來跟蹤物理主存的使用情況。用一個陣列表示,索引號從0起直至最大頁框號。PFN在任一時刻的狀態:

有效。過渡。後備。修改。修改不寫入。空閒。零初始化。壞。




相關文章