操作系统(王道笔记第三章内存)
第三章內存
- 3.1_1內存的基礎知識
- (1)什么是內存:略
- (2)進程運行的基本原理
- ①從寫程序到程序運行
- ②鏈接
- ③裝入
- 3.1_2內存管理的概念
- (1)內存管理管哪幾個方面
- (2)內存保護
- ①上下限寄存器:
- ②重定位界地址寄存器
- 3.1_3覆蓋與交換
- (1)覆蓋技術
- (2)交換技術
- 3.1_4連續分配管理方式
- (1)單一連續分配
- (2)固定分區分配
- ①分區大小相等
- ②分區大小不相等
- (3)動態分區分配
- ①系統要用什么樣的數據結構記錄內存的使用情況?
- ②當很多個空閑分區都能滿足需求時,應該選擇哪個分區進行分配?(3.1_4詳述)
- ③如何進行分區的分配與回收操作?
- (3)總結
- 3.1_5動態分區分配算法
- (1)首次適應算法(First Fit)
- (2)最佳適應算法(Best Fit)
- (3)最壞適應算法(Worst Fit)
- (4)鄰近適應算法(Next Fit)
- 3.1_6基本分頁存儲管理的基本概念
- (1)頁框、頁面 、頁表
- (2)如何實現地址的轉換
- 3.1_7基本地址變換機構
- (1)頁表寄存器
- (2)地址變換機構
- 3.1_8具有快表的地址變換機構
- (1)局部性
- (2)快表
- 3.1_9兩級頁表
- (1)單級頁表存在的問題
- (2)如何解決問題一(引入多級分頁)
- (3)注意
- 3.1_10基本分段存儲管理方式
- (1)段
- (2)段表
- (3)地址轉換
- (4)分段和分頁對比
- 3.1_11段頁式管理方式
- (1)分頁和分段的優缺點
- (2)段頁存儲方式
- (3)段頁存儲的數據結構
- (4)段頁存儲的地址轉換方式
- 3.2_1虛擬內存的基本概念
- (1)傳統管理方式的特征、缺點
- (2)局部性原理
- (3)虛擬內存的定義和特征
- (4)如何實現虛擬內存技術
- (5)本節總結
- 腦圖
我的腦圖鏈接分享
3.1_1內存的基礎知識
本節大綱:什么是內存(略)、進程運行的基本原理
(1)什么是內存:略
(2)進程運行的基本原理
指令的工作原理(略)、邏輯地址和物理地址(略)、從寫程序到程序運行
①從寫程序到程序運行
編譯生成目標模塊即.obj文件,鏈接生成裝入模塊即可執行文件.exe
②鏈接
鏈接的作用:把多個編譯好的起始邏輯地址和終止邏輯地址不同的目標模塊鏈接成一個邏輯起始地址為0的裝入模塊
鏈接的三種方式:
1.靜態鏈接:在程序運行之前,先將各目標模塊及它們所需的庫函數連接成一個完整的可執行文件(裝入模塊),之后不再拆開。
2.裝入時動態鏈接:將各目標模塊裝入內存時,邊裝入邊鏈接的鏈接方式。
3.運行時動態鏈接:在程序執行中需要該目標模塊時,才對它進行鏈接。其優點是便于修改和更新,便于實現對目標模塊的共享。
③裝入
裝入的作用:把程序中的邏輯地址轉為物理地址進而讓計算機得以識別
三種裝入方式:(其中只有絕對裝入是編譯程序實現,其他是操作系統實現)
1.絕對裝入(只適用于單道程序環境):在編譯時,如果知道程序將放到內存中的哪個位置,編譯程序將產生絕對地址的目標代碼。裝入程序按照裝入模塊中的地址,將程序和數據裝入內存。
2.靜態重定位(早期多道批處理):又稱可重定位裝入。編譯、鏈接后的裝入模塊的地址都是從0開始的,指令中使用的地址、數據存放的地址都是相對于起始地址而言的邏輯地址。可根據內存的當前情況,將裝入模塊裝入到內存的適當位置。裝入時對地址進行“重定位”,將邏輯地址變換為物理地址(地址變換是在裝入時一次完成的)。
靜態重定位的特點是在一個作業裝入內存時,必須分配其要求的全部內存空間,如果沒有足夠的內存,就不能裝入該作業。作業一旦進入內存后,在運行期間就不能再移動==,也不能再申請內存空間。
3.動態重定位(現代操作系統):又稱動態運行時裝入。編譯、鏈接后的裝入模塊的地址都是從0開始的。裝入程序把裝入模塊裝入內存后,并不會立即把邏輯地址轉換為物理地址,而是把地址轉換推遲到程序真正要執行時才進行。因此裝入內存后所有的地址依然是邏輯地址。這種方式需要一個重定位寄存器(基址寄存器)的支持。重定位寄存器存儲當前代碼首物理地址
3.1_2內存管理的概念
本節大綱:內存管理管什么、存儲保護
(1)內存管理管哪幾個方面
(2)內存保護
為什么要進行內存保護:控制各個進程只能訪問自己的內存空間
內存保護的兩個方法:
①上下限寄存器:
在CPU中設置一對上、下限寄存器, 存放進程的上、下限地址。進程的指令要訪問某個地址時,CPU檢查是否越界。
②重定位界地址寄存器
采用重定位寄存器(又稱基址寄存器)和界地址寄存器(又稱限長寄存器)進行越界檢查。重定位寄存器中存放的是進程的起始物理地址。界地址寄存器中存放的是進程的最大邏輯地址(即物理地址長度)。
3.1_3覆蓋與交換
本節大綱:覆蓋技術、交換技術
(1)覆蓋技術
**覆蓋技術的思想:**將程序分為多個段(多個模塊)。常用的段常駐內存,不常用的段在需要時調入內存。內存中分為一個“固定區”和若干個“覆蓋區”。
需要常駐內存的段放在“固定區”中,調入后就不再調出(除非運行結束)。
不常用的段放在“覆蓋區”,需要用到時調入內存,用不到時調出內存。
**缺點:**必須由程序員聲明覆蓋結構,操作系統完成自動覆蓋。對用戶不透明,增加了用戶編程負擔。覆蓋技術只用于早期的操作系統中,現在已成為歷史。
(2)交換技術
交換(對換)技術的設計思想:內存空間緊張時,系統將內存中某些進程暫時換出外存,把外存中某些已具備運行條件的進程換入內存(進程在內存與磁盤間動態調度)
交換技術的三個問題:
3.1_4連續分配管理方式
本節大綱:單一連續分配、固定分區分配、動態分區分配
連續分配:指為用戶進程分配的必須是一個連續的內存空間。
(1)單一連續分配
單一連續分配方式:內存被分為系統區和用戶區。系統區通常位于內存的低地址部分,用于存放操系統相關數據;用戶區用于存放用戶進程相關數據。內存中只能有一道用戶程序,用戶程序獨占整個用戶區空間。
**優點:**實現簡單;無外部碎片;可以采用覆蓋技術擴充內存;不一定需要采取內存保護(eg:早期的PC操作系統MS-DOS)。
**缺點:**只能用于單用戶、單任務的操作系統中;有內部碎片;存儲器利用率極低。
(2)固定分區分配
分區說明表:
①分區大小相等
②分區大小不相等
(3)動態分區分配
動態分區分配又稱為可變分區分配。這種分配方式不會預先劃分內存分區,而是在進程裝入內存時,根據進程的大小動態地建立分區,并使分區的大小正好適合進程的需要。因此系統分區的大小和數
目是可變的。(eg: 假設某計算機內存大小為64MB,系統區8MB,用戶區共56 M…)
①系統要用什么樣的數據結構記錄內存的使用情況?
②當很多個空閑分區都能滿足需求時,應該選擇哪個分區進行分配?(3.1_4詳述)
③如何進行分區的分配與回收操作?
分配的兩種情況:
回收的兩種情況:
回收區相鄰有一個空閑分區
回收區沒有空閑分區
另外:
緊湊技術
(3)總結
內部碎片,分配給某進程的內存區域中,如果有些部分沒有用上。
外部碎片,是指內存中的某些空閑分區由于太小而難以利用。
3.1_5動態分區分配算法
本節大綱:首次適應算法(First Fit)、最佳適應算法(Best Fit)、最壞適應算法(Worst Fit)、鄰近適應算法(Next Fit)
(1)首次適應算法(First Fit)
算法思想:每次都從低地址開始查找,找到第一個能滿足大小的空閑分區。
(2)最佳適應算法(Best Fit)
算法思想:由于動態分區分配是-種連續分配方式,為各進程分配的空間必須是連續的一整片區域。因此為了保證當“大進程”到來時能有連續的大片空間,可以盡可能多地留下大片的空閑區,即,優先使用更小的空閑區。
**缺點:**每次都選最小的分區進行分配,會留下越來越多的、很小的、難以利用的內存塊。因此這種方法會產生很多的外部碎片。
(3)最壞適應算法(Worst Fit)
算法思想:為了解決最佳適應算法的問題一即留下太多難以利用的小碎片,可以在每次分配時
優先使用最大的連續空閑區,這樣分配后剩余的空閑區就不會太小,更方便使用。
(4)鄰近適應算法(Next Fit)
算法思想:首次適應算法每次都從鏈頭開始查找的。這可能會導致低地址部分出現很多小的空閑分區,而每次分配查找時,都要經過這些分區,因此也增加了查找的開銷。如果每次都從上次查找結束的位置開始檢索,就能解決.上述問題。
3.1_6基本分頁存儲管理的基本概念
基本分頁存儲管理的思想——把內存分為一個個相等的小分區,再按照分區大小把進程拆分成一個 個小部分
(1)頁框、頁面 、頁表
①頁面和頁框
**頁面:**將用戶進程的地址空間也分為與頁框大小相等的一個個區域,稱為“頁”或“頁面”,每個頁面也有一個編號,即“頁號",頁號也是從0開始。
**頁框:**將內存空間分為一個個大小相等的分區(比如:每個分區4KB),每個分區就是一個“頁框”,或稱“頁幀”、“內存塊”、“物理塊”。每個頁框有一個編號,即“頁框號”(或者.“內存塊號”、“頁幀號”、“物理塊號”)頁框號從0開始。
**②頁表:**頁表記錄進程頁面和實際存放的內存塊(頁框)之間的對應關系
**頁表結構:**可見頁表的頁號是順序遞增的,所以不用單獨存儲,只需存儲頁框號即可,就像數組a[0]=3,a[1]=6,a[2]=4…,因此由此數組特性可知頁表必須在內存中連續存儲,以及頁表項的大小取決于內存大小或者頁框數大小
(2)如何實現地址的轉換
由頁面頁框的結構特點可知地址轉換方法為:
物理地址 = 裝入之后的起始物理地址 + 頁內偏移地址
即
物理地址 = 邏輯地址所在頁面的頁號在裝入之后對應的頁框 * 頁框大小 + 頁內偏移地址
例如:
CPU執行指令1,需要訪問邏輯地址為80的內存單元,如何轉化為物理地址?
邏輯地址為80的內存單元:在1號頁,該頁在內存中的起始位置為50, 邏輯地址為80的內存單元相對于該頁的起始地址而言,“偏移量”應該是30。實際物理地址=450+30=480.
補充:考試中如何計算頁號和頁內偏移量
人工手算:頁號=80/50=1;頁內偏移量=80%50=30
計算機:因為計算機采用二進制計數即
3.1_7基本地址變換機構
(1)頁表寄存器
通常會在系統中設置- -個頁表寄存器(PTR) ,存放頁表在內存中的起始地址F和頁表長度M。進程未執行時,頁表的始址和頁表長度放在進程控制塊(PCB) 中,當進程被調度時,操作系統內核會把它們放到頁表寄存器中。
(2)地址變換機構
3.1_8具有快表的地址變換機構
(1)局部性
時間局部性:如果執行了程序中的某條指令,那么不久后這條指令很有可能再次執行:如果某個數據被訪問過,不久之后該數據很可能再次被訪問。( 因為程序中存在大量的循環)
空間局部性:一旦程序訪問了某個存儲單元,在不久之后,其附近的存儲單元也很有可能被訪問。(因為很多數據在內存中都是連續存放的)
(2)快表
快表:又稱聯想寄存器(TLB), 是一種訪問速度比內存快很多的高速緩沖存儲器,用來存放當前訪問的若干頁表項,以加速地址變換的過程。與此對應,內存中的頁表常稱為慢表。
(3)加入快表之后地址變換
與基本地址變換對比
3.1_9兩級頁表
(1)單級頁表存在的問題
問題一:頁表必須連續存放,因此當頁表很大時,需要占用很多個連續的頁框。
問題二:沒有必要讓整個頁表常駐內存,因為進程在一段時間內可能只需要訪問某幾個特定的頁面。
(2)如何解決問題一(引入多級分頁)
可將長長的頁表進行分組,使每個內存塊剛好可以放入一個分組( 比如上個例子中,頁面大小4KB,每個頁表項4B,每個頁面可存放1K個頁表項,因此每1K個連續的頁表項為一組,每組剛好占一個內存塊,再講各組離散地放到各個內存塊中)另外,要為離散分配的頁表再建立一張頁表,稱為頁目錄表,或稱外層頁表,或稱頂層頁表
(3)注意
①若采用多級頁表機制,則各級頁表的大小不能超過一個頁面
②兩級頁表的訪存次數分析(假設沒有快表機構)
三次:第一次訪存:訪問內存中的頁目錄表、第二次訪存:訪問內存中的二級頁表、第三次訪存:訪問目標內存單元
N級頁表的訪存次數:N + 1次
3.1_10基本分段存儲管理方式
基本分段存儲管理即根據程序自身邏輯(比如main函數是一個段,某個子函數是一個段)劃分為若干個段
(1)段
進程的地址空間:按照程序自身的邏輯關系劃分為若干個段,每個段都有一個段名(在低級語言中,程序員使用段名來編程),每段從0開始編址
內存分配規則:以段為單位進行分配,每個段在內存中占據連續空間,但各段之間可以不相鄰。
(2)段表
程序分多個段,各段離散地裝入內存,為了保證程序能正常運行,就必須能從物理內存中找到各個邏輯段的存放位置。為此,需為每個進程建立一張段映射表, 簡稱‘段表“
**①段表數據結構:**每個段對應一個段表項,其中記錄了該段在內存中的起始位置(又稱“基址”)和段的長度。
②各個段表項的長度是相同的。 由于段表項長度相同,因此段號可以是隱含的,不占存儲空間。若段表存放的起始地址為M,則K號段對應的段表項存放的地址為M+ K*6
(3)地址轉換
(4)分段和分頁對比
3.1_11段頁式管理方式
(1)分頁和分段的優缺點
(2)段頁存儲方式
(3)段頁存儲的數據結構
(4)段頁存儲的地址轉換方式
3.2_1虛擬內存的基本概念
(1)傳統管理方式的特征、缺點
傳統管理方式回顧:
一次性:作業必須一次性全部裝入內存后才能開始運行。這會造成兩個問題:
①作業很大時,不能全部裝入內存,導致大作業無法運行;
②當大量作業要求運行時,由于內存無法容納所有作業,因此只有少量作業能運行,導致多道程序并發度下降。
駐留性:一旦作業被裝入內存,就會一直駐留在內存中,直至作業運行結束。
事實上,在一個時間段內,只需要訪問作業的一小部分數據即可正常運行,這就導致了內存中會駐留大量的、暫時用不到的數據,浪費了寶貴的內存資源。(例如和平精英,如果你在海島地圖,那么雨林地圖就不用加載到內存中,這也是為什么進入一個地圖開始游戲是為什么需要載入中的原因)
(2)局部性原理
①時間局部性:如果執行了程序中的某條指令,那么不久后這條指令很有可能再次執行,如果某個數據被訪問過,不久之后該數據很可能再次被訪問。(因為程序中存在大量的循環)
②空間局部性:一旦程序訪問了某個存儲單元,在不久之后,其附近的存儲單元也很有可能被訪問,例如數組(因為很多數據在內存中都是連續存放的,并且程序的指令也是順序地在內存中存放的)
③高速緩沖技術:如何應用局部性原理呢?于是就有了高速緩沖技術
高速緩沖技術的思想:將近期會頻繁訪問到的數據放到更高速的存儲器中,暫時用不到的數據放在更低速存儲器中(例如快表機制)
(3)虛擬內存的定義和特征
①在操作系統的管理下,在用戶看來似乎有一個比實際內存大得多的內存,這就是虛擬內存,它的原理如下:
基于局部性原理,在程序裝入時,可以將程序中很快會用到的部分裝入內存,暫時用不到的部分留在外存,就可以讓程序開始執行。
在程序執行過程中,當所訪問的信息不在內存時,由操作系統負責將所需信息從外存調入內存,然后繼續執行程序。
若內存空間不夠,由操作系統負責將內存中暫時用不到的信息換出到外存。
②求虛擬內存實際容量( = min(內存和外存容量之和,CPU尋址范圍))
③虛擬內存的三個主要特征
多次性:無需在作業運行時一次性全部裝入內存,而是允許被分成多次調入內存。
對換性:在作業運行時無需一直常駐內存, 而是允許在作業運行過程中,將作業換入、換出。
虛擬性:從邏輯上擴充了內存的容量,使用戶看到的內存容量,遠大于實際的容量。
(4)如何實現虛擬內存技術
虛擬內存技術:允許一個作業分多次調入內存。如果采用連續分配方式,會不方便實現。因此,虛擬內存的實現需要建立在離散分配的內存管理方式基礎上。
(5)本節總結
腦圖
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的操作系统(王道笔记第三章内存)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python获取电脑硬件配置的封装类,可
- 下一篇: 第四章文件管理