操作系统(3) -- 内存管理
3.1 內存管理概念
內存管理的基本原理和要求
為什么要進行內存管理?
雖然內存容量在不斷增長,但是仍然不可能將所有用戶進程和系統所需要的全部程序與數據放入主存,于是操作系統需要對內存空間進行合理的劃分和動態分配
內存管理的功能:
內存空間的分配與回收
地址轉換
內存空間的擴充
存儲保護
程序裝入和鏈接
創建進程首先把程序和數據裝入內存,分幾個步驟:
-
編譯
-
鏈接
-
鏈接方式:靜態鏈接、裝入時動態鏈接、運行時動態鏈接
-
-
裝入
-
裝入方式:絕對裝入、可重定位裝入、動態運行時裝入
-
邏輯地址和物理地址:
邏輯地址:編譯后每個目標模塊都從0號單元開始編址
物理地址:地址轉換的最終地址。
地址重定位:裝入程序將可執行代碼裝入內存時,必須把邏輯地址轉換為物理地址
內存保護:
CPU中設置上、下限寄存器,存放作業在主存中的下限和上限地址
用重定位寄存器(或基址寄存器)和界地址寄存器,重定位含最小的物理地址值,界地址存邏輯地址最大值。每個邏輯地址值必須小于界地址寄存器的值,未發生越界,加上重定位寄存器的值后映射成物理地址。
覆蓋與交換:
用來擴充內存的兩種技術
覆蓋;用戶空間分一個固定區和若干覆蓋區。經常活躍的部分放固定區,其余部分按調用關系分段。先將即將要訪問的調入覆蓋區。
交換:把處于等待態的程序從內存移到輔存,把內存騰出來。把準備好競爭CPU運行的程序從輔存調到主存。
交換技術主要在不同進程之間,覆蓋在同一個程序或進程中。
連續分配方式
單一連續分配:內存中永遠只有一道程序,不會越界。比較簡單,無外部碎片,可以采用覆蓋技術,但只能用于單用戶、單任務的操作系統中,有內部碎片,存儲器利用率低。
固定分區分配:將用戶內存空間劃分若干固定大小的鵲羽,每個分區只裝入一道作業。無外部碎片,不能實現多進程共享一個內存區,存儲利用率低。
動態分區分配:不預先劃分內存,在進程裝入內存時,根據進程大小動態建立分區。動態分區分配策略:
首次適應,按地址遞增鏈接,最簡單且最好和最快的
最佳適應,按容量遞增鏈接
最壞適用:按容量遞減
鄰近適應
非連續分配管理方式
允許一個程序分散地裝入不相鄰的內存分區。按分區大小是否固定,分分頁和分段:
基本分頁存儲管理方式
思想:主存劃分若干大小相同且固定的塊,作為主存的基本單位。每個進程也以塊為單位進行劃分,進程執行時,以塊為單位逐個申請主存中的快空間
概念:
-
頁面和頁面大小:進程中的塊稱頁,內存中的塊稱頁框,外存直接稱塊。
-
地址結構:頁號P+頁內偏移量W,長32位。
-
頁表:很多頁表項的集合。頁號+物理內存中的塊號
-
頁表項的第二部分和地址的第二部分共同構成物理地址
基本地址變化機構
在系統中設置頁表寄存器,存放頁表在內存的始址F和頁表長度M。設頁面大小L,邏輯地址A到物理地址E的變換過程如下:(邏輯地址,頁號,每頁長度都是十進制)
計算頁號P(P=A/L)和頁內偏移量W(W=A%L)
比較頁號P和頁表長度M,若P>=M,產生越界,否則繼續
頁表中頁號P對應的頁表項地址=頁表始址F+頁號P*頁表項長度,取出該頁表項內容b,即物理塊號
計算E=b*L+W,即為物理地址
具有快表的地址變換機構
若頁表全部放在內存中,存取一個數據訪存2次,第一次訪問頁表,第二次訪問數據。有點慢,于是在地址變換機構中增設一個具有并行查找能力的cache——快表(TLB),存放當前訪問的若干頁表項,加速地址轉換。
兩級頁表
基本分段存儲管理方式
分頁是從計算機的角度考慮設計,目的是提高內存的利用率,提升計算機性能;分頁通過硬件實現,對用戶完全透明。分段是考慮用戶和程序員而提出。
分段:按用戶進程中的自然段劃分邏輯空間,邏輯地址:段號S與段內偏移量W
段表:進程有自己的一張邏輯空間與內存空間映射的段表,每個段表項對應進程一段,記錄該段在內存中的起始地址和長度。段表:段號+段長+本段在內存中地址
地址轉換機構:設置段表寄存器,存段表始址F和段表長度M
段的共享與保護
段頁式管理方式
作業的地址空間被分成若干邏輯段,每段有自己的段號,然后將段分成若干固定大小的頁。
作業的邏輯地址:段號S+頁號P+頁內偏移量W
?
3.2 虛擬內存管理
虛擬內存的基本概念:
傳統存儲管理方式的特征:前面所述內存管理策略都是為了同時將多個進程保存在內存中,以便多道程序設計。特征:一次性(作業一次性裝入內存才能運行)、駐留性(除非進程運行結束,否則作業一直駐留在內存中)
局部性原理:
時間局部性:執行過的指令、訪問過的數據不久后又繼續執行
空間局部性:訪問某個存儲單元,該存儲單元附近的單元也會被訪問。
虛擬存儲器的定義和特征
定義:程序裝入時,先將一部分裝入內存,程序就可以執行。在運行過程中,所訪問信息不在內存中時,由OS調入內存,繼續執行程序。另一方面,將內存中暫時不使用的內容換到外存上,騰出空間。這樣,系統好像提供了一個比實際內存大得多的存儲器。
特征:
-
多次性
-
對換性
-
虛擬性
虛擬內存技術的實現
虛擬內存的實現建立在離散分配的內存管理方式的基礎上。實現方式如下:
-
請求分頁
-
請求分段
-
請求段頁式
不管哪種,需要以下硬件支持:
-
一定容量的內外存
-
頁表機制
-
中斷機構
-
地址變換機構
請求分頁管理方式
請求分頁建立在基本分頁系統基礎上,為支持虛擬存儲器增加了請求調頁功能和頁面置換功能。
頁表機制
請求分頁中的頁表項:
頁號 物理塊號 狀態位P(是否已調入內存) 訪問字段A(記錄訪問次數) 修改位M 外存地址
缺頁中斷機構
當所訪問的頁面不在內存中時,產生一個缺頁中斷,請求OS調入頁面。此時將缺頁的進程阻塞,若內存有空閑塊,則分配塊,將頁面裝入,并修改頁表中的頁表項。若沒有,按淘汰算法淘汰某頁、
地址變換機構
頁面置換算法
選擇調出頁面的算法叫做頁面置換算法。
最佳置換算法(OPT)
被淘汰的頁面是以后永不使用的頁面,或是最長時間內不再被訪問的頁面,以便保證獲得最低的缺頁率。然而該算法無法實現,因為無法預知進程的若干頁面哪個未來最長時間不被訪問。
先進先出(FIFO)
優先淘汰最先進入內存的頁面。FIFO算法會產生所分配的物理塊數增大而頁故障樹不增反減的現象,此現象叫做Belady異常。
最近最久未使用(LRU)
選擇最近最久未訪問過的頁面予以淘汰。該算法為每個頁面設置一個訪問字段,記錄頁面自上次被訪問以來所經歷的時間,淘汰頁面時選擇現有頁面中值最大的淘汰。
時鐘(CLOCK),最近未用算法(NRU)
給每幀關聯一個使用位。當某頁首次裝入主存時,將該幀的使用位設置為1;當該頁隨后再被訪問到時,使用位也被置1。對頁替換算法,用于替換的候選幀集合視為一個循環緩沖區。當需替換一頁時,順序掃描循環緩沖區,查找使用位為0的幀,遇到使用位為1的幀重新置為0.
頁面分配策略
駐留集大小:給一個進程分配的物理頁框的大小就是這個進程的駐留集,策略如下:
固定分配局部置換
可變分配全局置換
可變分配局部置換
調入頁面的時機
預調頁策略:一次調入若干相鄰的頁比一次調入一頁更高效
請求調頁策略:
從何處調入頁面
系統擁有足夠的兌換區空間,可以全部從對換區調入所需頁面,提高調頁速度。
系統缺少足夠的對換區空間。對可能修改的部分調入對換區,不變的頁面直接從文件調入。
UNIX方式,與進程有關的文件放在文件夾。
抖動
剛剛被換出的頁面又要換入主存,剛剛換入的頁面馬上又要換出主存。
工作集
某段時間間隔內,進程要訪問的頁面集合。可以用最近訪問過的頁面來確定工作集。工作集反映了進程在接下來的一段時間內很可能會頻繁訪問的頁面集合。
?
?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的操作系统(3) -- 内存管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构(7)—— 排序总结
- 下一篇: java信息管理系统总结_java实现科