前提:認(rèn)識(shí)各種存儲(chǔ)部件
寄存器、內(nèi)存、磁盤、高速緩存、磁盤緩存
主存:保存進(jìn)程運(yùn)行時(shí)的程序和數(shù)據(jù)
寄存器:速度最快,價(jià)格昂貴容量不大,一般以字為單位,只要存放指令一次操作的數(shù)據(jù)就夠了
高速緩存
一種速度比內(nèi)存快的存儲(chǔ)設(shè)備,一般同寄存器一樣集成在CPU中。存放內(nèi)存的部分拷貝,把常用的數(shù)據(jù)放這里可以提高速度。
磁盤緩存
內(nèi)存的一部分,將頻繁使用的一部分磁盤數(shù)據(jù)信息預(yù)讀入在磁盤緩存,減少磁盤讀寫時(shí)間。
存儲(chǔ)器管理
容量雖不斷擴(kuò)充,仍不能滿足現(xiàn)代軟件和用戶的需要,是一種寶貴、緊俏的資源;
多層次處理,協(xié)調(diào)CPU與存儲(chǔ)設(shè)備的速度差距;
主要內(nèi)容:
1:程序的裝入和鏈接
2:連續(xù)分配存儲(chǔ)管理方式
3:分頁(yè)存儲(chǔ)管理方式
4:分段存儲(chǔ)管理方式
5:虛擬存儲(chǔ)器、請(qǐng)求分頁(yè)/分段、頁(yè)面置換算法
1、程序的裝入和鏈接
多道程序環(huán)境下,程序運(yùn)行必須為之先建立進(jìn)程。
創(chuàng)建進(jìn)程的第一件事:將程序和數(shù)據(jù)裝入內(nèi)存。
程序進(jìn)內(nèi)存的一般過(guò)程:
1.編譯compiler:編譯程序:將用戶源代碼編譯成若干個(gè)目標(biāo)模塊。
2.鏈接link:鏈接程序:將形成的一組目標(biāo)模塊,及它們需要的庫(kù)函數(shù)鏈接在一起,形成一個(gè)完整的裝入模塊。
3.裝入load:由裝入程序?qū)⒀b入模塊裝入內(nèi)存,構(gòu)造PCB,形成進(jìn)程,開始運(yùn)行(使用物理地址)。
邏輯地址(相對(duì)地址,虛地址)
物理地址(絕對(duì)地址,實(shí)地址)
? 絕對(duì)裝入(邏輯地址=物理地址)
編譯程序生成的“目標(biāo)代碼”就是”裝入模塊”,邏輯地址直接從某個(gè)地址R處增長(zhǎng),裝入模塊直接裝入內(nèi)存地址R處。
? 靜態(tài)重定位裝入
重定位:把目標(biāo)程序中的指令和數(shù)據(jù)的邏輯地址變成內(nèi)存中的物理地址的地址

? 動(dòng)態(tài)運(yùn)行時(shí)重定位裝入:
實(shí)際運(yùn)行中往往會(huì)需要程序在內(nèi)存中的各位置移動(dòng),即經(jīng)常需要重定位到不同的物理地址上。這種運(yùn)行時(shí)移動(dòng)程序要求地址變換要快速,實(shí)現(xiàn)時(shí)一般依靠硬件地址變換機(jī)構(gòu)——一個(gè)重定位寄存器。
程序裝入內(nèi)存時(shí),可多次重定位到不同位置。且可以不立即把裝入模塊中的相對(duì)地址轉(zhuǎn)換為絕對(duì)地址,而是把這種地址轉(zhuǎn)換推遲到程序真正要執(zhí)行時(shí)才進(jìn)行。
更適用于部分裝入
3)不同的程序鏈接裝入方式(使用內(nèi)存的時(shí)機(jī))
? 靜態(tài)鏈接:
裝入運(yùn)行前將多個(gè)目標(biāo)模塊及所需庫(kù)函數(shù)鏈接成一個(gè)整體,以后不再拆開。
? 裝入時(shí)鏈接:
裝入內(nèi)存時(shí),邊裝入邊鏈接的鏈接方式。
? 運(yùn)行時(shí)鏈接:
對(duì)某些目標(biāo)模塊的鏈接,在執(zhí)行中需要該目標(biāo)模塊時(shí),才對(duì)它進(jìn)行鏈接。
2、連續(xù)分配方式
(1)單一連續(xù)分配
? 內(nèi)存分為系統(tǒng)區(qū)和用戶區(qū)兩部分:
系統(tǒng)區(qū):僅提供給OS使用,通常放在內(nèi)存低址部分
用戶區(qū):除系統(tǒng)區(qū)以外的全部?jī)?nèi)存空間,提供給用戶使用。
? 最簡(jiǎn)單的一種存儲(chǔ)管理方式,只能用于單用戶、單任務(wù)的操作系統(tǒng)中。
優(yōu)點(diǎn):易于管理。
缺點(diǎn):對(duì)要求內(nèi)存空間少的程序,造成內(nèi)存浪費(fèi);程序全部裝入,很少使用的程序部分也占用內(nèi)存。
(2)固定分區(qū)分配
? 把內(nèi)存分為一些大小相等或不等的分區(qū)(partition),每個(gè)應(yīng)用進(jìn)程占用一個(gè)分區(qū)。操作系統(tǒng)占用其中一個(gè)分區(qū)。
提高:支持多個(gè)程序并發(fā)執(zhí)行,適用于多道程序系統(tǒng)和分時(shí)系統(tǒng)。最早的多道程序存儲(chǔ)管理方式。劃分為幾個(gè)分區(qū),便只允許幾道作業(yè)并發(fā)
具體實(shí)現(xiàn):
1)如何劃分分區(qū)大小
分區(qū)大小相等:只適合于多個(gè)相同程序的并發(fā)執(zhí)行(處理多個(gè)類型相同的對(duì)象)。缺乏靈活性。
分區(qū)大小不等:多個(gè)小分區(qū)、適量的中等分區(qū)、少量的大分區(qū)。根據(jù)程序的大小,分配當(dāng)前空閑的、適當(dāng)大小的分區(qū)。
2)需要的數(shù)據(jù)結(jié)構(gòu)
建立一記錄相關(guān)信息的分區(qū)表(或分區(qū)鏈表),表項(xiàng)有:
| 起始位置 | 大小 | 狀態(tài) |
分區(qū)表中,表項(xiàng)值隨著內(nèi)存的分配和釋放而動(dòng)態(tài)改變
3)分配回收操作
也可將分區(qū)表分為兩個(gè)表格:空閑分區(qū)表/占用分區(qū)表。從而減小每個(gè)表格長(zhǎng)度。
檢索算法:空閑分區(qū)表可能按不同分配算法采用不同方式對(duì)表項(xiàng)排序(將分區(qū)按大小排隊(duì)或按分區(qū)地址高低排序)。
過(guò)程:檢索空閑分區(qū)表;找出一個(gè)滿足要求且尚未分配的分區(qū),分配給請(qǐng)求程序;若未找到大小足夠的分區(qū),則拒絕為該用戶程序分配內(nèi)存。
(3)動(dòng)態(tài)分區(qū)分配
?分區(qū)的大小不固定:在裝入程序時(shí)根據(jù)進(jìn)程實(shí)際需要,動(dòng)態(tài)分配內(nèi)存空間,即——需要多少劃分多少。
空閑分區(qū)表項(xiàng):從1項(xiàng)到n項(xiàng):內(nèi)存會(huì)從初始的一個(gè)大分區(qū)不斷被劃分、回收從而形成內(nèi)存中的多個(gè)分區(qū)。
具體實(shí)現(xiàn):
1)分區(qū)分配中的數(shù)據(jù)結(jié)構(gòu)
①空閑分區(qū)表:
?記錄每個(gè)空閑分區(qū)的情況。
?每個(gè)空閑分區(qū)對(duì)應(yīng)一個(gè)表目,包括分區(qū)序號(hào)、分區(qū)始址及分區(qū)的大小等數(shù)據(jù)項(xiàng)。
②空閑分區(qū)鏈:
?每個(gè)分區(qū)的起始部分,設(shè)置用于控制分區(qū)分配的信息,及用于鏈接各分區(qū)的前向指針;
?分區(qū)尾部則設(shè)置一后向指針,在分區(qū)末尾重復(fù)設(shè)置狀態(tài)位和分區(qū)大小表目方便檢索。
2)分區(qū)分配算法
? 動(dòng)態(tài)分區(qū)方式,分區(qū)多、大小差異各不相同,此時(shí)把一個(gè)新作業(yè)裝入內(nèi)存,更需選擇一個(gè)合適的分配算法,從空閑分區(qū)表/鏈中選出一合適分區(qū)
①首次適應(yīng)算法FF
②循環(huán)首次適應(yīng)算法
③最佳適應(yīng)算法
④最差適應(yīng)算法
⑤快速適應(yīng)算法
3)分區(qū)分配操作
分配內(nèi)存
找到滿足需要的合適分區(qū),劃出進(jìn)程需要的空間
s<=size,將整個(gè)分區(qū)分配給請(qǐng)求者
s> size,按請(qǐng)求的大小劃出一塊內(nèi)存空間分配出去,余下部分留在空閑鏈中,將分配區(qū)首址返回給調(diào)用者。
回收內(nèi)存
進(jìn)程運(yùn)行完畢釋放內(nèi)存時(shí),系統(tǒng)根據(jù)回收區(qū)首址a,在空閑分區(qū)鏈(表)中找到相應(yīng)插入點(diǎn),根據(jù)情況修改空閑分區(qū)信息,可能會(huì)進(jìn)行空閑分區(qū)的合并。
(4)動(dòng)態(tài)重定位分區(qū)分配模塊
用戶程序在內(nèi)存中移動(dòng),將空閑空間緊湊起來(lái)提高空間利用率。但必然需要地址變化,增加“重定位”工作。
動(dòng)態(tài)重定位分區(qū)分配算法與動(dòng)態(tài)分區(qū)分配算法基本相同,差別在于增加了緊湊的功能。
(5)內(nèi)存空間管理之對(duì)換
實(shí)現(xiàn)進(jìn)程對(duì)換,系統(tǒng)必須具備的功能:
對(duì)換空間的管理
進(jìn)程的換出、換入操作
3、分頁(yè)存儲(chǔ)管理方式
離散分配內(nèi)存:
作業(yè)規(guī)定大小劃分成小份;內(nèi)存也按同樣大小劃分成小份
作業(yè)的任一小份可分散放入內(nèi)存任意未使用的小份
1)頁(yè)面的概念
①物理劃分塊的大小= 邏輯劃分的頁(yè)的大小
②頁(yè)面大小要適中。
2)頁(yè)表的概念
為了找到被離散分配到內(nèi)存中的作業(yè),記錄每個(gè)作業(yè)各頁(yè)映射到哪個(gè)物理塊,形成的頁(yè)面映射表,簡(jiǎn)稱頁(yè)表。每個(gè)作業(yè)有自己的頁(yè)表。
頁(yè)表的作用:
? 頁(yè)號(hào)到物理塊號(hào)的地址映射,要找到作業(yè)A,關(guān)鍵是找到頁(yè)表(PCB)根據(jù)頁(yè)表找物理塊。
3)地址的處理
作業(yè)相對(duì)地址在分頁(yè)下不同位置的數(shù)有一定的意義結(jié)構(gòu):
? 頁(yè)號(hào)+頁(yè)內(nèi)地址(即頁(yè)內(nèi)偏移)
關(guān)鍵的計(jì)算是:根據(jù)系統(tǒng)頁(yè)面大小找到不同意義二進(jìn)制位的分界線。
從地址中分析出頁(yè)號(hào)后,地址映射只需要把頁(yè)號(hào)改為對(duì)應(yīng)物理塊號(hào),偏移不變,即可找到內(nèi)存中實(shí)際位置。
4)地址變換機(jī)構(gòu)
前面講解了地址變換的原理,那么誰(shuí)具體實(shí)現(xiàn)地址映射?——地址變換機(jī)構(gòu)。
圍繞頁(yè)表進(jìn)行工作,那么頁(yè)表數(shù)據(jù)放在哪?
寄存器。一個(gè)進(jìn)程有n個(gè)頁(yè),頁(yè)表就需要記錄n項(xiàng)數(shù)據(jù),需要n個(gè)寄存器。不現(xiàn)實(shí)。
內(nèi)存。只設(shè)置一個(gè)頁(yè)表寄存器PTR(page table register)記錄頁(yè)表在內(nèi)存中的首地址和頁(yè)表長(zhǎng)度,運(yùn)行時(shí)快速定位頁(yè)表。
5)引入快表——針對(duì)訪問(wèn)速度問(wèn)題
快表的寄存器單元數(shù)量是有限的,不能裝下一個(gè)進(jìn)程的所有頁(yè)表項(xiàng)。雖不能完全避免兩次訪問(wèn)內(nèi)存,但如果命中率a高還是能大幅度提高速度。
6)兩級(jí)、多級(jí)頁(yè)表,反置頁(yè)表——針對(duì)大頁(yè)表占用內(nèi)存問(wèn)題
①兩級(jí)頁(yè)表
將頁(yè)表分頁(yè),并離散地將頁(yè)表的各個(gè)頁(yè)面分別存放在不同的物理塊中
為離散分配的頁(yè)表再建立一張頁(yè)表,稱為“外層頁(yè)表”,其每個(gè)表項(xiàng)記錄了頁(yè)表頁(yè)面所在的物理塊號(hào)。
②多級(jí)頁(yè)表
③反置頁(yè)表
4、基本分段存儲(chǔ)管理方式
1)分段系統(tǒng)的基本原理
程序通過(guò)分段(segmentation)劃分為多個(gè)模塊,每個(gè)段定義一組邏輯信息。如代碼段(主程序段main,子程序段X)、數(shù)據(jù)段D、棧段S等。
分段下的相對(duì)地址:
地址結(jié)構(gòu):段號(hào)+ 段內(nèi)地址
段表:記錄每段實(shí)際存放的物理地址
2)段表與地址變換機(jī)構(gòu)
段是連續(xù)存放在內(nèi)存中。段表中針對(duì)每個(gè)“段編號(hào)”記錄:“內(nèi)存首地址”和“段長(zhǎng)”
3)分頁(yè)和分段的主要區(qū)別
1.大小:頁(yè)大小是系統(tǒng)固定的,而段大小則通常不固定。分段沒有內(nèi)碎片,但連續(xù)存放段產(chǎn)生外碎片,可以通過(guò)內(nèi)存緊縮來(lái)消除。相對(duì)而言分頁(yè)空間利用率高。
2.邏輯地址:
分頁(yè)是一維的,各個(gè)模塊在鏈接時(shí)必須組織成同一個(gè)地址空間;
分段是二維的,各個(gè)模塊在鏈接時(shí)可以每個(gè)段組織成一個(gè)地址空間。
3.其他:通常段比頁(yè)大,因而段表比頁(yè)表短,可以縮短查找時(shí)間,提高訪問(wèn)速度。分段模式下,還可針對(duì)不同類型采取不同的保護(hù);按段為單位來(lái)進(jìn)行共享。
4)信息共享
分段系統(tǒng)的突出優(yōu)點(diǎn):
易于實(shí)現(xiàn)共享
在分段系統(tǒng)中,實(shí)現(xiàn)共享十分容易,只需在每個(gè)進(jìn)程的段表中為共享程序設(shè)置一個(gè)段表項(xiàng)。比較課本圖。對(duì)同樣的共享內(nèi)容的管理上,很明顯分段的空間管理更簡(jiǎn)單。分頁(yè)的圖涉及太多的頁(yè)面劃分和地址記錄的管理。
易于實(shí)現(xiàn)保護(hù):
代碼的保護(hù)和其邏輯意義有關(guān),分頁(yè)的機(jī)械式劃分不容易實(shí)現(xiàn)。
5)段頁(yè)式存儲(chǔ)管理方式
① 基本原理
將用戶程序分成若干段,并為每個(gè)段賦予一個(gè)段名。
把每個(gè)段分成若干頁(yè)
地址結(jié)構(gòu)包括段號(hào)、段內(nèi)頁(yè)號(hào)和頁(yè)內(nèi)地址三部分
②地址變換過(guò)程
1)elf文件裝入,各種信息生成并記錄;
2)開始執(zhí)行? 讀程序代碼段第1條虛擬地址,開始地址映射。