存儲管理

1.程序的鏈接和裝入

1)源程序裝入主存的步驟:
  • 編譯:由編譯程序(Compiler)將用戶源代碼編譯成若干目標模塊;
  • 鏈接:由鏈接程序(Linker)將編譯後形成的一組目標模塊以及它們所需要的庫函數鏈接在一起,形成一個完整的裝入模塊;
  • 裝入:由裝入程序(Loader)將裝入模塊裝入主存


2)程序的鏈接方式:

  • 靜態鏈接:在程序運行前,將各個目標模塊以及所需的庫函數鏈接成一個完整的裝入模塊,又稱爲可執行文件。


  • 裝入時動態鏈接:在裝入主存時,採用邊裝入邊鏈接的方式。即在裝入一個目標模塊時,若需要調用另一個模塊,則找出該模塊,將它裝入主存,並修改目標模塊的邏輯地址。
  • 運行時動態鏈接:指在程序執行過程中當需要該目標模塊時,才把它裝入主存並進行鏈接,而不是把所有模塊一起裝入主存。
3)裝入主存的方式:
  • 絕對裝入方式:如果在編譯時就知道程序駐留在主存的具體位置,則編譯程序將產生物理地址的目標代碼。絕對裝入程序按照裝入模塊的地址,將程序和數據裝入主存。模塊裝入後,由於程序中的邏輯地址和與實際主存地址一致,所以不需要進行地址修改。只適合於單道程序環境。
  • 靜態重定位裝入:在裝入作業時,把作業中的指令地址和數據地址一次性全部轉換成物理地址,這樣在作業執行過程中無無需再進行地址轉換。

  • 動態重定位裝入:在裝入時,直接把作業裝入主存中。在作業執行時,隨着每條指令的訪問,由硬件地址轉換機制自動將指令中的邏輯地址換成物理地址。地址轉換機制由一個基地址寄存器和一個地址轉換線路組成。在該方式下,作業可以改變存儲區域,則成程序是可浮動的。

2.連續的存儲管理

1)單一連續存儲管理
  • 特點:操作系統佔用一部分主存空間,其餘的主存空間作爲一個連續分區全部分配給一個作業使用,即任何時刻主存中最多隻有一個作業。適合於單用戶,單任務操作系統。
  • 缺點:CPU利用率比較低;存儲器得不到充分利用;計算機外圍設備利用率不高
2)固定分區存儲管理:
  • 特點:預先把主存的用戶區分割成若干連續區域,每一個連續區域成爲一個分區,每個分區大小不一定相同。分割完成後,大小不能改變。每個分區只可以裝入一個作業,不允許作業跨分區存儲。
  • 空間的分配和去配:系統設置一直主存分配表以說明各分區的分配情況。該表長度由分區個數決定,記錄了各個分區的起始地址和長度,併爲每個分區設置一個狀態標誌位。當標誌爲0時,該分區爲空閒。

3)可變分區存儲管理:
  • 特點:根據作業所需空間大小和當時主存空間的實際情況決定是否爲該作業分配一個分區。主存的分區大小是可變的,根據作業實際需求進行分區劃分。
  • 空間分配和去配:當作業要求裝入主存,系統根據作業對主存空間的實際需求量進行分配。若空閒分區大小爲m,作業所需空間爲n,m-n<=size(size爲系統事先規定不可再分割的剩餘分區的大小),則將整個空閒分區分配個作業;否則從空閒分區中分割出一個分區給作業;若m<n,則不能裝入。
  • 可變分區數據結構:
    a。分區表:設置空閒分區表和已分配分區表。表記錄起始地址,長度,標誌位(指出該分區分配情況)。
    b。分區鏈:在每個分區的起始部分設置用於控制分區分配的信息以及用於鏈接前一個分區的前向指針;在分區尾部設置一個後向指針,將所有空閒分區形成雙項鍊。
  • 可變分區分配算法:
    a。最先適應分配算法:總是按順序查找空閒分配表,選擇第一個滿足作業空間大小的分區進行分割。(最好最快)
    b。最優適應分配算法:總是選擇一個滿足作業空間大小的最小空閒分區進行分配。(性能最差)
    c。最壞適應分配算法:總是選擇一個滿足作業空間大小的最大空閒分區進行分配。
  • 空間回收:檢查是否存在與回收區相鄰的空閒分區,有則合併。
    a。上有空閒或下有空閒:空閒區數不變,合併爲一個空閒區,修改空閒區的起始地址或長度。
    b。上,下都有空閒:空閒區數-1
    c。上,下都沒有空閒:空閒區數+1
  • 移動技術:將分散的空閒區集中起來以容納新的作業,提高空間利用率。

4)覆蓋技術和交換技術:在多道程序環境下用來擴充主存的方式。
  • 覆蓋技術:一個程序不需要把所有的指令和數據都裝入主存。程序被劃爲若干功能相對獨立的程序段,讓這些不會同時執行的程序段共享一塊主存。將程序的必要部分的代碼和數據常駐主存,可選部分平時放在外存,需要才裝入主存。所以主存分爲常駐區和覆蓋區(可多個)。主要在同一個進程或作業內進行
  • 交換技術:把主存中暫時不能運行的進程或暫時不使用的程序和數據換出到外存,以騰出空間把已具備運行條件的進程或進程所需的程序和數據換入主存。主要是進程或作業之間進行。

3.頁式存儲管理

1)基本原理:把主存劃分成大小相等的若干區域,每個區域稱爲一塊,並加以順序編號。用戶邏輯地址由兩部分組成:頁號和頁內地址。地址長度32位爲例:塊大小爲2^12=4KB,邏輯地址有2^20頁。

2)存儲空間的分配與去配:採用“位示圖”來記錄主存的分配情況。圖中的每一位與一個物理塊對應,用0/1表示佔用情況,另用一個字節記錄當前系統的剩餘空閒塊總數。根據所在字號,位號,得到塊號:塊號=字號 * 字長  +  位號。回收時,根據塊號,得到字號=塊號/字長,位號=塊號%字長。

3)頁表與地址轉換: 系統給作業分頁,建立一張頁面映像表,簡稱頁表。它實現了頁號到塊號的地址映像。分頁式存儲管理採用動態重定位方式裝入作業。根據頁號,獲取塊號,再按邏輯地址的頁內地址計算出物理地址。
物理地址 = 塊號 * 塊長 + 頁內地址



4)快表:在地址變換機構中增設一個具有並行查找能力的小容量高速緩衝寄存器,又稱爲相聯寄存器。在該寄存器中存放頁表的一部分,該部分的頁表成爲快表。


4.段式存儲管理

1)基本原理:每個作業由若干個相對獨立段組成,段號從0開始,每一段的邏輯地址也從0開始。段內地址是連續的,而段與段之間的地址可以是不連續的。段式存儲管理的邏輯地址由段號和段內地址兩部分組成:

2)空間的分配和去配:以段爲單位進行主存分配,每個段佔有一個連續空間,但各個段之間可以離散地存放在主存的不同區域。系統爲每個進程建立一直段映射表,簡稱段表。每個段在表中佔一個表項,記錄該段在主存的起始地址和長度。如果裝入時沒有滿足該段空間大小的空閒區,則可採用移動技術合併分散的空閒區。執行結束後,把回收的主存空間登記在空閒區表中。


3)地址轉換:採用動態重定位裝入作業。段表的表目起到了基址寄存器和限長寄存器的作用。

5.分頁和分段存儲管理的主要區別

  • 頁是信息的物理單位,是系統管理的需要而不是用戶;段是信息的邏輯單位,它含有一組意義相對完整的信息,更好滿足用戶需要。
  • 頁的大小固定且系統決定;段的長度不固定,有用戶程序決定
  • 分頁式作業的地址空間是一維的,頁間邏輯地址是連續的;分段式作業的地址空間是二維的,段間邏輯地址是不連續的。

6.段頁式存儲管理

用戶對作業採用分段組織,在主存空間分配時,把每段分成若干頁面,這樣每段不必佔據連續的主存空間,可把它按頁存放在不連續的主存塊。邏輯地址格式:


段頁式存儲管理的地址轉換機構:


7.虛擬存儲管理

1)局部性原理:程序的執行僅侷限於某個部分,而它所訪問的存儲空間也侷限在某個區域中。表現在兩個方面:時間侷限性,空間侷限性。
  • 時間侷限性:某條指令一旦執行,在不久以後該指令可能再次執行。
  • 空間侷限性:一旦程序訪問了某個存儲單元,在不久以後其附近的存儲單元也將被訪問。
2)虛擬存儲管理基本原理:基於局部性原理,可以把作業信息保存在磁盤上,當作業請求裝入時,只需將當前運行所需要的一部分信息先裝入主存。作業執行過程中,如果所訪問信息已調入主存,則可繼續執行;如果沒有裝入,則將信息裝入,繼續執行;如果此時主存已滿,則系統將主存暫時不用的信息置換到磁盤上。

3)四大特徵:離散性,多次性(最重要特效),對換性,虛擬性


8.請求分頁式存儲管理

1)調入方式:當需要訪問的數據和指令不在主存中,從而發生缺頁中斷,於是系統將外存中的相應頁面調入主存。

2)頁表機制:
頁號 物理塊號 狀態位 訪問字段 修改位 輔存地址
  • 狀態位:該頁是否已調入主存,是則爲1
  • 物理塊號:當狀態位爲1時,指出該頁在主存中的佔用塊
  • 輔存地址:當狀態位爲0時,之處該頁在磁盤上的地址
  • 訪問字段:記錄該頁在一段時間內被訪問的次數或記錄該頁多久沒有被訪問
  • 修改位:表示該頁在調入貯存後是否被修改,由於作業在輔存中保留一份備份,若沒有被修改則不用回寫。

3)缺頁中斷機制和地址變換機制:


4)頁面置換策略:
  • 固定分配局部置換策略:爲每個進程分配一定數目的主存物理塊,在整個運行期間不變。如果發送缺頁,則只能從該進程在主存的n個頁面中選一頁換出,保證分配給該進程的主存空間不變。
  • 可變分配局部置換:爲每個進程分配一定數目的主存物理塊,只能從該進程在主存的n個頁面中選一頁換出。當一個進程的缺頁率高時,爲該進程分配若干附加物理塊,直到缺頁率減少到適當程度;若缺頁率特別低時,可適當減少物理塊數。
  • 可變分配全局置換:爲每個進程分配一定數目的主存物理塊,系統保持一個空閒塊隊列。當一個進程發生缺頁時,從隊列中取出一塊,分配給該進程。當空閒物理塊隊列爲空時,系統才從主存中選擇頁面置換。
5)“顛簸”現象:剛被調出的頁面又要把它調入,剛剛調入的頁面又要調出,如此反覆使調度頻繁,以至於大部分時間花費在來回調度上的現象。(也叫“抖動”)

6)頁面置換算法:
  • 最佳置換算法(OPT):被淘汰的頁面將以後永遠不再使用,或者在將來最長時間內不再被訪問。該算法是理想化算法,是作爲衡量其他算法的標準
  • 先進先出算法(FIFO):淘汰最先注入的頁面。
  • 最近最少用算法(LRU):選擇最近一段時間內最長時間沒有被訪問的頁面調出。在頁表增加引用位,每次被訪問就置0,重新計時。檢查頁表各頁的引用位,選擇最長時間沒有被訪問的頁面淘汰,把頁面所有引用位清零。
  • 時鐘置換算法(Clock):相當於LRU近似算法。系統選擇一個時間週期T,每個一個T就把引用位清零。在T內,被訪問的頁面引用位爲1,沒有的仍爲0。缺頁時,還根據修改位來選擇淘汰。淘汰順序:沒有被修改,沒有被引用;沒有被修改,有引用;有被修改,沒有被引用;有修改,有引用。
  • 最近最不常用置換算法(LFU):選擇訪問次數最少的頁面調出

注:部分圖片來源與百度

發佈了24 篇原創文章 · 獲贊 14 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章