目錄
概念
功能
內存空間的分配和回收
地址轉換
邏輯地址(相對地址)
物理地址(絕對地址)
內存空間的擴充
內存共享
存儲保護
方式
源程序變為可執行程序步驟
鏈接方式
裝入方式
覆蓋
交換
連續分配管理方式
單一連續分配
固定分區分配
動態分區分配
非連續分配管理方式
基本分頁存儲管理方式
基本概念
地址結構
基本地址變換機構
具有快表的地址變換機構
兩級頁表
基本分段存儲管理方式
分段
段表
地址變換機構
?分段和分頁的對比
不同點
相同點
段頁式管理
邏輯地址結構
地址變換機構?
虛擬內存管理
概念
特征
虛擬內存技術的實現
(1)請求分頁存儲管理方式
頁表機制
?編輯
缺頁中斷機構
地址變換機構
(2)請求分段存儲管理方式
(3)請求段頁式存儲管理方式
頁面置換算法
(1)最佳(OPT)置換算法
(2) 先進先出 (FIFO)頁面置換算法
(3)最近最久末使用(LRU)置換算法
(4)時鐘(CLOCK) 置換算法/最近未用(NRU)算法
簡單CLOCK 算法實現方法
改進型CLOCK算法
頁面分配
駐留集
內存分配策略
何時調頁
何處掉頁
抖動(顛簸)現象
工作集?
內存映射文件
特性
優點
概念
操作系統對內存的劃分和動態分配就是內存管理的概念。
功能
內存空間的分配和回收
由操作系統完成對主存的分配和回收
地址轉換
使邏輯地址轉換為真實的物理地址
邏輯地址(相對地址)
編譯后,每個目標模塊都從0號單元開始編址,這稱為該目標模塊的相對地址(或邏輯地址)。
物理地址(絕對地址)
物理地址空問是指內存中物理單元的集合,它是地址轉換的最終地址,進程在運行時執行指令和訪問數據,最后都要通過物理地址從主存中存取。
內存空間的擴充
利用虛擬存儲技術或自動覆蓋技術,從邏輯上擴充內存
內存共享
允許多個進程訪問內存的同一部分
存儲保護
保證各道作業在各自的存儲空間內運行,互不干擾
方式
- 設置上下限寄存器
- 利用重定位寄存器、界地址寄存器
源程序變為可執行程序步驟
- 編譯:由編譯程序將用戶源代碼編譯成若千目標模塊。
- 鏈接:由鏈接程序將編譯后形成的一組目標模塊及所需的庫函數鏈接在一起,形成一個完整的裝入模塊。
- 裝入:由裝入程序將裝入模塊裝入內存運行。
鏈接方式
- 靜態鏈接:裝入前鏈接成一個完整裝入模塊
- 裝入時動態鏈接:運行前邊裝入邊鏈接
- 運行時動態鏈接:運行時需要目標模塊才裝入并鏈接
裝入方式
- 絕對裝入:編譯時產生絕對地址(單道程序階段,無OS)
- 可重定位裝入:裝入時將邏輯地址轉換為物理地址(早期多道批處理階段)
- 動態運行時裝入/動態重定位:運行時將邏輯地址轉換為物理地址,需設置重定位奇存器(現代OS)
覆蓋
基本思想:將程序分為多個段(多個模塊)。常用的段常駐內存,不常用的段在需要時調入內存。
具體操作:把內存劃分為一個固定區和若干個覆蓋區,固定區存放用戶程序經常活躍的部分,調入后就不再調出(除非運行結束);將即將訪問的段放在覆蓋區,在需要調用前,系統將其調入覆蓋區,替換原有的段。必須由程序員聲明覆蓋結構,操作系統完成自動覆蓋。
適用情況:同一個程序/進程內
缺點:對用戶不透明,增加了用戶編程負擔,覆蓋技術只用于早期的操作系統中。
交換
基本思想:把處于等待狀態的進程或者被CPU剝奪運行權限的進程從內存移出到外存,這一過程稱為換出;把準備好競爭CPU的進程從外存移到內存,這一過程稱為換入。
適用情況:不同進程/作業間
ps:一般將阻塞、優先級低的進程先換出到磁盤的對換區
連續分配管理方式
單一連續分配
內存被分為:系統區和用戶區。
- 系統區:通常位于內存的低地址部分,用于存放操作系統系統區
- 用戶區:用于存放用戶進程相關數據。
特點:內存中用戶區空間只能有一道用戶程序
優點:實現簡單;無外部碎片(分區外部不存在空間浪費);可以采用覆蓋技術擴充內存;不一定需要采取內存保護(例:早期的PC 操作系統MS- DOS)。
缺點:只能用于單用戶、單任務的操作系統中;有內部碎片(分區內部不存在空間浪費);存儲器利用率極低
固定分區分配
固定分區分配是最簡單的一種多道程序存儲管理方式,它將用戶內存空問劃分為若干個固定大小的區域,每個分區只裝入一道作業。
兩種方法:
- 分區大小相等:缺乏靈活性,只適合用一臺計算機控制多個相同對象的場合。
- 分區大小不等:增加了靈活性,可以滿足不同大小的進程需求。
為便于內存分配,通常將分區按大小排隊,建立一張分區說明表。
優點:實現簡單,無外部碎片。
缺點:當用戶程序太大時,可能所有的分區都不能滿足需求,此時不得不采用覆蓋技術來解決,降低性能;會產生內部碎片,內部利用率低
動態分區分配
在進程裝入內存時,根據進程的大小動態地建立分區,并使分區的大小正好適合進程的需要。
動態分區分配算法
- 首次適應 (First Fit) 算法。空閑分區以地址遞增的次序鏈接。分配內存時順序查找,找到大小能滿足要求的第一個空閑分區。
- 最佳適應(Best Fit) 算法。空閑分區按容量遞增的方式形成分區鏈,找到第一個能滿足要求的空閑分區。
- 最壞適應(Worst Fir) 算法。又稱最大適應 (Largest Fit) 算法,空閑分區以容量遞減的次序鏈接,找到第一個能滿足要求的空閑分區,即挑選出最大的分區。
- 鄰近適應 (Next Fit) 算法。又稱循環首次適應算法,由首次適應算法演變而成。不同之處是,分配內存時從上次查找結束的位置開始繼續查找。
特點:無內部碎片,有外部碎片
非連續分配管理方式
基本分頁存儲管理方式
基本概念
- 頁/頁面:進程中的塊
- 頁框/頁幀/內存塊/物理頁面/物理塊:內存中的塊
- 頁框號/頁幀號/內存塊號/物理塊號/物理頁號:每個頁框有一個編號,從0開始
- 頁表:為了便于在內存中找到進程的每個頁面所對應的物理塊,系統為每個進程建立一張頁表。由頁表項組成的,頁表項由頁號和物理內存中的塊號組成。
ps:頁號不占空間。
地址結構
每頁大小為4KB;地址空間最多允許2的20次方頁
頁號=邏輯地址/頁面長度(取除法的整數部分)
頁內偏移量=邏輯地址 % 頁面長度(取除法的余數部分)
基本地址變換機構
地址變換機構的任務是將邏輯地址轉換為內存中的物理地址。地址變換是借助于頁表實現的。
設頁面長度為L
- 計算頁號P(P=A/L)、頁內偏移量比(W=A%L)
- 比較頁號P和頁表長度M,若P>M,則產生越界中斷,否則繼續執行。
- 頁表中頁號P對應的頁表項地址=頁表始址F+頁號P*頁表項長度,取出該頁表項肉容b,即為物理塊號。頁表長度的值是指一共有多少頁,頁表項長度是指頁地址占多大的存儲空間。
- 計算E=b*L+W,用得到的物理地址區去訪問內存。
具有快表的地址變換機構
快表,又稱聯想奇存器(TLB),是一種訪問速度比內存快很多的高速緩沖存儲器,用來存放當前訪問的若干頁表項,以加速地址變換的過程。快表命中,只需一次訪存,快表末命中,需要兩次訪存。
兩級頁表
二級頁表實際上是在原有頁表結構上再加上一層頁表
基本分段存儲管理方式
分段
其邏輯地址由段號S與段內偏移量W兩部分組成。
- 段號的位數決定了每個進程最多可以分幾個段
- 段內地址拉數決定了每個段的最大長度是多少
段表
每個段表項對應進程的一段,段表項記錄該段在內存中的始址和長度。
地址變換機構
在系統中設置了段表寄存器,用于存放段表始址下和段表長度川。
從邏輯地址A到物理地址E之間的地址變換過程如下
??
- 從邏輯地址A 中取出前幾位為段號 S,后幾位為段內偏移量W
- 比較段號S和段表長度M,若S>M,則產生越界中斷,否則繼續執行。
- 段表中段號S對應的段表項地址=段表始址下+?段號S*段表項長度,取出該段表項的前兒位得到段長C。若段內偏移量 ≥C,則產生越界中斷,否則繼續執行。
- 取出段表項中該段的始址b,計算E=b+W,用得到的物理地址五 去訪問內存。
?分段和分頁的對比
不同點
- 分頁對用戶不可見,分段對用戶可見
- 分頁的地址空間是一維的,分段的地址空間是二維的
相同點
訪問一個邏輯地址都需要兩次訪存
ps:若分頁引入快表則僅需一次訪存
段頁式管理
將分頁存儲管理方式和分段存儲管理方式
邏輯地址結構
地址變換機構?
?
ps:每個進程一張段表,每個段一張頁表???????
虛擬內存管理
概念
虛擬內存:在操作系統的管理下,在用戶看來似乎由一個比實際內存大得多得內存
特征
- 多次性。多次性是指無須在作業運行時一次性地全部裝入內存,而允許被分成多次調入內存運行。
- 對換性。對換性是指無須在作業運行時一直常駐內存,而允許在作業的運行過程中,進行換進和換出。
- 虛擬性。虛擬性是指從邏輯上擴充內存的容量,使用戶所看到的內存容量遠大于實際的內存容量。
虛擬內存技術的實現
(1)請求分頁存儲管理方式
請求分頁存儲管理建立在基本分頁存儲管理基礎之上,為了支持虛擬存儲器功能而增加了請求調頁功能和頁面置換功能。請求分頁是目前最常用的一種實現虛擬存儲器的方法。
頁表機制
請求分頁中的頁表項
狀態位P。用于指示該頁是否已調入內存,供程序訪問時參考。
訪問字段A。用于記錄本頁在一段時問內被訪問的次數,或記錄本頁最近已有多長時間末被訪間,供置換算法換出頁面時參考。
修改位M。標識該頁在調入內存后是否被修改過。
外存地址。用于指出該頁在外存上的地址,通常是物理塊號,供調入該頁時參考。
缺頁中斷機構
在請求分頁系統中,每當要訪問的頁面不在內存時,便產生一個缺頁中斷(內中斷),然后由操作系統的缺頁中斷處理程序處理中斷。此時缺頁的進程阻塞,放入阻塞隊列,調頁完成后再將其喚醒,放回就緒隊列。
- 若內存中有空閑塊,則為進程分配一個空閑塊,將所缺頁面裝入該塊,并修改頁表中相應的頁表項。
- 若內存中無空閑塊,則由頁面置換算法選擇一個頁面淘汰,若該頁面在內存期間被修改過,則要將其寫回外存。未修改過的頁面不用寫回外存。
地址變換機構
(2)請求分段存儲管理方式
(3)請求段頁式存儲管理方式
頁面置換算法
(1)最佳(OPT)置換算法
算法思想:選擇以后永不使用的頁面淘汰或者在最長時間內不再被訪問的頁面,以保證獲得最低的缺頁率
(2) 先進先出 (FIFO)頁面置換算法
算法思想:優先淘汰最早進入內存的頁面,即在內存中駐留時間最久的頁面。
Belady 異常:當為進程分配的物理塊數增大時,缺頁次數不減反增的異常現象。
只有FIFO 算法會產生Belady 異常。
(3)最近最久末使用(LRU)置換算法
算法思想:選擇最近最久時間末訪問過的頁面予以淘汰。
(4)時鐘(CLOCK) 置換算法/最近未用(NRU)算法
算法要循環掃描緩沖區,像時鐘的指針一樣轉動
簡單CLOCK 算法實現方法
- 第一輪將訪問過的標志位置為0;
- 第二輪將標志位為0的頁面置換出
改進型CLOCK算法
利用(訪問位,修改位)的形式表示各頁面狀態。
- 第一輪:從當前位置開始掃描到第一個(0,0)的幀用于替換。本輪掃描不修改任何標志位
- 第二輪:若第一輪掃描失敗,則重新掃描,查找第一個(0,1)的幀用于替換。本輪將所有掃描過的幀訪問位設為0
- 第三輪:若第二輪掃描失敗,則重新掃描,查找第一個(0,0)的幀用于替換。本輪掃描不修改任何標志位
- 第四輪:若第三輪掃描失敗,則重新掃描,查找第一個(0,1)的幀用于替換
詳細過程講解請觀看“王道考研-操作系統”:3.2_3_頁面置換算法_嗶哩嗶哩_bilibili
頁面分配
駐留集
指請求分頁存儲管理中給進程分配的物理塊的集合。
內存分配策略
- 固定分配:操作系統為每個進程分配一組固定數目的物理塊,在進程運行期問不再改變。即駐留集大小不變
- 可變分配:先為每個進程分配一定數目的物理塊,在進程運行期問,可根據情況做適當的增加或減少。即駐留集大小可變
- 局部置換:發生缺頁時只能選進程自己的物理塊進行置換。
- 全局置換:可以將操作系統保留的空閑物理塊分配給缺頁進程,也可以將別的進程持有的物理塊置換到外存,再分配給缺頁進程。
- 固定分配局部置換:進程運行前就分配一定數量物理塊,缺頁時只能換出進程自己的某一頁
- 可變分配局部置換:頻繁缺頁的進程,多分配一些物理塊;缺頁率很低的進程,回收一些物理塊。直到缺頁率合適
- 可變分配全局置換:只要缺頁就分配新物理塊,可能來自空閑物理塊,也可能需換出別的進程頁面
何時調頁
- 預調頁策略:一般用于進程運行前
- 請求調頁策略:進程運行時,發現缺頁再調頁
何處掉頁
- 對換區——采用連續存儲方式,速度更快;文件區——采用離散存儲方式,速度更慢。
- 對換區足夠大:運行將數據從文件區復制到對換區,之后所有的頁面調入、調出都是在內存與對換區之間進行
- 對換區不夠大:不會修改的數據每次都從文件區調入;會修改的數據調出到對換區,需要時再從對換區調入
- UNIX方式:第一次使用的頁面都從文件區調入;調出的頁面都寫回對換區,再次使用時從對換區調入
抖動(顛簸)現象
頁面頻繁換入換出的現象。主要原因是分配給進程的物理塊不夠
工作集?
在某段時間間隔里,進程實際訪問頁面的集合。駐留集大小一般不能小于工作集大小
內存映射文件
特性
- 進程可使用系統調用,請求操作系統將文件映射到進程的虛擬地址空間
- 以訪問內存的方式讀寫文件
- 進程關閉文件時,操作系統負責將文件數據寫回磁盤,并解除內存映射
- 多個進程可以映射同一個文件,方便共享
優點
- 程序員編程更簡單,已建立映射的文件,只需按訪問內存的方式讀寫即可
- 文件數據的讀入/寫出完全由操作系統負責,I/O效率可以由操作系統負責優化