⑴ 內存管理
在一段時間內,程序的執行僅限於某個部分,相應地,它所訪問的存儲空間也局限於某個區域。
局部性原理的 分類 :
將編譯後的目標模塊裝配成一個可執行程序。
可執行程序以 二進制可執行文件 的形式存儲在磁碟上。
鏈接程序的 任務 :
程序的鏈接,可劃分為:
重定位 :將邏輯地址(相對地址)轉換為物理地址(絕對地址)的過程。
物理地址 = 邏輯地址 + 程序在內存中的起始地址
程序的裝入,可劃分為:
任何時刻主存儲器 最多隻有一個作業 。
每個分區 大小固定不變 :分區大小相等、分區大小不等。
每個分區可以且 僅可以裝入一個作業 。
使用 下限寄存器 和 上限寄存器 來保存當前作業的起始位置和結束位置。
使用 固定分區說明表 區分各分區的狀態。
分區 大小不是預先固定的 ,而是按作業(進程)的實際需求來劃分的。
分區 個數也不是預先固定的 ,而是由裝入的作業數決定的。
使用 空閑分區表 說明空閑分區的位置。
使用 空閑分區鏈 說明空閑分區的位置。
首次適應演算法的 過程 :
外部碎片:空閑內存 沒有在 分配的 進程 中。
內部碎片:空閑內存 在 分配的 進程 中。
從 上次找到的 空閑分區的 下一個 空閑分區開始查找。
優點:空閑區分布均勻、查找開銷較小。
缺點:缺乏大空閑區。
最佳適應演算法的 過程 :
優點:提高內存利用率。
注意點:每次在進行空閑區的修改前,需要先進行 分區大小遞增 的排序。
頁 :將一個 進程 的 邏輯地址空間 分成若干個 大小相等 的 片 。
頁框 :將 物理內存空間 分成與頁大小相同的若干個 存儲塊 。
分頁存儲 :將進程的若干 頁 分別裝入多個 可以不相鄰 的 頁框 中。
頁內碎片 :進程 最後一頁 一般裝不滿一個頁框,形成 頁內碎片 。
頁表 :記錄描述頁的各種數據,實現從 頁號 到 頁框號 的映射。
注意: 頁內偏移量 的單位是 位元組 。
分頁地址變換指是: 邏輯地址 通過 地址變換機構 變換為 物理地址 。
分頁地址變換的 過程 :
操作系統在修改或裝入頁表寄存器的值時,使用的是 特權級 指令。
頁大小:512B ~ 4KB,目前的計算機系統中,大多選擇 4KB 大小的頁。
頁大小的 選擇因素 :
快表也稱為「轉換後援緩沖」,是為了提高CPU訪問速度而採用的專用緩存,用來存放 最近被訪問過的頁表項 。
英文縮寫:TLB。
組成: 鍵和值 。
在TLB中找到某一個頁號對應的頁表項的百分比稱為 TLB命中率 。
當 能 在TLB中找到所需要的頁表項時:
有效訪問時間 = 一次訪問TLB 的時間 + 一次訪問內存 的時間(訪問內存讀寫數據或指令)
當 不能 在TLB中找到所需要的頁表項時:
有效訪問時間 = 一次訪問TLB 的時間 + 兩次訪問內存 的時間(一次訪問內存頁表,一次訪問內存讀寫數據或指令)
將頁表再分頁,形成兩級或多級頁表,將頁表離散地存放在物理內存中。
在進程切換時,要運行的進程的頁目錄表歧視地址被寫入 頁表寄存器 。
在二級分頁系統中,為頁表再建立一個頁目錄表的目的是為了能在地址映射時得到頁表在物理內存中的地址,在頁目錄表的表項中存放了每一個 頁表 在物理內存中所在的 頁框號 。
虛擬存儲器 :是指具有 請求調入功能 和 置換功能 ,能 從邏輯上對內存容量進行擴充 的一種存儲系統。
請求調入 :就是說,先將進程一部分裝入內存,其餘的部分什麼時候需要,什麼時候請求系統裝入。
置換 :如果請求調入時,沒有足夠的內存,則由操作系統選擇一部分內存中的進程內容移到外存,以騰出空間把當前需要裝入的內存調入。
為了實現請求分頁,需要:
保證進程正常運行的所需要的最小頁框數。
最小頁框數與進程的大小沒有關系,它與計算機的 硬體結構 有關,取決於 指令的格式、功能和定址方式 。
內存不夠時,從進程本身選擇淘汰頁,還是從系統中所有進程中選擇?:
採用什麼樣的演算法為不同進程分配頁框?:
常用的兩種 置換策略 : 局部置換 和 全局置換 。
從分配給進程的頁框數量上看,常使用的兩種 分配策略 : 固定分配 和 可變分配 。
用新調入的頁替換 最長時間沒有訪問 的頁面。
找到 未來最晚被訪問 的那個頁換出。
,P為缺頁率。
有效訪問時間與缺頁率成 正比 ,缺頁率越高,有效訪問時間越長,訪問效率越低。
工作集 :某段時間間隔里,進程實際要訪問的頁的集合。
引入工作集的 目的 :降低缺頁率,提高訪問內存效率。
抖動 :運行進程的大部分時間都用於頁的換入換出,幾乎不能完成任何有效果工作的狀態。
抖動的 產生原因 :
抖動的 預防方法 :
在分段存儲管理的系統中,程序使用 二維 的邏輯地址,一個數用來表示 段 ,另一個數用來表示 段內偏移量 。
引入分段的 目的 :
引入分段的 優點 :
進程的地址空間被劃分成 若干個段 。
每個段定義了一組邏輯信息,每個段的大小由相應的邏輯信息組的長度確定, 段的大小不一樣 ,每個段的邏輯地址從0開始,採用一段 連續的地址空間 。
系統為每個段分配一個 連續的物理內存區域 ,各個 不同的段可以離散 地放入物理內存不同的區域。
系統為 每個進程建立一張段表 ,段表的每一個表項記錄的信息包括: 段號、段長和該段的基址 ,段表存放在內存中。
分段的 邏輯地址結構 :
段表是由操作系統維護的用於支持分段存儲管理 地址映射 的數據結構。
每個進程有一個段表,段表由段表項構成。每個段表項包括: 段號、段長(段的大小)和該段的基址(段的起始地址) 。
若已知邏輯單元的地址為 S:D (段號:段內偏移量),求相應物理地址的步驟如下:
相同點 :分頁和分段都屬於 離散 分配方式,都要通過數據結構與硬體的配合來實現 邏輯地址到物理地址 的映射。
不同點 :
將用戶進程的邏輯空間 先劃分為若干個段 , 每個段再劃分成若干個頁 。
進程以頁為單位在物理內存中 離散 存放,每個段中被離散存放的頁具有 邏輯相關性 。
為了實現地址映射,操作系統為 每個進程建立一個段表 ,再為 每個段建立一個頁表 。
進程段表的段表項組成:
滿足以下條件的兩個塊稱為 夥伴 :