???
存儲管理是操作系統(tǒng)的重要組成部分,它負(fù)責(zé)計算機(jī)系統(tǒng)內(nèi)存空間的管理。其目的是充分利用內(nèi)存空間,為多道程序并發(fā)執(zhí)行提供存儲基礎(chǔ),并盡可能地方便用戶使用。
3.1
存儲管理的目的
???
采用多道程序設(shè)計技術(shù),就要在內(nèi)存中同時存放多道程序,這就要求存儲管理解決以下四個重要問題,以達(dá)到盡可能方便用戶使用和充分利用內(nèi)存以提高內(nèi)存利用率的目的。
???
一、內(nèi)存空間的分配和回收
???
二、內(nèi)存空間的共享與存儲保護(hù)
???
三、地址映射(地址重定位)
???
四、內(nèi)存擴(kuò)充
3.2
單用戶連續(xù)存儲管理
???
這是一種最簡單的存儲管理方式,系統(tǒng)是將整個內(nèi)存除了給操作系統(tǒng)劃分出一塊空間外,其余部分的空間都分配給一個作業(yè)使用。個人機(jī)可采用此種管理方法,它不適宜多道程序設(shè)計系統(tǒng)。
??? 可以采用靜態(tài)重定位方式完成地址映射;處理器在執(zhí)行指令時,要檢查其絕對地址是否屬于規(guī)定范圍內(nèi)的地址,如果屬于,則按此地址訪問,否則將產(chǎn)生“地址越界”中斷。
??? 某些系統(tǒng)還采用對換技術(shù)(Swapping)讓多個進(jìn)程輪流進(jìn)入內(nèi)存,這種技術(shù)多用于分時系統(tǒng),隨著進(jìn)程調(diào)度,將內(nèi)存中的進(jìn)程暫時移到外存,而把外存中某一進(jìn)程換進(jìn)內(nèi)存。
3.3
固定分區(qū)存儲管理
???
其基本思想是將內(nèi)存劃分成若干固定大小的分區(qū),每個分區(qū)中最多只能裝入一個作業(yè)。當(dāng)作業(yè)申請內(nèi)存時,系統(tǒng)按一定的算法為其選擇一個適當(dāng)?shù)姆謪^(qū),并裝入內(nèi)存運(yùn)行。由于分區(qū)大小是事先固定的,因而可容納作業(yè)的大小受到限制,而且當(dāng)用戶作業(yè)的地址空間小于分區(qū)的存儲空間時,造成存儲空間浪費(fèi)。
???
一、空間的分配與回收
???
系統(tǒng)設(shè)置一張“分區(qū)分配表”來描述各分區(qū)的使用情況,登記的內(nèi)容應(yīng)包括:分區(qū)號、起始地址、長度和占用標(biāo)志。其中占用標(biāo)志為“
0
”時,表示目前該分區(qū)空閑;否則登記占用作業(yè)名(或作業(yè)號)。有了“分區(qū)分配表”,空間分配與回收工作是比較簡單的。
???
二、地址轉(zhuǎn)換和存儲保護(hù)
???
固定分區(qū)管理可以采用靜態(tài)重定位方式進(jìn)行地址映射。
為了實(shí)現(xiàn)存儲保護(hù),處理器設(shè)置了一對“下限寄存器”和“上限寄存器”。當(dāng)一個已經(jīng)被裝入主存儲器的作業(yè)能夠得到處理器運(yùn)行時,進(jìn)程調(diào)度應(yīng)記錄當(dāng)前運(yùn)行作業(yè)所在的分區(qū)號,且把該分區(qū)的下限地址和上限地址分別送入下限寄存器和上限寄存器中。處理器執(zhí)行該作業(yè)的指令時必須核對其要訪問的絕對地址是否越界。
???
三、多作業(yè)隊列的固定分區(qū)管理
???
為避免小作業(yè)被分配到大的分區(qū)中造成空間的浪費(fèi),可采用多作業(yè)隊列的方法。即系統(tǒng)按分區(qū)數(shù)設(shè)置多個作業(yè)隊列,將作業(yè)按其大小排到不同的隊列中,一個隊列對應(yīng)某一個分區(qū),以提高內(nèi)存利用率。
3.4
可變分區(qū)
???
可變分區(qū)存儲管理不是預(yù)先將內(nèi)存劃分分區(qū),而是在作業(yè)裝入內(nèi)存時建立分區(qū),使分區(qū)的大小正好與作業(yè)要求的存儲空間相等。這種處理方式使內(nèi)存分配有較大的靈活性,也提高了內(nèi)存利用率。但是隨著對內(nèi)存不斷地分配、釋放操作會引起存儲碎片的產(chǎn)生。
???
一、空間的分配與回收
???
采用可變分區(qū)存儲管理,系統(tǒng)中的分區(qū)個數(shù)與分區(qū)的大小都在不斷地變化,系統(tǒng)利用“空閑區(qū)表”來管理內(nèi)存中的空閑分區(qū),其中登記空閑區(qū)的起始地址、長度和狀態(tài)。當(dāng)有作業(yè)要進(jìn)入內(nèi)存時,在“空閑區(qū)表”中查找狀態(tài)為“未分配”且長度大于或等于作業(yè)的空閑分區(qū)分配給作業(yè),并做適當(dāng)調(diào)整;當(dāng)一個作業(yè)運(yùn)行完成時,應(yīng)將該作業(yè)占用的空間作為空閑區(qū)歸還給系統(tǒng)。
???
可以采用首先適應(yīng)算法、最佳(優(yōu))適應(yīng)算法和最壞適應(yīng)算法三種分配策略之一進(jìn)行內(nèi)存分配。
???
二、地址轉(zhuǎn)換和存儲保護(hù)
???
可變分區(qū)存儲管理一般采用動態(tài)重定位的方式,為實(shí)現(xiàn)地址重定位和存儲保護(hù),系統(tǒng)設(shè)置相應(yīng)的硬件:基址
/
限長寄存器(或上界
/
下界寄存器)、加法器、比較線路等。
???
基址寄存器用來存放程序在內(nèi)存的起始地址,限長寄存器用來存放程序的長度。處理機(jī)在執(zhí)行時,用程序中的相對地址加上基址寄存器中的基地址,形成一個絕對地址,并將相對地址與限長寄存器進(jìn)行計算比較,檢查是否發(fā)生地址越界。
???
三、存儲碎片與程序的移動
???
所謂碎片是指內(nèi)存中出現(xiàn)的一些零散的小空閑區(qū)域。由于碎片都很小,無法再利用。如果內(nèi)存中碎片很多,將會造成嚴(yán)重的存儲資源浪費(fèi)。解決碎片的方法是移動所有的占用區(qū)域,使所有的空閑區(qū)合并成一片連續(xù)區(qū)域,這一技術(shù)稱為移動技術(shù)(緊湊技術(shù))。移動技術(shù)除了可解決碎片問題還使內(nèi)存中的作業(yè)進(jìn)行擴(kuò)充。顯然,移動帶來系統(tǒng)開銷加大,并且當(dāng)一個作業(yè)如果正與外設(shè)進(jìn)行
I/O
時,該作業(yè)是無法移動的。
3.5
頁式存儲管理
3.5.1
基本原理
???
1
.等分內(nèi)存
???
頁式存儲管理將內(nèi)存空間劃分成等長的若干區(qū)域,每個區(qū)域的大小一般取
2
的整數(shù)冪,稱為一個物理頁面有時稱為塊。內(nèi)存的所有物理頁面從
0
開始編號,稱作物理頁號。
??? 2
.邏輯地址
???
系統(tǒng)將程序的邏輯空間按照同樣大小也劃分成若干頁面,稱為邏輯頁面也稱為頁。程序的各個邏輯頁面從
0
開始依次編號,稱作邏輯頁號或相對頁號。每個頁面內(nèi)從
0
開始編址,稱為頁內(nèi)地址。程序中的邏輯地址由兩部分組成:
??? 3
.內(nèi)存分配
???
系統(tǒng)可用一張“位示圖”來登記內(nèi)存中各塊的分配情況,存儲分配時以頁面(塊)為單位,并按程序的頁數(shù)多少進(jìn)行分配。相鄰的頁面在內(nèi)存中不一定相鄰,即分配給程序的內(nèi)存塊之間不一定連續(xù)。
???
對程序地址空間的分頁是系統(tǒng)自動進(jìn)行的,即對用戶是透明的。由于頁面尺寸為
2
的整數(shù)次冪,故相對地址中的高位部分即為頁號,低位部分為頁內(nèi)地址。
3.5.2
實(shí)現(xiàn)原理
??? 1
.頁表
???
系統(tǒng)為每個進(jìn)程建立一張頁表,用于記錄進(jìn)程邏輯頁面與內(nèi)存物理頁面之間的對應(yīng)關(guān)系。地址空間有多少頁,該頁表里就登記多少行,且按邏輯頁的順序排列,形如:
邏輯頁號
|
主存塊號
|
0
|
B0
|
1
|
B1
|
2
|
B2
|
3
|
B3
|
??? 2
.地址映射過程
???
頁式存儲管理采用動態(tài)重定位,即在程序的執(zhí)行過程中完成地址轉(zhuǎn)換。處理器每執(zhí)行一條指令,就將指令中的邏輯地址(
p,d
)取來從中得到邏輯頁號
(p)
,硬件機(jī)構(gòu)按此頁號查頁表,得到內(nèi)存的塊號
B’
,便形成絕對地址(
B’,d
)
,
處理器即按此地址訪問主存。
??? 3
.頁面的共享與保護(hù)
???
當(dāng)多個不同進(jìn)程中需要有相同頁面信息時,可以在主存中只保留一個副本,只要讓這些進(jìn)程各自的有關(guān)項(xiàng)中指向內(nèi)存同一塊號即可。同時在頁表中設(shè)置相應(yīng)的“存取權(quán)限”,對不同進(jìn)程的訪問權(quán)限進(jìn)行各種必要的限制。
3.6
段式存儲管理
3
.
6
.
1
基本原理
??? 1.邏輯地址空間
??? 程序按邏輯上有完整意義的段來劃分,稱為邏輯段。例如主程序、子程序、數(shù)據(jù)等都可各成一段。將一個程序的所有邏輯段從0開始編號,稱為段號。每一個邏輯段都是從0開始編址,稱為段內(nèi)地址。
??? 2.邏輯地址
??? 程序中的邏輯地址由段號和段內(nèi)地址(s,d)兩部分組成。
??? 3.內(nèi)存分配
??? 系統(tǒng)不進(jìn)行預(yù)先劃分,而是以段為單位進(jìn)行內(nèi)存分配,為每一個邏輯段分配一個連續(xù)的內(nèi)存區(qū)(物理段)。邏輯上連續(xù)的段在內(nèi)存不一定連續(xù)存放。
3.6.2實(shí)現(xiàn)方法
??? 1.段表
??? 系統(tǒng)為每個進(jìn)程建立一張段表,用于記錄進(jìn)程的邏輯段與內(nèi)存物理段之間的對應(yīng)關(guān)系,至少應(yīng)包括邏輯段號、物理段首地址和該段長度三項(xiàng)內(nèi)容。
??? 2.建立空閑區(qū)表
??? 系統(tǒng)中設(shè)立一張內(nèi)存空閑區(qū)表,記錄內(nèi)存中空閑區(qū)域情況,用于段的分配和回收內(nèi)存。
??? 3.地址映射過程
段式存儲管理采用動態(tài)重定位,處理器每執(zhí)行一條指令,就將指令中的邏輯地址(
s,d
)取來從中得到邏輯段號
(s)
,硬件機(jī)構(gòu)按此段號查段表,得到該段在內(nèi)存的首地址
S’
,
該段在內(nèi)存的首地址
S’
加上段內(nèi)地址
d
,便形成絕對地址(
S’+d
),處理器即按此地址訪問主存。
3
.
6
.
3
段頁式存儲管理
???
頁式存儲管理的特征是等分內(nèi)存,解決了碎片問題;段式存儲管理的特征是邏輯分段,便于實(shí)現(xiàn)共享。為了保持頁式和段式上的優(yōu)點(diǎn),結(jié)合兩種存儲管理方案,形成了段頁式存儲管理。
???
段頁式存儲管理的基本思想是:把內(nèi)存劃分為大小相等的頁面;將程序按其邏輯關(guān)系劃分為若干段;再按照頁面的大小,把每一段劃分成若干頁面。程序的邏輯地址由三部分組成,形式如下:
邏輯地址
|
段號
s
|
頁號
p
|
頁內(nèi)地址
d
|
???
內(nèi)存是以頁為基本單位分配給每個程序的,在邏輯上相鄰的頁面內(nèi)存不一定相鄰。
??
?
系統(tǒng)為每個進(jìn)程建立一張段表,為進(jìn)程的每一段各建立一張頁表。地址轉(zhuǎn)換過程,要經(jīng)過查段表、頁表后才能得到最終的物理地址。
3.7
虛擬存儲管理
???
前面介紹的各種存儲管理方案有一點(diǎn)是共同的,即當(dāng)一個參與并發(fā)執(zhí)行的進(jìn)程運(yùn)行時,其整個程序都在內(nèi)存,存在的缺點(diǎn)是:若一個進(jìn)程的尺寸比內(nèi)存可用空間大,則該進(jìn)程無法運(yùn)行;而實(shí)際上由于局部特性,一個進(jìn)程在運(yùn)行的任一階段只使用所占存儲空間的一部分,因此未用到的內(nèi)存區(qū)域就被浪費(fèi)。
??? 虛擬存儲管理是當(dāng)進(jìn)程要求運(yùn)行時,不是將它的全部信息裝入內(nèi)存,而是將其一部分先裝入內(nèi)存,另一部分暫時留在外存(通常是磁盤)。進(jìn)程在運(yùn)行過程中,如果要訪問的信息不在內(nèi)存時,發(fā)中斷由操作系統(tǒng)將它們調(diào)入內(nèi)存,以保證進(jìn)程的正常運(yùn)行。
??? 虛擬存儲管理分為頁式虛擬存儲管理、段式虛擬存儲管理和段頁式虛擬存儲管理。
3.7.1頁式虛擬存儲管理
??? 一、基本原理
??? 基本思想是,在進(jìn)程開始執(zhí)行之前,不是裝入全部頁面,而是只裝入一個或幾個頁面,然后根據(jù)進(jìn)程執(zhí)行的需要,動態(tài)地裝入其他頁面。
??? 頁表中將增加若干項(xiàng):標(biāo)志位(又稱駐留位),指示該頁是否裝入內(nèi)存;外存地址給出該頁在外存(磁盤)的地址。
??? 地址映射時當(dāng)從頁表標(biāo)志位得知此頁不在內(nèi)存時,發(fā)缺頁中斷。此時暫停進(jìn)程執(zhí)行,CPU轉(zhuǎn)去執(zhí)行缺頁中斷處理程序,負(fù)責(zé)把所需的頁從外存調(diào)入到內(nèi)存某空閑塊中,并把物理頁號填入頁表、更改標(biāo)志位,然后再返回繼續(xù)執(zhí)行被中斷的進(jìn)程。
??? 二、頁面淘汰
??? 當(dāng)內(nèi)存已無空閑塊而又發(fā)生缺頁中斷時,必須在內(nèi)存中選擇一頁面將其淘汰并寫回到外存,然后再換進(jìn)新的頁面,這一過程稱為頁面調(diào)度,選擇被淘汰頁面的算法稱作頁面調(diào)度算法。如果頁面淘汰算法不合理,可能產(chǎn)生剛被淘汰出去的一頁,又要訪問它,因而又要把它調(diào)入,如此反復(fù),使系統(tǒng)的頁面調(diào)入調(diào)出工作非常頻繁從而降低系統(tǒng)效率,這種現(xiàn)象稱為“顛簸”或“抖動”。
??? 常用的頁面調(diào)度算法有:先進(jìn)先出調(diào)度算法(FIFO)、最近最少使用調(diào)度算法(LRU)和最近最不經(jīng)常使用調(diào)度算法(LFU)。
?? 注意,對于單用戶連續(xù)、固定分區(qū)、可變分區(qū)存儲管理是不能實(shí)現(xiàn)虛擬存儲管理的,因?yàn)樗鼈兊墓餐c(diǎn)是,在對作業(yè)進(jìn)行內(nèi)存分配時是將整個作業(yè)全部、連續(xù)地放入內(nèi)存。
********************************************************************************************************
?