文章目錄
程序的鏈接與裝入
程序的裝入
目的:是將代碼裝入內存準備執行
- 絕對裝入方式
- 可重定位裝入方式:
- 動態運行時的裝入方式:增加一個重定位寄存器,通過硬件完成地址的修正。真實地址等於邏輯地址+重定位寄存器上的地址
程序的鏈接
目的:將目標模塊相對獨立的地址空間合併成一個地址空間。
- 靜態鏈接方式
- 對相對地址進行修改
- 變換外部調用符號
- 裝入時動態鏈接
- 運行時動態鏈接
連續存儲分配方式
目的:給每一個程序分配一片連續的存儲空間,容量爲程序運行時所需的最大空間。
指標:碎片率,越小越好。
單一連續分配
內存分爲系統區和用戶區
- 用戶區一次只能裝入一個程序運行
- 系統區裝入操作系統
固定分區分配方式
將內存劃分成固定數目的區域,如圖所示:
爲了實現內存的管理,需要建立固定分區表(數組實現):
程序的大小和分區大小不能完全匹配,所以需要分配大於等於程序大小的內存,分區中浪費的空間稱爲內碎片
動態分區分配(***)
操作系統不預設固定數目分區,按照程序內存需求爲其劃分,內存中分區數目動態變化。
數據結構:
分配算法:
- 首次適應算法:空閒分區以地址遞增的順序排列,
每次從鏈首開始順序查找
,直到找到一個大小能滿足要求的空閒分區爲止。然後再按照程序的要求大小,從該空閒分區中劃分出一塊內存空間給請求者,餘下的空閒部分仍留在空閒鏈表中。特點是低端或高端地址空間被頻繁使用。
- 循環首次適應算法:在首次適應算法的基礎上,
每次查找時從上次找到空閒分區的下一個空閒分區開始查找。特點是空閒分區使用均勻,但是會缺乏大的空閒分區。
- 最佳適應算法:能滿足要求、又是最小的空閒分區分配給作業,避免"大材小用”。特點:分區按照大小順序排列。
- 最差適應算法:每次從空閒分區中選擇最大的空閒分區分配給程序,以便切割剩餘的空閒分區空間更大。
切割操作會產生一些空間過小,總是不會分配給程序,這些空間被稱作外碎片。
### 可重定位分區分配
緊湊:通過移動程序,將外碎片合併一個大的空閒分區
基本分頁存儲管理方式
離散分配的基本單位是頁
頁表
解決了邏輯地址到物理地址的轉換的問題:
- 將程序邏輯地址空間劃分成固定大小的頁面;
- 內存劃分成等大小的頁框;
頁表實現頁面到頁框的索引;
- 頁表項個數由程序的邏輯地址空間決定,頁表項位數由頁框起始物理地址位數決定。
記錄了頁面和頁框號(每個頁框的起始地址)的對應關係,如下圖所示:
頁表存儲了頁框的起始物理地址,需要一個連續的存儲空間實現隨機訪問,對於邏輯地址相當於頁號+頁內偏移。
地址變換機構(***)
- 先讓頁號與頁表基址相加得到頁框號
- 再讓頁框號與頁內偏移相加得到物理地址
基本分段存儲管理方式
- 離散分配的基本單位是端
- 採用二維邏輯地址結構,由段號加段內偏移構成
段表
地址變換機構(***)
分頁和分段的主要區別
- 頁是信息的物理單位;段是信息的邏輯單位。
- 頁大小固定;段大小不固定。
- 分頁採用一維線性邏輯地址,分段採用二維邏輯地址。
虛擬存儲器(***)
概念:虛擬存儲器是指具有請求調入功能和置換功能,能從邏輯上對內存容量加以擴充的一種存儲器,其邏輯容量由內存容量和外存容量之和決定,運行速度接近於內存速度,每位成本接近外存。
虛擬存儲器實現方法的硬件支持
分頁請求系統
- 請求分頁的頁表機制
- 缺頁中斷機構
- 地址變換機構
分段請求系統
- 請求分段的端表機制
- 缺段中斷機構
- 地址變換機構
頁面置換算法(***)
頁面中斷:發生頁面的置換
最佳置換算法(理想化)
置換以後永不使用或者最長時間不使用的頁面
- 發生3次缺頁中斷和頁面中斷
先進先出頁面置換算法
淘汰最先進入的頁面,即選擇在內存中駐留時間最久的頁面予以淘汰。
最近最久未使用置換算法(LRU)
選擇最近最久未使用的頁面予以淘汰,即當前使用次數最少的頁面。
實現方式:
- 利用棧保存當前使用的各個頁面的頁面號,每當進程訪問某頁面時,便將該頁面的頁面號從棧中彈出,並將它壓入棧頂。
因此,棧底是最近最久未使用的頁面。
- 使用寄存器,每一次訪問都會在寄存器加一,每次置換選擇寄存器中次數最少的頁面
clock置換算法
簡單clock置換算法(最近未訪問頁面置換算法)
- 將所有的頁面組成一個循環鏈表,併爲每個頁面添加一個訪問位A。
- 當一個頁面被訪問時,將其A位設置爲1。
- 置換過程是從pointer開始,若該頁面的A位爲1,將其設置爲0,並使pointer指向下一個頁面,直到找到A位爲0的頁面;若該頁面的A位爲0,則將其置換出內存,並用換入的頁面佔用換出頁面的頁框,使pointer指向下一個頁面。
- 如果第一輪沒有找到,則執行第二輪,由於第一輪將所有頁面的A都設置爲0,則一定能在第二輪找到
改進型clock置換算法
增加一個修改爲M,頁面狀態可以分爲四類:
- 1類(A=0,M=0) ,未訪問未修改;
- 2類(A=0,M= 1),未訪問.已修改;
- 3類(A=1,M=0),已訪問未修改;
- 4類(A=1, M= 1) ,已訪問已修改;
置換過程:
- 從pointer開始尋找1類頁面,直到找到1類頁面結束,或者掃描完一遍進入第II步。
- 從pointer開始尋找2類頁面, 直到找到2類頁面結束,或者掃描完一遍進入第I步。在本步每掃描完一個頁面,須將頁面的訪問位修改爲0。
- 重複l和II。(一 定可以找到置換的頁。)
最近最少未使用(LFU)
在最近時期內選擇使用次數最少的頁面作爲淘汰頁