操作系統(tǒng)筆記:第四章—存儲(chǔ)器管理

前提:認(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)行(使用物理地址)。

1)地址的概念

邏輯地址(相對(duì)地址,虛地址)

物理地址(絕對(duì)地址,實(shí)地址)

2)程序裝入中的地址處理

? 絕對(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條虛擬地址,開始地址映射。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 基礎(chǔ)知識(shí) 1.1、 基本概念、 功能 馮諾伊曼體系結(jié)構(gòu)1、計(jì)算機(jī)處理的數(shù)據(jù)和指令一律用二進(jìn)制數(shù)表示2、順序執(zhí)...
    yunpiao閱讀 5,804評(píng)論 1 22
  • 存儲(chǔ)器的層次結(jié)構(gòu)‘ 多層結(jié)構(gòu)的存儲(chǔ)器系統(tǒng) 存儲(chǔ)器的多層結(jié)構(gòu)。 存儲(chǔ)層次至少應(yīng)具有三級(jí):最高層為 CPU 寄存器,中...
    傻傻傻瓜_d432閱讀 914評(píng)論 0 0
  • 姑娘你想辭職,我們都想辭職,總是不滿意當(dāng)前的生活,總是想我們不應(yīng)該屬于當(dāng)前,我們的人生不應(yīng)該止步不前!我們的人生不...
    喀喇撒哈拉閱讀 297評(píng)論 0 0
  • 若是放在從前,這般情境下,程萬(wàn)豪怕不是要擁她入懷,在她耳邊打趣一句“你就是我的千金方,我還要什么安神方”。只是今時(shí)...
    籽鹽閱讀 240評(píng)論 0 2
  • 開始著力學(xué)習(xí)C語(yǔ)言基礎(chǔ)已經(jīng)有接近10天,今天預(yù)習(xí)了第7講<復(fù)雜類型的確認(rèn)>, 從指針內(nèi)容開始復(fù)雜起來(lái),知識(shí)點(diǎn)記的不...
    阿元閱讀 206評(píng)論 0 0

友情鏈接更多精彩內(nèi)容