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