操作系統(tǒng)原理課件-(4)[116頁(yè)]_第1頁(yè)
操作系統(tǒng)原理課件-(4)[116頁(yè)]_第2頁(yè)
操作系統(tǒng)原理課件-(4)[116頁(yè)]_第3頁(yè)
操作系統(tǒng)原理課件-(4)[116頁(yè)]_第4頁(yè)
操作系統(tǒng)原理課件-(4)[116頁(yè)]_第5頁(yè)
已閱讀5頁(yè),還剩111頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 存儲(chǔ)器是計(jì)算機(jī)的重要組成部分,用于存儲(chǔ)包括程序和數(shù)據(jù)在內(nèi)的各種信息,屬于非常重要的系統(tǒng)資源。能否對(duì)它進(jìn)行有效管理,不僅直接影響到存儲(chǔ)器的利用率,而且對(duì)整個(gè)計(jì)算機(jī)系統(tǒng)的性能都有重要的影響。 計(jì)算機(jī)的存儲(chǔ)器分為兩類(lèi):一類(lèi)是內(nèi)部存儲(chǔ)器(內(nèi)存),是CPU能夠直接訪(fǎng)問(wèn)的存儲(chǔ)器;另一類(lèi)是外部存儲(chǔ)器(外存),是CPU不能直接訪(fǎng)問(wèn)的存儲(chǔ)器。內(nèi)部存儲(chǔ)器又稱(chēng)主存儲(chǔ)器,是計(jì)算機(jī)系統(tǒng)的重要資源之一。 存儲(chǔ)管理指的是管理內(nèi)部存儲(chǔ)器,它是操作系統(tǒng)的重要組成部分。第4章 存儲(chǔ)管理 本章的主要內(nèi)容:(1)地址重定位的引入、概念及方法。(2)對(duì)內(nèi)存進(jìn)行連續(xù)分配存儲(chǔ)管理的方法,包括單一連續(xù)分配方式和分區(qū)分配方式。(3)為了有效

2、利用內(nèi)存而采用的緊湊和交換技術(shù)。(4)對(duì)內(nèi)存進(jìn)行離散分配存儲(chǔ)管理的方法,包括分頁(yè)存儲(chǔ)管理方式、分段存儲(chǔ)管理方式和段頁(yè)式存儲(chǔ)管理方式。(5)虛擬存儲(chǔ)器的概念及請(qǐng)求分頁(yè)存儲(chǔ)管理、請(qǐng)求分段存儲(chǔ)管理和請(qǐng)求段頁(yè)式存儲(chǔ)管理的實(shí)現(xiàn)。第4章 存儲(chǔ)管理第4章 存儲(chǔ)管理4.1 程序的鏈接和裝入4.2 存儲(chǔ)器及存儲(chǔ)管理的基本功能4.3 分區(qū)式存儲(chǔ)管理4.4 分頁(yè)存儲(chǔ)管理4.5 分段存儲(chǔ)管理4.6 段頁(yè)式存儲(chǔ)管理4.7 虛擬存儲(chǔ)管理 源程序轉(zhuǎn)變?yōu)榭蓤?zhí)行程序:首先由編譯程序把源程序編譯成若干個(gè)目標(biāo)模塊,然后由鏈接程序把所有目標(biāo)模塊和它們需要的庫(kù)函數(shù)鏈接在一起,形成一個(gè)完整的可裝入模塊??裳b入模塊可以通過(guò)裝入程序裝入內(nèi)存

3、成為可執(zhí)行程序,當(dāng)把CPU分配給它時(shí)就可以投入運(yùn)行。4.1 程序的鏈接和裝入4.1.1 邏輯地址和物理地址(1)邏輯地址。用戶(hù)源程序經(jīng)編譯、鏈接后得到可裝入程序。由于無(wú)法預(yù)先知道程序裝入內(nèi)存的具體位置,只能暫定程序的起始地址為0,即程序中指令和數(shù)據(jù)的地址都是相對(duì)0這個(gè)起始地址進(jìn)行計(jì)算的,用這種方法確定的地址稱(chēng)為邏輯地址或相對(duì)地址。(2)邏輯地址空間。一個(gè)目標(biāo)模塊(程序)或裝入模塊(程序)的所有邏輯地址的集合,稱(chēng)為邏輯地址空間或相對(duì)地址空間。4.1 程序的鏈接和裝入(3)物理地址。內(nèi)存中實(shí)際存儲(chǔ)單元的地址稱(chēng)為物理地址,也稱(chēng)為絕對(duì)地址或內(nèi)存地址。 為了使程序裝入內(nèi)存后能夠正常運(yùn)行,就必須將程序代碼

4、中的邏輯地址轉(zhuǎn)換為物理地址,這個(gè)轉(zhuǎn)換操作稱(chēng)為地址轉(zhuǎn)換。(4)物理地址空間。內(nèi)存中全部存儲(chǔ)單元的物理地址集合稱(chēng)為物理地址空間、絕對(duì)地址空間或內(nèi)存地址空間。(5)虛擬地址空間。CPU支持的地址范圍一般遠(yuǎn)大于機(jī)器實(shí)際內(nèi)存的大小,對(duì)于沒(méi)有對(duì)應(yīng)的實(shí)際內(nèi)存的那部分地址程序仍然可能使用,我們將程序能夠使用的整個(gè)地址范圍稱(chēng)為虛擬地址空間。4.1 程序的鏈接和裝入4.1.2 程序鏈接 鏈接程序在將幾個(gè)目標(biāo)模塊裝配成一個(gè)裝入模塊時(shí),需要解決以下問(wèn)題:(1)修改模塊的相對(duì)地址。(2)轉(zhuǎn)換外部調(diào)用符號(hào)。4.1 程序的鏈接和裝入目標(biāo)模塊鏈接方式(1)靜態(tài)鏈接。程序運(yùn)行前把源程序編譯成的所有目標(biāo)模塊及所需要的庫(kù)函數(shù)鏈接成

5、一個(gè)統(tǒng)一的裝入模塊,以后不再分開(kāi)。(2)裝入時(shí)動(dòng)態(tài)鏈接。目標(biāo)模塊的鏈接是在模塊裝入內(nèi)存時(shí)進(jìn)行的,即在模塊裝入過(guò)程中同時(shí)完成所有目標(biāo)模塊的鏈接。(3)運(yùn)行時(shí)動(dòng)態(tài)鏈接。先將一個(gè)目標(biāo)模塊裝入內(nèi)存且啟動(dòng)運(yùn)行,在進(jìn)程運(yùn)行過(guò)程中如果需要調(diào)用其他模塊,則再將所需模塊裝入內(nèi)存并把它鏈接到調(diào)用模塊上,然后進(jìn)程繼續(xù)運(yùn)行。4.1 程序的鏈接和裝入4.1.3 程序裝入 1. 程序裝入 由于程序的邏輯地址空間和內(nèi)存的物理地址空間并不一致,因此要使裝入內(nèi)存的程序能夠運(yùn)行,系統(tǒng)必須將程序中的邏輯地址轉(zhuǎn)換為機(jī)器能夠直接尋址的物理地址。因此,裝入程序在將程序(可裝入模塊)裝入內(nèi)存后,在程序執(zhí)行之前還必須將程序代碼中的邏輯地址轉(zhuǎn)

6、換為真實(shí)的物理地址,這種地址轉(zhuǎn)換操作稱(chēng)為地址映射、地址轉(zhuǎn)換或重定位。 程序裝入是指裝入程序根據(jù)內(nèi)存當(dāng)前的實(shí)際使用情況,將裝入模塊(程序)裝入到內(nèi)存合適的物理位置。4.1 程序的鏈接和裝入程序裝入分類(lèi) 靜態(tài)裝入-一次性將全部程序(所有可裝入模塊)裝入內(nèi)存,并在程序裝入內(nèi)存時(shí)或在程序運(yùn)行前,一次性完成程序中所有的邏輯地址(相對(duì)地址)到物理地址(絕對(duì)地址)的轉(zhuǎn)換工作。 運(yùn)行時(shí)動(dòng)態(tài)裝入-將程序的各目標(biāo)模塊按運(yùn)行的需要,逐次調(diào)入內(nèi)存并鏈接到調(diào)用模塊上。由于是逐次裝入內(nèi)存,因此不可能一次性完成將程序中所有邏輯地址轉(zhuǎn)換為物理地址的工作,這個(gè)地址轉(zhuǎn)換工作只能推遲到程序運(yùn)行中進(jìn)行,即執(zhí)行到涉及訪(fǎng)存地址的指令時(shí)再

7、進(jìn)行地址轉(zhuǎn)換。4.1 程序的鏈接和裝入2. 靜態(tài)重定位 指裝入程序?qū)⒊绦颍ㄑb入模塊)裝入到內(nèi)存后,并在程序裝入內(nèi)存時(shí)或在程序運(yùn)行前,一次性地將程序中所有指令中要訪(fǎng)問(wèn)的地址按下面的公式全部由相對(duì)地址(邏輯地址)轉(zhuǎn)換為絕對(duì)地址(物理地址),并在程序運(yùn)行過(guò)程中不再改變: 絕對(duì)地址相對(duì)地址程序存放的內(nèi)存起始地址4.1 程序的鏈接和裝入靜態(tài)重定位優(yōu)點(diǎn): 簡(jiǎn)單、容易實(shí)現(xiàn),不需要增加任何硬件設(shè)備,可以通過(guò)軟件全部實(shí)現(xiàn)。靜態(tài)重定位缺點(diǎn):(1)程序裝入內(nèi)存后,在運(yùn)行期間不允許該程序在內(nèi)存中移動(dòng),即無(wú)法實(shí)現(xiàn)內(nèi)存重新分配,因此內(nèi)存的利用率不高。(2)如果內(nèi)存提供的物理存儲(chǔ)空間無(wú)法滿(mǎn)足當(dāng)前程序的存儲(chǔ)容量,則必須由用戶(hù)

8、在程序設(shè)計(jì)時(shí)采用某種方法來(lái)解決存儲(chǔ)空間不足的問(wèn)題,這無(wú)疑增加了用戶(hù)的負(fù)擔(dān)。(3)不利于用戶(hù)共享存放在內(nèi)存中的同一個(gè)程序。如果幾個(gè)用戶(hù)要使用同一個(gè)程序,就必須在各自的內(nèi)存空間中存放該程序的副本,這浪費(fèi)了內(nèi)存資源。4.1 程序的鏈接和裝入3. 動(dòng)態(tài)重定位 指將裝入模塊裝入內(nèi)存后,并不立即完成相對(duì)地址到絕對(duì)地址的轉(zhuǎn)換,地址的轉(zhuǎn)換工作是在程序運(yùn)行過(guò)程中進(jìn)行的,即執(zhí)行到要訪(fǎng)問(wèn)指令或數(shù)據(jù)的相對(duì)地址時(shí)再進(jìn)行轉(zhuǎn)換。 地址重定位機(jī)構(gòu)需要一個(gè)(或多個(gè))基地址寄存器(也稱(chēng)重定位寄存器,BR)和一個(gè)(或多個(gè))程序邏輯地址寄存器(VR)。指令或數(shù)據(jù)在內(nèi)存中的絕對(duì)地址與邏輯地址的關(guān)系為:絕對(duì)地址(BR)(VR) 4.1

9、程序的鏈接和裝入動(dòng)態(tài)重定位過(guò)程 裝入程序?qū)⒊绦颍ㄑb入模塊)裝入到內(nèi)存,然后將程序所裝入的內(nèi)存區(qū)域首地址作為基地址送入BR中。在程序運(yùn)行過(guò)程中,當(dāng)某條指令訪(fǎng)問(wèn)到一個(gè)相對(duì)地址時(shí),則將該相對(duì)地址送入VR中;這時(shí),硬件地址轉(zhuǎn)換機(jī)構(gòu)把BR和VR中的內(nèi)容相加就形成了要訪(fǎng)問(wèn)的實(shí)際物理地址(絕對(duì)地址)。4.1 程序的鏈接和裝入動(dòng)態(tài)重定位優(yōu)點(diǎn):(1)指令和數(shù)據(jù)的物理地址是在程序運(yùn)行過(guò)程中由硬件動(dòng)態(tài)形成的;(2)動(dòng)態(tài)重定位的地址轉(zhuǎn)換工作在程序真正執(zhí)行到該指令時(shí)才進(jìn)行;(3)動(dòng)態(tài)重定位有利于對(duì)程序段進(jìn)行共享。動(dòng)態(tài)重定位缺點(diǎn):(1)需要硬件支持;(2)實(shí)現(xiàn)存儲(chǔ)管理的軟件算法比較復(fù)雜。4.1 程序的鏈接和裝入 注意:靜

10、態(tài)重定位僅適用全部程序一次性裝入內(nèi)存的情況,且地址變換是在程序裝入內(nèi)存時(shí)或程序運(yùn)行前一次性完成。 動(dòng)態(tài)重定位既適用全部程序一次性裝入內(nèi)存的情況,又適用于在程序運(yùn)行中動(dòng)態(tài)裝入各目標(biāo)模塊到內(nèi)存的情況,無(wú)論采用哪種裝入方式,動(dòng)態(tài)重定位的地址變換都是在程序運(yùn)行過(guò)程中執(zhí)行到涉及訪(fǎng)存地址的指令時(shí)進(jìn)行。 所以一次性將全部程序裝入內(nèi)存的方式,可以采用靜態(tài)重定位或動(dòng)態(tài)重定位方式進(jìn)行地址變換,但運(yùn)行時(shí)動(dòng)態(tài)裝入程序的各目標(biāo)模塊到內(nèi)存的方式,以及虛擬存儲(chǔ)器中動(dòng)態(tài)裝入分頁(yè)和分段到內(nèi)存的方式,只能采用動(dòng)態(tài)重定位方式進(jìn)行地址變換。4.1 程序的鏈接和裝入 內(nèi)存管理目標(biāo):(1)地址保護(hù)。一個(gè)程序不能訪(fǎng)問(wèn)另一個(gè)程序的地址空間。

11、(2)地址無(wú)關(guān)。用戶(hù)并不關(guān)心程序中使用的是何種地址,此時(shí)程序是在內(nèi)存還是在外存,這些工作應(yīng)由內(nèi)存管理自動(dòng)完成。 存儲(chǔ)管理基本功能:(1)內(nèi)存空間的分配與回收。按程序要求進(jìn)行內(nèi)存分配,當(dāng)程序完成后適時(shí)回收內(nèi)存。(2)實(shí)現(xiàn)地址轉(zhuǎn)換。實(shí)現(xiàn)程序中的邏輯地址到內(nèi)存物理地址的轉(zhuǎn)換。(3)內(nèi)存空間的共享與保護(hù)。對(duì)內(nèi)存中的程序和數(shù)據(jù)實(shí)施保護(hù)。(4)內(nèi)存空間的擴(kuò)充。實(shí)現(xiàn)內(nèi)存的邏輯擴(kuò)充,提供給用戶(hù)更大的存儲(chǔ)空間,允許比內(nèi)存容量還大的程序運(yùn)行。4.2 存儲(chǔ)器及存儲(chǔ)管理的基本功能4.2.1 多級(jí)存儲(chǔ)器體系(1)寄存器。寄存器是CPU內(nèi)部的高速存儲(chǔ)單元,主要用于存放程序運(yùn)行過(guò)程中所使用的各種數(shù)據(jù)。寄存器的存儲(chǔ)容量最小,

12、但存取速度最高。(2)高速緩沖存儲(chǔ)器。簡(jiǎn)稱(chēng)高速緩存,其存取速度與CPU速度相當(dāng),非???,但成本高且容量較?。ㄒ话銥閹譑B到幾百KB),主要用來(lái)存放使用頻率較高的少量信息。(3)內(nèi)部存儲(chǔ)器。簡(jiǎn)稱(chēng)內(nèi)存,又稱(chēng)主存儲(chǔ)器。程序需要裝入內(nèi)存方能運(yùn)行,因此內(nèi)存儲(chǔ)器一般用來(lái)存放用戶(hù)正在執(zhí)行的程序及使用到的數(shù)據(jù)。CPU可隨機(jī)存取其中的數(shù)據(jù)。內(nèi)存的存取速度要比高速緩存慢一點(diǎn),容量要比高速緩存大得多(一般為幾GB)。(4)外部存儲(chǔ)器。簡(jiǎn)稱(chēng)外存,又稱(chēng)輔助存儲(chǔ)器。外存不能被CPU直接訪(fǎng)問(wèn),一般用來(lái)存放大量的、暫時(shí)不用的數(shù)據(jù)信息。外存的存取速度較低且成本也較低,但容量較大(一般為幾十GB到幾百GB)。4.2 存儲(chǔ)器及存儲(chǔ)

13、管理的基本功能4.2 存儲(chǔ)器及存儲(chǔ)管理的基本功能 雖然用于存儲(chǔ)數(shù)據(jù)與程序的多種存儲(chǔ)設(shè)備在存取速度、存儲(chǔ)容量等屬性方面都各不相同,但是將它們組織在一起后就能發(fā)揮各自的特長(zhǎng),共同承擔(dān)存儲(chǔ)信息的任務(wù),所以現(xiàn)代計(jì)算機(jī)一般采用多級(jí)存儲(chǔ)器體系。多級(jí)存儲(chǔ)器體系示意4.2.2 內(nèi)存的分配與回收以及地址轉(zhuǎn)換 1.內(nèi)存空間的分配與回收 內(nèi)存管理的首要任務(wù)是當(dāng)用戶(hù)需要內(nèi)存時(shí),系統(tǒng)按照一定的算法把某一空閑的內(nèi)存空間分配給用戶(hù)程序(進(jìn)程);不需要時(shí)再及時(shí)回收,以供其他用戶(hù)程序使用。 在多道程序設(shè)計(jì)環(huán)境中,內(nèi)存分配的功能包括制定分配策略、構(gòu)造分配用的數(shù)據(jù)結(jié)構(gòu)、響應(yīng)用戶(hù)程序的內(nèi)存分配請(qǐng)求和回收用戶(hù)程序釋放的內(nèi)存區(qū)。4.2

14、存儲(chǔ)器及存儲(chǔ)管理的基本功能設(shè)計(jì)內(nèi)存分配與回收算法必須考慮的問(wèn)題:(1)數(shù)據(jù)結(jié)構(gòu)。登記內(nèi)存的使用情況,記錄可供分配的內(nèi)存空閑區(qū)大小和起始地址,以供分配和回收內(nèi)存時(shí)使用。(2)放置策略。決定內(nèi)存中放置信息的區(qū)域(或位置),即怎樣在若干個(gè)內(nèi)存空閑區(qū)中選擇一個(gè)或幾個(gè)空閑區(qū)來(lái)放置信息。(3)調(diào)入策略。確定外存中的程序段和數(shù)據(jù)段在什么時(shí)間、以什么樣的控制方式進(jìn)入內(nèi)存。(4)淘汰策略。在需要將某個(gè)程序段或數(shù)據(jù)段調(diào)入內(nèi)存卻出現(xiàn)內(nèi)存沒(méi)有足夠空閑區(qū)時(shí),由淘汰策略來(lái)決定把內(nèi)存中的哪些程序段和數(shù)據(jù)段由內(nèi)存調(diào)出放入到外存,以便為調(diào)入的程序段或數(shù)據(jù)段騰出足夠的內(nèi)存空間。4.2 存儲(chǔ)器及存儲(chǔ)管理的基本功能2. 地址轉(zhuǎn)換(地

15、址重定位) 地址轉(zhuǎn)換有3種方式:(1)編程或編譯時(shí)產(chǎn)生絕對(duì)地址 在程序中采用符號(hào)地址,然后由編譯程序或匯編程序在對(duì)該程序編譯或匯編時(shí)再將這些符號(hào)地址轉(zhuǎn)換為絕對(duì)地址。(2)靜態(tài)地址轉(zhuǎn)換 在程序裝入內(nèi)存時(shí)完成從邏輯地址到物理地址的轉(zhuǎn)換。(3)動(dòng)態(tài)地址轉(zhuǎn)換 在程序運(yùn)行過(guò)程中要訪(fǎng)問(wèn)數(shù)據(jù)或指令中的地址時(shí)由系統(tǒng)硬件完成從邏輯地址到物理地址的轉(zhuǎn)換。4.2 存儲(chǔ)器及存儲(chǔ)管理的基本功能4.2.3 內(nèi)存的共享、保護(hù)及擴(kuò)充1. 內(nèi)存空間的共享和保護(hù) 兩個(gè)或多個(gè)進(jìn)程共享內(nèi)存中相同區(qū)域稱(chēng)為內(nèi)存的共享。 共享分為代碼共享和數(shù)據(jù)共享。代碼共享指多個(gè)進(jìn)程運(yùn)行內(nèi)存中的同一個(gè)代碼段。數(shù)據(jù)共享用于實(shí)現(xiàn)進(jìn)程通信。 存儲(chǔ)保護(hù)的目的是保

16、護(hù)系統(tǒng)程序區(qū)不被用戶(hù)有意或無(wú)意地侵犯,不允許用戶(hù)程序讀寫(xiě)不屬于自己地址空間的數(shù)據(jù),使內(nèi)存中各道程序只能訪(fǎng)問(wèn)它自己的區(qū)域,避免各道程序之間相互干擾,特別是當(dāng)一道程序發(fā)生錯(cuò)誤時(shí)不至于影響其他程序的運(yùn)行。 4.2 存儲(chǔ)器及存儲(chǔ)管理的基本功能存儲(chǔ)保護(hù)方式(1)界地址保護(hù) 界地址方式主要是防止地址越界,每個(gè)進(jìn)程(程序)都有自己獨(dú)立的進(jìn)程空間,如果一個(gè)進(jìn)程在運(yùn)行時(shí)所產(chǎn)生的地址在其所屬空間之外則發(fā)生地址越界。常用的界地址保護(hù)有以下兩種: 上下界保護(hù)和地址檢查機(jī)構(gòu):主要用于靜態(tài)地址轉(zhuǎn)換。硬件提供一對(duì)上下界寄存器來(lái)分別存放程序裝入內(nèi)存后的首地址和末地址。4.2 存儲(chǔ)器及存儲(chǔ)管理的基本功能 基址、限長(zhǎng)寄存器和動(dòng)態(tài)

17、地址轉(zhuǎn)換機(jī)構(gòu)。這種機(jī)制主要用于動(dòng)態(tài)地址轉(zhuǎn)換。在計(jì)算機(jī)中設(shè)置兩個(gè)專(zhuān)門(mén)的寄存器,稱(chēng)為基址和限長(zhǎng)寄存器,這兩種寄存器分別存放運(yùn)行程序在內(nèi)存的起始地址及其總長(zhǎng)度。4.2 存儲(chǔ)器及存儲(chǔ)管理的基本功能4.2 存儲(chǔ)器及存儲(chǔ)管理的基本功能(2)存儲(chǔ)鍵保護(hù) 通過(guò)保護(hù)鍵匹配來(lái)判斷存儲(chǔ)訪(fǎng)問(wèn)方式是否合法。對(duì)每個(gè)內(nèi)存區(qū)域指定一個(gè)鍵值和若干禁止的訪(fǎng)問(wèn)方式,在進(jìn)程中也指定鍵值;如果訪(fǎng)問(wèn)時(shí)內(nèi)存區(qū)域和進(jìn)程鍵值不匹配而且是被禁止的訪(fǎng)問(wèn)方式,則發(fā)生操作越權(quán)錯(cuò)誤。2. 內(nèi)存空間的擴(kuò)充 實(shí)現(xiàn)內(nèi)存擴(kuò)充的根本辦法是充分利用內(nèi)存與外存資源,即只將當(dāng)前需要使用的部分程序和數(shù)據(jù)放入內(nèi)存,而將暫不使用的程序和數(shù)據(jù)存于外存,當(dāng)需要的時(shí)候再交換到內(nèi)存

18、來(lái)。 控制數(shù)據(jù)在內(nèi)、外存之間交換的基本方式:(1)用戶(hù)程序自己控制方式。典型的例子是覆蓋。(2)操作系統(tǒng)控制方式: 交換方式:利用外存空間,對(duì)進(jìn)程實(shí)體的整體或部分交換。 請(qǐng)求調(diào)入方式:所要訪(fǎng)問(wèn)的程序段或數(shù)據(jù)段不在內(nèi)存時(shí),由操作系統(tǒng)自動(dòng)從外存將所需的程序段和數(shù)據(jù)段調(diào)入內(nèi)存。 預(yù)調(diào)入方式:由操作系統(tǒng)預(yù)測(cè)在不遠(yuǎn)的將來(lái)會(huì)訪(fǎng)問(wèn)到哪些程序段和數(shù)據(jù)段,并在它們被訪(fǎng)問(wèn)之前選擇合適的時(shí)機(jī)將其調(diào)入內(nèi)存。4.2 存儲(chǔ)器及存儲(chǔ)管理的基本功能 分區(qū)式存儲(chǔ)管理對(duì)內(nèi)存采用連續(xù)分配方式,即根據(jù)用戶(hù)程序的需求為其在內(nèi)存分配一段連續(xù)的存儲(chǔ)空間。分區(qū)式存儲(chǔ)管理屬于最簡(jiǎn)單的內(nèi)存管理方式,主要用于早期的操作系統(tǒng)。4.3 分區(qū)式存儲(chǔ)管理

19、4.3.1 單一連續(xù)分區(qū)存儲(chǔ)管理1. 實(shí)現(xiàn)原理特點(diǎn):只適合于單用戶(hù)單任務(wù)操作系統(tǒng),是一種最簡(jiǎn)單的存儲(chǔ)管理方式。方法:將內(nèi)存空間劃分為系統(tǒng)區(qū)和用戶(hù)區(qū)兩部分(見(jiàn)下圖)。系統(tǒng)區(qū)僅供操作系統(tǒng)使用,通常放在內(nèi)存的低地址部分,系統(tǒng)區(qū)以外的全部?jī)?nèi)存空間為用戶(hù)區(qū),提供給用戶(hù)使用。用戶(hù)程序由裝入程序從用戶(hù)區(qū)的低地址開(kāi)始裝入且只能裝入一個(gè)程序運(yùn)行。用戶(hù)區(qū)裝入一個(gè)程序后,內(nèi)存中剩余的區(qū)域則無(wú)法再利用。4.3 分區(qū)式存儲(chǔ)管理 單一連續(xù)分區(qū)存儲(chǔ)管理2. 分配與回收 分配過(guò)程是先將待裝入內(nèi)存的程序與用戶(hù)區(qū)進(jìn)行大小比較,若程序所需內(nèi)存空間沒(méi)有超過(guò)用戶(hù)區(qū)的大小,則為它分配內(nèi)存空間;否則內(nèi)存分配失敗?;厥詹僮鲃t是在用戶(hù)區(qū)的程序

20、運(yùn)行結(jié)束后,將該區(qū)域標(biāo)志置為未分配即可。 單一連續(xù)分區(qū)存儲(chǔ)管理3. 地址轉(zhuǎn)換與存儲(chǔ)保護(hù)(1)采用靜態(tài)重定位方式 單一連續(xù)分區(qū)存儲(chǔ)管理的地址轉(zhuǎn)換多采用靜態(tài)重定位,即用戶(hù)程序在裝入內(nèi)存時(shí)采用靜態(tài)重定位一次性對(duì)所有數(shù)據(jù)和指令中的邏輯地址進(jìn)行轉(zhuǎn)換。程序執(zhí)行期間,不允許指令和數(shù)據(jù)再改變地址,也不允許程序在內(nèi)存中移動(dòng)位置。 單一連續(xù)分區(qū)存儲(chǔ)管理(2)采用動(dòng)態(tài)重定位方式 設(shè)置一個(gè)重定位寄存器并用它來(lái)指明內(nèi)存中系統(tǒng)區(qū)和用戶(hù)區(qū)的地址界限,同時(shí)又作為用戶(hù)區(qū)的基地址。用戶(hù)程序由裝入程序裝入到從界限地址開(kāi)始的內(nèi)存區(qū)域,但這時(shí)并不進(jìn)行地址轉(zhuǎn)換。地址轉(zhuǎn)換要推遲到程序執(zhí)行過(guò)程中執(zhí)行到某指令中或某個(gè)數(shù)據(jù)的邏輯地址時(shí),這時(shí)就動(dòng)

21、態(tài)地將這個(gè)邏輯地址與重定位寄存器中的值相加得到要訪(fǎng)問(wèn)的物理地址。 單一連續(xù)分區(qū)存儲(chǔ)管理4. 單一連續(xù)分區(qū)管理的優(yōu)缺點(diǎn)優(yōu)點(diǎn): 管理簡(jiǎn)單,開(kāi)銷(xiāo)??; 安全性高,除了系統(tǒng)區(qū)外,用戶(hù)區(qū)中只有一個(gè)程序,不存在多個(gè)程序相互影響的問(wèn)題; 采用靜態(tài)重定位方式時(shí)不需要硬件支持。缺點(diǎn): 不支持多用戶(hù); 程序的地址空間受用戶(hù)區(qū)空間大小的限制,這是因?yàn)槌绦蛟谶\(yùn)行前必須一次性裝入內(nèi)存的連續(xù)區(qū)域,若程序的地址空間比用戶(hù)區(qū)大則無(wú)法裝入; 由于一個(gè)程序獨(dú)占系統(tǒng)資源,這樣會(huì)造成系統(tǒng)資源的嚴(yán)重浪費(fèi)。4.3.2 固定分區(qū)存儲(chǔ)管理1. 實(shí)現(xiàn)原理 將內(nèi)存系統(tǒng)區(qū)之外的用戶(hù)空間劃分成若干個(gè)固定大小的區(qū)域,每個(gè)區(qū)域稱(chēng)為一個(gè)分區(qū)并可裝入一個(gè)用戶(hù)

22、程序運(yùn)行。分區(qū)一旦劃分完成,就在系統(tǒng)的整個(gè)運(yùn)行期間保持不變。 每個(gè)分區(qū)允許裝入一道程序運(yùn)行,則系統(tǒng)允許在內(nèi)存中同時(shí)裝入多道程序并發(fā)執(zhí)行。4.3 分區(qū)式存儲(chǔ)管理2. 分區(qū)劃分 在固定分區(qū)存儲(chǔ)管理方式中,分區(qū)的數(shù)目和每個(gè)分區(qū)的大小由系統(tǒng)操作員或操作系統(tǒng)決定。 分區(qū)劃分方式:(1)分區(qū)大小相等。優(yōu)點(diǎn):管理簡(jiǎn)單,缺點(diǎn):缺乏靈活性。例如,若程序過(guò)小則會(huì)造成內(nèi)存空間浪費(fèi),若程序過(guò)大則因其無(wú)法裝入分區(qū)而導(dǎo)致不能運(yùn)行。(2)分區(qū)大小不等。適量的中分區(qū)和較少的大分區(qū)。裝入程序可以根據(jù)用戶(hù)程序的大小將它裝入到適當(dāng)?shù)姆謪^(qū)。 固定分區(qū)存儲(chǔ)管理 固定分區(qū)存儲(chǔ)管理3. 內(nèi)存空間的分配與回收(1)數(shù)據(jù)結(jié)構(gòu):為了有效管理內(nèi)存

23、中各分區(qū)的分配與使用,系統(tǒng)建立了一張內(nèi)存分區(qū)分配表,用來(lái)記錄內(nèi)存中所劃分的分區(qū)以及各分區(qū)的使用情況。 分區(qū)分配表的內(nèi)容包括分區(qū)號(hào)、起始地址、大小和狀態(tài);狀態(tài)欄的值為0時(shí)表示該分區(qū)空閑可以裝入程序。 固定分區(qū)存儲(chǔ)管理(2)內(nèi)存空間分配 系統(tǒng)啟動(dòng)后在為程序分配分區(qū)之前,根據(jù)內(nèi)存分區(qū)的劃分在分區(qū)分配表中填入每個(gè)分區(qū)的起始地址和大小,并且將所有的狀態(tài)欄均填入0表示這些分區(qū)可用。 當(dāng)有程序申請(qǐng)內(nèi)存空間時(shí),則檢查分區(qū)分配表,選擇那些狀態(tài)為0的分區(qū)來(lái)比較程序地址空間的大小和分區(qū)的大小。當(dāng)所有空閑分區(qū)的大小都不能容納該程序時(shí),則該程序暫時(shí)不能進(jìn)入內(nèi)存,并由系統(tǒng)顯示內(nèi)存不足的信息;當(dāng)某個(gè)空閑分區(qū)的大小能容納該程

24、序時(shí),則把該程序裝入這個(gè)分區(qū),并將程序名填入這個(gè)分區(qū)的狀態(tài)欄。 固定分區(qū)存儲(chǔ)管理程序進(jìn)入分區(qū)的兩種排隊(duì)策略:(1)每個(gè)程序被調(diào)度程序選中時(shí),就將其排到一個(gè)能夠裝入它的最小分區(qū)號(hào)(不管該分區(qū)是否空閑)等待隊(duì)列中,但這種策略在等待處理的程序大小很不均勻時(shí),會(huì)出現(xiàn)有的分區(qū)空閑而有的分區(qū)忙碌;(2)所有等待處理的程序排成一個(gè)隊(duì)列,當(dāng)調(diào)度其中一個(gè)程序進(jìn)入內(nèi)存分區(qū)時(shí),則選擇可容納它的最小空閑分區(qū),分配給它以充分利用內(nèi)存。 固定分區(qū)存儲(chǔ)管理(3)內(nèi)存空間回收 當(dāng)程序運(yùn)行結(jié)束時(shí),根據(jù)程序名檢索分區(qū)分配表,從狀態(tài)欄信息可找到該程序所使用的分區(qū),然后將該分區(qū)狀態(tài)欄置為0,表示該分區(qū)已經(jīng)空閑可以裝入新的程序。 固定

25、分區(qū)存儲(chǔ)管理4. 地址轉(zhuǎn)換與存儲(chǔ)保護(hù)固定分區(qū)存儲(chǔ)管理的地址轉(zhuǎn)換可以采用靜態(tài)重定位方式: 物理地址邏輯地址分區(qū)起始地址系統(tǒng)設(shè)置了兩個(gè)地址寄存器,分別稱(chēng)為上界寄存器和下界寄存器。上界寄存器用來(lái)存放分區(qū)的低地址,即起始地址;下界寄存器用來(lái)存放分區(qū)的高地址,即結(jié)束地址。裝入程序在將用戶(hù)程序和數(shù)據(jù)裝入內(nèi)存分區(qū)時(shí)進(jìn)行地址轉(zhuǎn)換,即將用戶(hù)程序和數(shù)據(jù)中出現(xiàn)的邏輯地址,改為由邏輯地址加上上界寄存器中所存放的分區(qū)低地址,即轉(zhuǎn)換為可直接訪(fǎng)問(wèn)的物理地址。 固定分區(qū)存儲(chǔ)管理存儲(chǔ)保護(hù) 方法是在程序運(yùn)行過(guò)程中,每當(dāng)CPU獲得物理地址時(shí)首先與上、下界寄存器的值進(jìn)行比較,若超出上、下界寄存器的值就發(fā)出地址越界中斷信號(hào),并由相應(yīng)的

26、中斷處理程序處理。 固定分區(qū)存儲(chǔ)管理5. 固定分區(qū)分配的優(yōu)缺點(diǎn)優(yōu)點(diǎn):通過(guò)分區(qū)分配表來(lái)實(shí)現(xiàn)內(nèi)存分配與回收,而且程序執(zhí)行時(shí)采用靜態(tài)重定位這種方式簡(jiǎn)單易行,CPU利用率較高。缺點(diǎn):程序大小受分區(qū)大小的限制,當(dāng)分區(qū)較大而程序較小時(shí)容易形成內(nèi)部碎片(一個(gè)分區(qū)內(nèi)部浪費(fèi)的空間稱(chēng)為內(nèi)部碎片)而造成內(nèi)存空間的浪費(fèi);由于固定分區(qū)分配方式使分區(qū)總數(shù)固定,這就限制了并發(fā)執(zhí)行程序的數(shù)量。4.3.3 可變分區(qū)存儲(chǔ)管理1. 實(shí)現(xiàn)原理在程序裝入內(nèi)存之前并不建立分區(qū),內(nèi)存分區(qū)是在程序運(yùn)行時(shí)根據(jù)程序?qū)?nèi)存空間的需要而動(dòng)態(tài)建立的。分區(qū)的劃分時(shí)間、大小及其位置都是動(dòng)態(tài)的。2. 數(shù)據(jù)結(jié)構(gòu)包括:已分配分區(qū)表、空閑分區(qū)表及空閑分區(qū)鏈。已分

27、配分區(qū)表用于登記內(nèi)存空間中已經(jīng)分配的分區(qū),每個(gè)表項(xiàng)記錄一個(gè)已分配分區(qū),其內(nèi)容包括分區(qū)號(hào)、起始地址、大小和狀態(tài)??臻e分區(qū)表則記錄內(nèi)存中所有空閑的分區(qū),每個(gè)表項(xiàng)記錄一個(gè)空閑分區(qū),其內(nèi)容包括分區(qū)號(hào)、起始地址、大小和狀態(tài)??臻e分區(qū)鏈以系統(tǒng)當(dāng)前的空閑分區(qū)為結(jié)點(diǎn),利用鏈指針將所有空閑分區(qū)結(jié)點(diǎn)鏈接成一個(gè)雙向循環(huán)隊(duì)列。4.3 分區(qū)式存儲(chǔ)管理 可變分區(qū)存儲(chǔ)管理已分配分區(qū)表空閑分區(qū)表分區(qū)號(hào)起始地址(KB)大?。↘B)狀態(tài)分區(qū)號(hào)起始地址(KB)大?。↘B)狀態(tài)15020P117020029015P221051550326040P333001000內(nèi)存及空閑分區(qū)鏈?zhǔn)疽?固定分區(qū)存儲(chǔ)管理3. 分配算法(1)首次適應(yīng)算法

28、要求空閑分區(qū)按內(nèi)存地址遞增的次序排列在空閑分區(qū)鏈上,每當(dāng)一個(gè)程序申請(qǐng)裝入內(nèi)存時(shí),管理程序在空閑分區(qū)鏈上按內(nèi)存地址遞增的順序從鏈?zhǔn)组_(kāi)始查找空閑分區(qū),直到找到一個(gè)最先滿(mǎn)足此程序要求的空閑分區(qū),并按此程序的大小從該空閑分區(qū)中劃出一塊連續(xù)的內(nèi)存區(qū)域給其使用。特點(diǎn):每次都從內(nèi)存的低地址部分開(kāi)始查找滿(mǎn)足要求的空閑分區(qū)。首次適應(yīng)算法中的空閑分區(qū)按地址遞增排列,這使回收的內(nèi)存區(qū)與相鄰空閑分區(qū)的合并比較容易。 固定分區(qū)存儲(chǔ)管理(2)最佳適應(yīng)算法要求空閑分區(qū)按分區(qū)大小遞增的次序排列在空閑分區(qū)鏈上,當(dāng)為用戶(hù)程序分配內(nèi)存空閑分區(qū)時(shí),則從空閑分區(qū)鏈鏈?zhǔn)椎淖钚】臻e分區(qū)開(kāi)始查找,找到的第一個(gè)大小滿(mǎn)足程序要求的空閑分區(qū)就是最

29、佳空閑分區(qū);該分區(qū)能滿(mǎn)足程序的內(nèi)存要求,并且在分配后剩余的空閑空間最小。優(yōu)點(diǎn):保留了內(nèi)存中的大空閑區(qū),當(dāng)大程序到來(lái)時(shí)有足夠大的空閑區(qū)可以為其分配。在回收內(nèi)存區(qū)時(shí),為了將回收的內(nèi)存區(qū)與相鄰的空閑分區(qū)合并成一個(gè)空閑分區(qū),可能要查遍整個(gè)空閑分區(qū)鏈,因?yàn)榭臻e分區(qū)是按大小排列而不是按地址排列的。 固定分區(qū)存儲(chǔ)管理(3)最差適應(yīng)算法要求空閑分區(qū)按分區(qū)大小遞減的次序排列在空閑分區(qū)鏈上,每一次總是把空閑分區(qū)鏈鏈?zhǔn)椎淖畲蟮目臻e分區(qū)分配給請(qǐng)求的用戶(hù)程序;若該空閑分區(qū)小于程序要求的大小則分配失敗;若能夠滿(mǎn)足程序的要求,則按程序要求的大小從該空閑分區(qū)中劃出一塊連續(xù)區(qū)域分配給它。優(yōu)點(diǎn):有利于后期再分配。在回收內(nèi)存區(qū)時(shí),

30、為了將回收的內(nèi)存區(qū)與相鄰的空閑分區(qū)合并成一個(gè)空閑分區(qū),可能要查遍整個(gè)空閑分區(qū)鏈,因?yàn)榭臻e分區(qū)是按大小排列而不是按地址排列的。 固定分區(qū)存儲(chǔ)管理例4.1 有一程序序列:程序A要求18KB,程序B要求25KB,程序C要求30KB,初始內(nèi)存分配情況如圖所示(其中陰影為分配區(qū))。問(wèn)首次適應(yīng)算法、最佳適應(yīng)算法和最差適應(yīng)算法中哪種能滿(mǎn)足該程序序列的分配? 固定分區(qū)存儲(chǔ)管理【解答】 結(jié)合系統(tǒng)中初始內(nèi)存的分配情況,建立的首次適應(yīng)算法、最佳適應(yīng)算法和最差適應(yīng)算法的空閑區(qū)鏈分別如圖: 對(duì)于首次適應(yīng)算法,程序A分配30KB的空閑分區(qū),程序B分配46KB的空閑分區(qū),此后就無(wú)法為程序C分配合適的空閑分區(qū)了。 對(duì)于最佳適

31、應(yīng)算法,程序A分配20KB的空閑分區(qū),程序B分配30KB的空閑分區(qū),程序C分配46KB的空閑分區(qū)。 對(duì)于最差適應(yīng)算法,程序A分配46KB的空閑分區(qū),程序B分配30KB的空閑分區(qū),此后就無(wú)法為程序C分配合適的空閑分區(qū)了。 因此,本題最佳適應(yīng)算法對(duì)這個(gè)程序序列的內(nèi)存分配是合適的。 固定分區(qū)存儲(chǔ)管理4.分配與回收 系統(tǒng)進(jìn)行內(nèi)存分配時(shí)采用相應(yīng)的分配算法來(lái)查找系統(tǒng)中是否存在滿(mǎn)足要求的空閑分區(qū);若找到就為程序分配相應(yīng)的內(nèi)存空間,并修改相關(guān)的數(shù)據(jù)結(jié)構(gòu),否則此次分配失敗。 內(nèi)存的回收指在程序運(yùn)行結(jié)束后,系統(tǒng)要把該程序釋放的內(nèi)存空間及時(shí)收回以便重新分配給需要的程序。 固定分區(qū)存儲(chǔ)管理回收的內(nèi)存區(qū)與內(nèi)存中的空閑分

32、區(qū)在位置上存在4種關(guān)系: (1)回收的內(nèi)存區(qū)與上、下兩個(gè)空閑分區(qū)相鄰 (2)回收的內(nèi)存區(qū)只與上空閑區(qū)相鄰 (3)回收的內(nèi)存區(qū)只與下空閑分區(qū)相鄰 (4)回收的內(nèi)存區(qū)上、下都不與空閑分區(qū)相鄰 固定分區(qū)存儲(chǔ)管理5. 地址轉(zhuǎn)換與存儲(chǔ)保護(hù)(1)地址轉(zhuǎn)換 步驟如下: 當(dāng)程序占用CPU時(shí),進(jìn)程調(diào)度程序就把該程序所占分區(qū)的起始地址送入基址寄存器,把程序所占分區(qū)的大小送入限長(zhǎng)寄存器。 程序執(zhí)行過(guò)程中,每當(dāng)CPU執(zhí)行到涉及地址的指令時(shí)都要由地址轉(zhuǎn)換機(jī)構(gòu)把程序中的邏輯地址轉(zhuǎn)換成物理地址。 固定分區(qū)存儲(chǔ)管理(2)存儲(chǔ)保護(hù) 基址寄存器和限長(zhǎng)寄存器分別記錄當(dāng)前運(yùn)行程序在內(nèi)存中所占分區(qū)的起始地址和結(jié)束地址。當(dāng)CPU執(zhí)行到程

33、序中涉及地址的指令時(shí),必須核對(duì)轉(zhuǎn)換后的物理地址是否滿(mǎn)足條件“起始地址物理地址結(jié)束地址”,若滿(mǎn)足則執(zhí)行該指令,否則產(chǎn)生地址越界錯(cuò)誤停止該程序的執(zhí)行。 固定分區(qū)存儲(chǔ)管理6. 碎片問(wèn)題 在采用可變分區(qū)存儲(chǔ)管理方式下,隨著分配與回收的不斷進(jìn)行,內(nèi)存中會(huì)出現(xiàn)很多離散分布且容量很小的空閑小分區(qū),雖然這些空閑小分區(qū)的總?cè)萘磕軌驖M(mǎn)足程序?qū)?nèi)存的要求,但由于一個(gè)程序需要裝入到一個(gè)連續(xù)的內(nèi)存分區(qū),而這些空閑小分區(qū)單個(gè)又不能滿(mǎn)足程序?qū)?nèi)存大小的需求,于是這些小的空閑分區(qū)就成為內(nèi)存中無(wú)法再利用的資源,稱(chēng)為內(nèi)存碎片或零頭。 在可變分區(qū)分配中,系統(tǒng)解決外部碎片的思路是通過(guò)某種方法,將內(nèi)存中無(wú)法利用的小空閑分區(qū)合并在一起組

34、成一個(gè)較大的空閑分區(qū)來(lái)滿(mǎn)足程序的需要,這種方法被稱(chēng)為緊湊技術(shù)。4.3.4 覆蓋與交換技術(shù)1. 覆蓋技術(shù) 單CPU系統(tǒng)中的任一時(shí)刻只能執(zhí)行一條指令,而一個(gè)用戶(hù)程序通常由若干個(gè)在功能上相互獨(dú)立的程序段組成。在用戶(hù)程序運(yùn)行的某一時(shí)刻,這些相互獨(dú)立的程序段不可能同時(shí)運(yùn)行,因此可以采用覆蓋(Overlay)技術(shù)按程序自身的邏輯結(jié)構(gòu)讓那些不會(huì)同時(shí)執(zhí)行的程序段共享同一塊內(nèi)存區(qū)域;即這些程序段先保存在外存上,僅將最初執(zhí)行的一部分程序(程序段)裝入內(nèi)存,當(dāng)程序前一部分程序段執(zhí)行結(jié)束時(shí),再把后一部分要執(zhí)行的程序段陸續(xù)調(diào)入內(nèi)存去覆蓋前一部分已執(zhí)行結(jié)束的程序段。 用戶(hù)要根據(jù)程序的邏輯結(jié)構(gòu)將一個(gè)程序劃分為不同的程序段,

35、并事先規(guī)定好內(nèi)存的覆蓋區(qū)及程序的執(zhí)行順序和覆蓋順序,否則就會(huì)導(dǎo)致程序段的覆蓋次序與執(zhí)行次序之間發(fā)生沖突。4.3 分區(qū)式存儲(chǔ)管理 覆蓋與交換技術(shù)例:程序中包含了6個(gè)程序段,它們之間的調(diào)用關(guān)系如圖(a) 所示:M0調(diào)用了M1和M2,M1調(diào)用了M1.1和M1.2,M2調(diào)用了M2.1。通過(guò)調(diào)用關(guān)系可知,程序段M1和M2相互之間沒(méi)有調(diào)用關(guān)系,它們不需要同時(shí)駐留在內(nèi)存,可以共享同一覆蓋區(qū);同理程序段M1.1、M1.2和M2.1也可以共享同一覆蓋區(qū),其覆蓋結(jié)構(gòu)如圖(b) 所示。 覆蓋與交換技術(shù)2. 交換技術(shù)在操作系統(tǒng)中增加交換(對(duì)換)功能,即由操作系統(tǒng)根據(jù)需要,將內(nèi)存中暫時(shí)不具備運(yùn)行條件的部分程序或數(shù)據(jù)移到

36、外存,以便騰出足夠的內(nèi)存空間將外存中急需運(yùn)行的程序或數(shù)據(jù)調(diào)入內(nèi)存投入運(yùn)行。交換技術(shù)實(shí)現(xiàn)方式:(1)若交換以進(jìn)程為單位,即每次換進(jìn)/換出的是整個(gè)進(jìn)程,則把這種交換稱(chēng)為進(jìn)程交換(進(jìn)程對(duì)換)或整體交換(整體對(duì)換)。進(jìn)程交換廣泛應(yīng)用于分時(shí)系統(tǒng),主要解決內(nèi)存緊張問(wèn)題。(2)若交換以頁(yè)或段為單位,則把這種交換分別稱(chēng)為頁(yè)置換(頁(yè)交換或頁(yè)對(duì)換)或段置換(段交換或段對(duì)換)。頁(yè)置換和段置換是以進(jìn)程中的某一部分為交換單位,因此又稱(chēng)為部分交換(部分對(duì)換)。部分交換廣泛應(yīng)用于現(xiàn)代操作系統(tǒng)中,是實(shí)現(xiàn)虛擬存儲(chǔ)器的基礎(chǔ)。4.4.1 分頁(yè)存儲(chǔ)管理的基本原理1. 實(shí)現(xiàn)原理在分頁(yè)存儲(chǔ)管理中,一個(gè)程序的邏輯地址空間被劃分成若干個(gè)大小

37、相等的區(qū)域,每個(gè)區(qū)域稱(chēng)為頁(yè)或頁(yè)面,并且程序地址空間中所有的頁(yè)從0開(kāi)始順序編號(hào)。相應(yīng)地,內(nèi)存物理地址空間也按同樣方式劃分成與頁(yè)大小相同的區(qū)域,每個(gè)區(qū)域稱(chēng)為物理塊或頁(yè)框,與頁(yè)一樣內(nèi)存空間中的所有物理塊也從0開(kāi)始順序編號(hào)。在為程序分配內(nèi)存時(shí),允許以頁(yè)為單位將程序的各個(gè)頁(yè),分別裝入內(nèi)存中相鄰或不相鄰的物理塊中。4.4 分頁(yè)存儲(chǔ)管理 分頁(yè)存儲(chǔ)管理的基本原理2. 邏輯地址結(jié)構(gòu)程序的一維邏輯空間經(jīng)過(guò)系統(tǒng)硬件自動(dòng)分頁(yè)后,形成“頁(yè)號(hào)+頁(yè)內(nèi)地址”的地址結(jié)構(gòu)其中,011位是頁(yè)內(nèi)地址,即每個(gè)頁(yè)的大小是4KB;1231位是頁(yè)號(hào),即地址空間最多允許有1M個(gè)頁(yè)。一維邏輯地址與頁(yè)號(hào)和頁(yè)內(nèi)地址的關(guān)系是(注:頁(yè)長(zhǎng)即一頁(yè)的大?。?/p>

38、 一維邏輯地址頁(yè)號(hào)頁(yè)長(zhǎng)頁(yè)內(nèi)地址 分頁(yè)存儲(chǔ)管理的基本原理3. 數(shù)據(jù)結(jié)構(gòu)(1)頁(yè)表在分頁(yè)系統(tǒng)中,允許頁(yè)以離散方式存儲(chǔ)在內(nèi)存不同的物理塊里,為了使程序能夠正確運(yùn)行,必須在內(nèi)存空間中找到存放每個(gè)頁(yè)的物理塊。因此操作系統(tǒng)為每個(gè)程序(進(jìn)程)建立了一張頁(yè)表,用來(lái)映射頁(yè)號(hào)與內(nèi)存物理塊號(hào)之間的對(duì)應(yīng)關(guān)系。(2)內(nèi)存分配表系統(tǒng)建立一張內(nèi)存分配表來(lái)記錄內(nèi)存中物理塊的分配情況。最簡(jiǎn)單的辦法是用一張位示圖(Bitmap)來(lái)構(gòu)成內(nèi)存分配表。4.4.2 分頁(yè)存儲(chǔ)管理的地址轉(zhuǎn)換與存儲(chǔ)保護(hù)1. 基本地址轉(zhuǎn)換在分頁(yè)存儲(chǔ)管理系統(tǒng)中,系統(tǒng)為每個(gè)程序建立了一張頁(yè)表。當(dāng)程序被裝入內(nèi)存但尚未運(yùn)行時(shí),頁(yè)表起始地址和頁(yè)表長(zhǎng)度等信息被保存到為該程

39、序(進(jìn)程)創(chuàng)建的PCB中;一旦調(diào)度程序調(diào)度該進(jìn)程運(yùn)行時(shí),其PCB中保存的頁(yè)表始址和頁(yè)表長(zhǎng)度信息便被裝入頁(yè)表控制寄存器中。4.4 分頁(yè)存儲(chǔ)管理分頁(yè)存儲(chǔ)管理的地址轉(zhuǎn)換與存儲(chǔ)保護(hù)地址轉(zhuǎn)換機(jī)構(gòu)按照下列步驟完成邏輯地址到物理地址的轉(zhuǎn)換工作:(1)地址轉(zhuǎn)換機(jī)構(gòu)自動(dòng)將一維邏輯地址劃分為頁(yè)號(hào)和頁(yè)內(nèi)地址。(2)將得到的頁(yè)號(hào)與頁(yè)表控制寄存器中存放的頁(yè)表長(zhǎng)度進(jìn)行比較,如果頁(yè)號(hào)大于頁(yè)表長(zhǎng)度,系統(tǒng)就產(chǎn)生地址越界中斷,表示要訪(fǎng)問(wèn)的地址已經(jīng)超過(guò)了該進(jìn)程的地址空間;否則就根據(jù)頁(yè)表控制寄存器中的頁(yè)表始址找到頁(yè)表在內(nèi)存中存放的首地址。(3)由頁(yè)表的首地址(指向0號(hào)頁(yè))加上頁(yè)號(hào)(頁(yè)表項(xiàng)的相對(duì)位移)找到相應(yīng)頁(yè)號(hào)所在的表項(xiàng)位置,從而得

40、到該頁(yè)映射(裝入)到內(nèi)存中的物理塊號(hào)。最后,將這個(gè)物理塊號(hào)與頁(yè)內(nèi)地址拼接在一起(不是相加),即在邏輯地址中用物理塊號(hào)取代頁(yè)號(hào)就形成了要訪(fǎng)問(wèn)的物理地址。 實(shí)際要訪(fǎng)問(wèn)的物理地址與物理塊號(hào)和頁(yè)內(nèi)地址的關(guān)系是: 物理地址物理塊號(hào)頁(yè)長(zhǎng)頁(yè)內(nèi)地址分頁(yè)存儲(chǔ)管理的地址轉(zhuǎn)換與存儲(chǔ)保護(hù)例:在一采用分頁(yè)存儲(chǔ)管理的系統(tǒng)中,一程序有4個(gè)頁(yè)并被分別裝入到內(nèi)存的第3、4、6、8號(hào)物理塊中,已知頁(yè)和物理塊的大小均為1024B,該程序在CPU上運(yùn)行并執(zhí)行到如下的一條傳送指令: MOV AX,2100 請(qǐng)用地址轉(zhuǎn)換圖計(jì)算MOV指令中操作數(shù)2100的物理地址?!窘獯稹?本題的頁(yè)的大小為1024B,可知頁(yè)內(nèi)地址為09位,即邏輯地址21

41、00的頁(yè)號(hào)2100/10242(取整后),頁(yè)內(nèi)地址21002102452。邏輯地址2100的地址轉(zhuǎn)換過(guò)程如圖4-23所示。根據(jù)圖4-23,可以得到頁(yè)號(hào)2對(duì)應(yīng)的物理塊號(hào)為6,即物理地址61024526196。分頁(yè)存儲(chǔ)管理的地址轉(zhuǎn)換與存儲(chǔ)保護(hù)2. 具有快表的地址轉(zhuǎn)換為了提高地址轉(zhuǎn)換的速度,可以將頁(yè)表存放在一組專(zhuān)門(mén)的寄存器中,即一個(gè)頁(yè)表項(xiàng)專(zhuān)用一個(gè)寄存器存放。另一種是在地址轉(zhuǎn)換機(jī)構(gòu)中增加一個(gè)具備并行查找能力的高速緩沖寄存器,又稱(chēng)為聯(lián)想存儲(chǔ)器(Associative Memory)來(lái)構(gòu)成一張快表,快表中保存著當(dāng)前運(yùn)行進(jìn)程最常用的頁(yè)號(hào)和其對(duì)應(yīng)的物理塊號(hào)。具有快表時(shí)其地址轉(zhuǎn)換過(guò)程如下:當(dāng)CPU給出需要訪(fǎng)問(wèn)的

42、邏輯地址后,地址轉(zhuǎn)換機(jī)構(gòu)根據(jù)所得到的頁(yè)號(hào)在快表中查找其所對(duì)應(yīng)的物理塊號(hào);若要訪(fǎng)問(wèn)的頁(yè)號(hào)其頁(yè)表項(xiàng)已在快表中,則可直接從快表中獲得該頁(yè)所對(duì)應(yīng)的物理塊號(hào)并完成物理地址的轉(zhuǎn)換;若在快表中沒(méi)有找到與頁(yè)號(hào)對(duì)應(yīng)的頁(yè)表項(xiàng),則仍然通過(guò)內(nèi)存中的頁(yè)表進(jìn)行查找,并從頁(yè)號(hào)所對(duì)應(yīng)的頁(yè)表項(xiàng)中獲得相應(yīng)的物理塊號(hào)來(lái)完成物理地址的轉(zhuǎn)換,同時(shí)將所獲得的頁(yè)表項(xiàng)存入快表。 分頁(yè)存儲(chǔ)管理的地址轉(zhuǎn)換與存儲(chǔ)保護(hù)具有快表的地址轉(zhuǎn)換示意圖: 分頁(yè)存儲(chǔ)管理的地址轉(zhuǎn)換與存儲(chǔ)保護(hù)3. 頁(yè)的共享和保護(hù)(1)頁(yè)的共享數(shù)據(jù)共享:允許不同的程序?qū)蚕淼臄?shù)據(jù)頁(yè)使用不同的頁(yè)號(hào),只要讓各自頁(yè)表中有關(guān)表項(xiàng)指向共享信息的物理塊即可;程序共享:必須把共享的程序安排到所有

43、共享它的程序地址空間具有相同頁(yè)號(hào)的頁(yè)中,否則地址轉(zhuǎn)換將出現(xiàn)問(wèn)題。(2)頁(yè)的保護(hù)邏輯地址轉(zhuǎn)換成物理地址時(shí)的保護(hù):通過(guò)頁(yè)號(hào)與頁(yè)表長(zhǎng)度的比較防止地址越界;對(duì)共享信息的保護(hù):通常是在頁(yè)表中增加一些標(biāo)志位來(lái)設(shè)置存取控制字段,一般設(shè)置只讀、讀寫(xiě)、讀和執(zhí)行等權(quán)限;如果某進(jìn)程試圖去執(zhí)行一個(gè)只允許讀的內(nèi)存物理塊,系統(tǒng)就會(huì)發(fā)出訪(fǎng)問(wèn)性中斷。 4.4.3 兩級(jí)頁(yè)表和多級(jí)頁(yè)表 現(xiàn)代計(jì)算機(jī)已普遍使用32位或64位邏輯地址,可以支持232B264B容量的邏輯地址空間。這樣,采用分頁(yè)存儲(chǔ)管理時(shí)頁(yè)表會(huì)相當(dāng)大,在內(nèi)存中找到一個(gè)連續(xù)空間來(lái)存放頁(yè)表就不容易了。例如,對(duì)232B的邏輯地址空間來(lái)說(shuō),如果頁(yè)的大小為4KB(212B)則頁(yè)表

44、項(xiàng)達(dá)1M個(gè),如果每個(gè)頁(yè)表項(xiàng)僅占用1B,則每個(gè)進(jìn)程的頁(yè)表要占用1MB的連續(xù)內(nèi)存空間,這顯然是不現(xiàn)實(shí)的。為了減少頁(yè)表所占用的連續(xù)內(nèi)存空間,一個(gè)簡(jiǎn)單的解決方法是使用兩級(jí)或多級(jí)分頁(yè)方法,即將頁(yè)表再進(jìn)行分頁(yè)。4.4 分頁(yè)存儲(chǔ)管理 兩級(jí)頁(yè)表和多級(jí)頁(yè)表1. 兩級(jí)頁(yè)表為了將一個(gè)大頁(yè)表存放在內(nèi)存中,可以考慮先對(duì)頁(yè)表進(jìn)行分頁(yè),然后把頁(yè)表分頁(yè)后形成的各個(gè)頁(yè)(稱(chēng)為頁(yè)表分頁(yè))分別存儲(chǔ)在內(nèi)存中不一定相鄰的物理塊中。由于各個(gè)頁(yè)表分頁(yè)以離散方式存放,為了將它們組織起來(lái),可以以頁(yè)表分頁(yè)為單位建立更高一級(jí)索引,該索引稱(chēng)為外層頁(yè)表。每個(gè)頁(yè)表分頁(yè)在外層頁(yè)表中有一個(gè)外層頁(yè)表項(xiàng),它記錄了對(duì)應(yīng)頁(yè)表分頁(yè)在內(nèi)存中所存放的物理塊號(hào)。引入外層頁(yè)表

45、后,分頁(yè)存儲(chǔ)管理就建立在兩級(jí)頁(yè)表的基礎(chǔ)上,這時(shí)進(jìn)程的邏輯地址可以通過(guò)外層頁(yè)號(hào)、內(nèi)層頁(yè)號(hào)、頁(yè)內(nèi)地址來(lái)描述。 兩級(jí)頁(yè)表和多級(jí)頁(yè)表兩級(jí)頁(yè)表及其關(guān)系: 兩級(jí)頁(yè)表和多級(jí)頁(yè)表具有兩級(jí)頁(yè)表的地址轉(zhuǎn)換過(guò)程地址轉(zhuǎn)換機(jī)構(gòu)首先從外層頁(yè)表控制寄存器中取出外層頁(yè)表在內(nèi)存中的起始地址,以進(jìn)程邏輯地址中的外層頁(yè)號(hào)檢索外層頁(yè)表,找到指定內(nèi)層頁(yè)表(頁(yè)表分頁(yè))在內(nèi)存中的起始地址;然后在內(nèi)層頁(yè)表中按內(nèi)層頁(yè)號(hào)找到指定的頁(yè)表項(xiàng),而該頁(yè)表項(xiàng)則給出了要訪(fǎng)問(wèn)頁(yè)在內(nèi)存中的物理塊號(hào);最后,將該物理塊號(hào)與邏輯地址中的頁(yè)內(nèi)地址進(jìn)行拼接就形成了真正要訪(fǎng)問(wèn)的內(nèi)存物理地址。 兩級(jí)頁(yè)表和多級(jí)頁(yè)表2. 多級(jí)頁(yè)表 采用多級(jí)頁(yè)表的原理是對(duì)外層頁(yè)表再進(jìn)行分頁(yè),將外

46、層頁(yè)表的不同分頁(yè)以離散分配方式裝入到內(nèi)存不同位置的物理塊中,再利用第2級(jí)的外層頁(yè)表來(lái)映射它們之間的對(duì)應(yīng)關(guān)系,這樣逐級(jí)進(jìn)行分頁(yè),直至到最終映射到物理塊為止。3.倒置頁(yè)表 一般頁(yè)表的表項(xiàng)是按頁(yè)號(hào)進(jìn)行排序,頁(yè)表項(xiàng)中的內(nèi)容是物理塊號(hào),而倒置頁(yè)表則是為每一個(gè)物理塊設(shè)置一個(gè)頁(yè)表項(xiàng),并按物理塊號(hào)排序,頁(yè)表項(xiàng)的內(nèi)容是頁(yè)號(hào)及其隸屬進(jìn)程的標(biāo)識(shí)符。在利用倒置頁(yè)表進(jìn)行地址轉(zhuǎn)換時(shí),則根據(jù)進(jìn)程標(biāo)識(shí)符和頁(yè)號(hào)去檢索倒置頁(yè)表,4.4.4 內(nèi)存物理塊的分配與回收 為了實(shí)現(xiàn)內(nèi)存物理塊的分配與回收,系統(tǒng)設(shè)置了一張請(qǐng)求表和一張內(nèi)存分配表。 請(qǐng)求表:用來(lái)確定作業(yè)或進(jìn)程的各頁(yè)在內(nèi)存中的實(shí)際對(duì)應(yīng)位置,它包括以下信息:進(jìn)程號(hào)、請(qǐng)求頁(yè)數(shù)、頁(yè)表始

47、址、頁(yè)表長(zhǎng)度、狀態(tài)(已分配、未分配)等。 內(nèi)存分配表:用來(lái)記錄內(nèi)存空間中物理塊的分配情況和空閑物理塊的總數(shù),并可以通過(guò)前面介紹的位示圖或空閑鏈等方法來(lái)實(shí)現(xiàn)。系統(tǒng)為進(jìn)程分配內(nèi)存空間步驟:(1)查找請(qǐng)求表,根據(jù)請(qǐng)求表中該進(jìn)程的頁(yè)數(shù)查找內(nèi)存分配表,是否有足夠的空閑物理塊;(2)有則先為該進(jìn)程建立一個(gè)頁(yè)表,同時(shí)在請(qǐng)求表中填寫(xiě)頁(yè)表始址、頁(yè)表長(zhǎng)度、以及狀態(tài)等相關(guān)信息;(3)根據(jù)具體的查找算法找出用于分配的空閑物理塊并把它們分配給該進(jìn)程,同時(shí)將該進(jìn)程各個(gè)頁(yè)與物理塊的對(duì)應(yīng)關(guān)系填入該進(jìn)程的頁(yè)表中;否則,此次內(nèi)存空間分配失敗。4.4 分頁(yè)存儲(chǔ)管理 內(nèi)存物理塊的分配與回收 系統(tǒng)在回收某個(gè)物理塊時(shí)只需訪(fǎng)問(wèn)頁(yè)表,并將回

48、收頁(yè)對(duì)應(yīng)的物理塊號(hào)從頁(yè)表中刪除并更新內(nèi)存分配表即可。 分頁(yè)存儲(chǔ)管理總結(jié):(1)優(yōu)點(diǎn):分頁(yè)存儲(chǔ)管理并不要求各個(gè)頁(yè)之間連續(xù)存儲(chǔ),實(shí)現(xiàn)了離散存儲(chǔ)并可以避免外部碎片,為以后實(shí)現(xiàn)程序的“部分裝入、部分對(duì)換”奠定了基礎(chǔ)。(2)缺點(diǎn): 當(dāng)內(nèi)存和程序都很大時(shí),通過(guò)位示圖和頁(yè)表來(lái)記錄內(nèi)存使用情況和每個(gè)程序內(nèi)存分配情況會(huì)使位示圖和頁(yè)表占用較大的存儲(chǔ)空間; 分頁(yè)存儲(chǔ)管理方法要求有相應(yīng)的硬件支持,如需要地址轉(zhuǎn)換機(jī)構(gòu)和快表等,增加了計(jì)算機(jī)的成本和系統(tǒng)的開(kāi)銷(xiāo); 分頁(yè)存儲(chǔ)管理雖然消除了外部碎片,但頁(yè)內(nèi)的內(nèi)部碎片依然存在; 分頁(yè)破壞了程序的完整性,這給程序的共享、動(dòng)態(tài)鏈接等技術(shù)的實(shí)現(xiàn)帶來(lái)了困難。4.5.1 分段存儲(chǔ)管理的基本

49、原理 程序大多采用分段結(jié)構(gòu),一個(gè)程序可以由主程序段、子程序段和數(shù)據(jù)段等組成,每個(gè)段都從邏輯地址0開(kāi)始編制,有各自的名字和長(zhǎng)度并實(shí)現(xiàn)不同的功能,整個(gè)程序的所有段則構(gòu)成了二維地址空間。 分段存儲(chǔ)管理方式-以段為單位為程序離散分配內(nèi)存空間,4.5 分段存儲(chǔ)管理 分段存儲(chǔ)管理的基本原理1. 實(shí)現(xiàn)原理 在為程序分配內(nèi)存時(shí),允許以段為單位將程序離散地裝入不相鄰的內(nèi)存空間中,每一個(gè)段本身則要在內(nèi)存占用一段連續(xù)的區(qū)域,系統(tǒng)通過(guò)地址轉(zhuǎn)換機(jī)構(gòu)將段的邏輯地址轉(zhuǎn)換為實(shí)際的內(nèi)存物理地址,使程序能夠順利執(zhí)行。2. 邏輯地址結(jié)構(gòu) 如下圖所示的地址結(jié)構(gòu)中,一個(gè)程序最多允許256(28)個(gè)段,每個(gè)段的長(zhǎng)度為16MB(224)。

50、 分段存儲(chǔ)管理的基本原理3. 段表 在分段存儲(chǔ)管理中,程序的各段以離散分配方式裝入到內(nèi)存中各不相鄰的空閑分區(qū),而每個(gè)段在該分區(qū)中是連續(xù)的。 系統(tǒng)為每個(gè)程序建立了一張段表,以實(shí)現(xiàn)將二維邏輯地址轉(zhuǎn)換為一維物理地址。程序的每個(gè)段在段表中占有一個(gè)表項(xiàng),該表項(xiàng)記錄了該段的段號(hào)(段名)、該段在內(nèi)存中的起始地址以及該段的長(zhǎng)度等信息。4.5.2 分段存儲(chǔ)管理的地址轉(zhuǎn)換與存儲(chǔ)保護(hù)1. 地址轉(zhuǎn)換先通過(guò)段表控制寄存器中存放的段表始址找到段表,然后再?gòu)亩伪碇姓业綄?duì)應(yīng)的表項(xiàng)來(lái)完成邏輯段與內(nèi)存物理分區(qū)的映射。4.5 分段存儲(chǔ)管理 地址轉(zhuǎn)換與存儲(chǔ)保護(hù)例:在一個(gè)分段存儲(chǔ)管理系統(tǒng)中,其段表如下左表所示,試求右表中邏輯地址所對(duì)應(yīng)

51、的物理地址。段號(hào)段長(zhǎng)內(nèi)存起始地址05002101202350290100359013504951938段號(hào)段內(nèi)地址0430110250034004112532【解答】 (1)640(2)2360(3)產(chǎn)生越界中斷(4)1750(5)產(chǎn)生越界中斷(6)產(chǎn)生越界中斷 地址轉(zhuǎn)換與存儲(chǔ)保護(hù)2. 分段共享(1)數(shù)據(jù)結(jié)構(gòu) 在系統(tǒng)中需要設(shè)置共享段表,每個(gè)共享段在表中占據(jù)一個(gè)表項(xiàng),它記錄了為實(shí)現(xiàn)該段共享所需的全部信息,包括共享段的段名、段長(zhǎng)、狀態(tài)、內(nèi)存始址等共享段自身的信息,以及進(jìn)程名、段號(hào)等共享此段的所有進(jìn)程的相關(guān)信息。 地址轉(zhuǎn)換與存儲(chǔ)保護(hù)(2)共享段的分配與回收分配:當(dāng)一個(gè)進(jìn)程請(qǐng)求使用某共享段時(shí),若該共享

52、段尚未調(diào)入內(nèi)存則為它分配相應(yīng)的內(nèi)存空間,并將內(nèi)存始址填入請(qǐng)求進(jìn)程的段表中,同時(shí)在共享段表的有關(guān)表項(xiàng)中填入該共享段的相關(guān)信息和調(diào)用進(jìn)程的相關(guān)信息,并將count置1?;厥眨簝H當(dāng)所有共享段的進(jìn)程都使用完之后才能進(jìn)行共享段的內(nèi)存空間回收,并撤銷(xiāo)該共享段在共享段表中的相應(yīng)表項(xiàng)。 地址轉(zhuǎn)換與存儲(chǔ)保護(hù)3. 分段保護(hù) 在分段存儲(chǔ)管理系統(tǒng)中,實(shí)現(xiàn)分段保護(hù)常用以下兩種方法。 (1)段越界檢查。由分段存儲(chǔ)管理的地址轉(zhuǎn)換過(guò)程可知,在邏輯地址到物理地址的轉(zhuǎn)換過(guò)程中要進(jìn)行兩次地址越界檢查:第一次是通過(guò)段號(hào)和段表長(zhǎng)度進(jìn)行比較;第二次是通過(guò)段內(nèi)地址與段長(zhǎng)進(jìn)行比較。只有這兩次地址越界檢查都通過(guò)后,才實(shí)施地址轉(zhuǎn)換操作否則發(fā)出地

53、址越界中斷,這就保證了每個(gè)進(jìn)程只能在屬于自己的各內(nèi)存區(qū)間內(nèi)進(jìn)行操作或執(zhí)行。 (2)存取控制檢查。可以通過(guò)在每個(gè)進(jìn)程的段表中增設(shè)存取控制字段,來(lái)限制進(jìn)程對(duì)各段操作的權(quán)限。一般情況下,進(jìn)程對(duì)分段的操作方式有三種:只允許讀、只允許執(zhí)行和允許讀和寫(xiě)。在共享段表中就是通過(guò)設(shè)置這個(gè)存取控制字段,賦予各進(jìn)程對(duì)共享段不同的操作權(quán)限。 4.5.3 分段存儲(chǔ)管理的優(yōu)缺點(diǎn) 1分段與分頁(yè)比較 分段與分頁(yè)對(duì)程序的內(nèi)存空間都采用離散分配方式;其次,為了實(shí)現(xiàn)各自的管理它們都設(shè)置了相似的數(shù)據(jù)結(jié)構(gòu);最后,在地址轉(zhuǎn)換時(shí)都要通過(guò)地址轉(zhuǎn)換機(jī)構(gòu),即分別利用段表或頁(yè)表來(lái)實(shí)現(xiàn)地址的轉(zhuǎn)換。在指令執(zhí)行中,對(duì)數(shù)據(jù)進(jìn)行操作都需要多次訪(fǎng)問(wèn)內(nèi)存,且都

54、可以通過(guò)設(shè)置聯(lián)想存儲(chǔ)器來(lái)提高地址轉(zhuǎn)換的速度。 差異:分段是信息的邏輯單位,且分段由源程序的邏輯結(jié)構(gòu)所決定,分段是用戶(hù)的需要且用戶(hù)可見(jiàn),段長(zhǎng)可以根據(jù)用戶(hù)需要來(lái)確定,段的起始地址可以從任何內(nèi)存地址開(kāi)始。在分段方式中,源程序中的邏輯地址(段號(hào)、段內(nèi)地址)經(jīng)連接裝配后仍然保持二維結(jié)構(gòu)。而分頁(yè)是信息的物理單位,分頁(yè)是系統(tǒng)管理內(nèi)存的需要而不是用戶(hù)的需要,即分頁(yè)與源程序的邏輯結(jié)構(gòu)無(wú)關(guān),且用戶(hù)也不可見(jiàn)。頁(yè)長(zhǎng)由系統(tǒng)決定,每一頁(yè)只能從頁(yè)大小的整數(shù)倍地址開(kāi)始,源程序中的邏輯地址(頁(yè)號(hào)、頁(yè)內(nèi)地址)經(jīng)連接裝配后其地址已變成了一維結(jié)構(gòu)。 4.5 分段存儲(chǔ)管理分段存儲(chǔ)管理的優(yōu)缺點(diǎn)優(yōu)點(diǎn):(1)信息共享;(2)動(dòng)態(tài)增長(zhǎng);(3)

55、動(dòng)態(tài)鏈接;(4)便于實(shí)現(xiàn)存取訪(fǎng)問(wèn)控制。缺點(diǎn):(1)分段存儲(chǔ)管理需要更多的硬件支持,增加了計(jì)算機(jī)的成本。(2)分段存儲(chǔ)管理在內(nèi)存空閑區(qū)的管理方式上與分區(qū)存儲(chǔ)管理 相同,存在著碎片(外部碎片)問(wèn)題。(3)缺段中斷處理以及允許段的動(dòng)態(tài)增長(zhǎng)會(huì)給系統(tǒng)增加難度和 開(kāi)銷(xiāo)。4.5 分段存儲(chǔ)管理4.6.1 段頁(yè)式存儲(chǔ)管理的基本原理 結(jié)合了分段存儲(chǔ)管理和分頁(yè)存儲(chǔ)管理的優(yōu)點(diǎn),在為程序分配內(nèi)存空間時(shí),采用的是“各段之間按分段存儲(chǔ)管理進(jìn)行,每個(gè)段的內(nèi)部則按分頁(yè)存儲(chǔ)管理進(jìn)行”。 首先根據(jù)程序自身的邏輯結(jié)構(gòu),運(yùn)用分段存儲(chǔ)管理的思想把程序的邏輯地址空間劃分為若干個(gè)段,每個(gè)段有各自的段名或段號(hào);然后,再運(yùn)用分頁(yè)存儲(chǔ)管理的思想,

56、在每個(gè)段內(nèi)按固定大小將該段劃分為不同的頁(yè),每個(gè)段內(nèi)的所有頁(yè)從0開(kāi)始依次編號(hào)。內(nèi)存空間也劃分成與頁(yè)大小相等的物理塊,并對(duì)內(nèi)存中所有物理塊從0開(kāi)始依次編號(hào)。在為程序分配內(nèi)存空間時(shí),允許以頁(yè)為單位一次性將一個(gè)程序中每個(gè)段的所有頁(yè)裝入內(nèi)存中若干不相鄰的物理塊中。4.6 段頁(yè)式存儲(chǔ)管理 段頁(yè)式存儲(chǔ)管理的基本原理1. 邏輯地址結(jié)構(gòu) 假定邏輯地址長(zhǎng)度為32位,若段號(hào)占8位,段內(nèi)頁(yè)號(hào)占12位,頁(yè)內(nèi)地址占12位,則一個(gè)程序最多允許有256(28)個(gè)段,每段最多允許4096(212)個(gè)頁(yè),每頁(yè)的大小為4KB(212)。2. 數(shù)據(jù)結(jié)構(gòu)(1)段表。系統(tǒng)為每個(gè)程序建立一張段表,程序的每個(gè)段在段表中有一個(gè)段表項(xiàng)。(2)頁(yè)

57、表。系統(tǒng)為程序中的每一個(gè)段都建立一張頁(yè)表,一個(gè)段中的每個(gè)頁(yè)在該段的頁(yè)表中都有一個(gè)頁(yè)表項(xiàng)。4.6.2 段頁(yè)式存儲(chǔ)管理的地址轉(zhuǎn)換與特點(diǎn)1. 地址轉(zhuǎn)換 地址轉(zhuǎn)換機(jī)構(gòu)首先將邏輯地址中的段號(hào)與段表控制寄存器中的段長(zhǎng)(程序中允許的最大段號(hào))比較,若段號(hào)大于段長(zhǎng)則產(chǎn)生越界中斷;否則未越界,這時(shí)利用段表寄存器中的段表始址和段號(hào)(段表項(xiàng)的相對(duì)位移)求出該段所對(duì)應(yīng)的段表項(xiàng)在段表中的位置,找到該段表項(xiàng)后從中獲得該段的頁(yè)表在內(nèi)存中存放的起始地址(頁(yè)表始址)和頁(yè)表長(zhǎng)度。若邏輯地址中的段內(nèi)頁(yè)號(hào)(頁(yè)號(hào))大于該段表項(xiàng)中的頁(yè)表長(zhǎng)度(該段所允許的最大頁(yè)號(hào)),則產(chǎn)生頁(yè)越界中斷;否則,在該頁(yè)表中由頁(yè)表始址和邏輯地址中的段內(nèi)頁(yè)號(hào)(頁(yè)表

58、項(xiàng)的相對(duì)位移)獲得該頁(yè)的頁(yè)表項(xiàng)位置,并從該頁(yè)表項(xiàng)中獲得該頁(yè)所存放的內(nèi)存物理塊號(hào),最后將物理塊號(hào)和頁(yè)內(nèi)地址拼接(由物理塊號(hào)替換邏輯地址中的段內(nèi)頁(yè)號(hào))形成要訪(fǎng)問(wèn)的物理地址。4.6 段頁(yè)式存儲(chǔ)管理 段頁(yè)式存儲(chǔ)管理的地址轉(zhuǎn)換與特點(diǎn)段頁(yè)式存儲(chǔ)管理的地址轉(zhuǎn)換過(guò)程 段頁(yè)式存儲(chǔ)管理的地址轉(zhuǎn)換與特點(diǎn)例:下圖給出了一種段頁(yè)式管理配置方案,一頁(yè)的大小為1KB,根據(jù)地址轉(zhuǎn)換過(guò)程,求出邏輯地址所對(duì)應(yīng)的物理地址。141024+237=14573 段頁(yè)式存儲(chǔ)管理的地址轉(zhuǎn)換與特點(diǎn)2. 段頁(yè)式存儲(chǔ)管理的優(yōu)缺點(diǎn)優(yōu)點(diǎn):(1)因?yàn)橐皂?yè)為單位分配內(nèi)存所以無(wú)緊湊問(wèn)題,也不存在外部碎片。(2)便于處理變化的數(shù)據(jù)結(jié)構(gòu),段可以動(dòng)態(tài)增長(zhǎng)。(3)

59、便于共享,只需將程序的段表中相應(yīng)表項(xiàng)指向該共享段在內(nèi)存中的頁(yè)表始址即可。(4)因具有段的特點(diǎn),所以便于提供動(dòng)態(tài)鏈接。(5)因具有段的特點(diǎn),所以便于控制存取訪(fǎng)問(wèn)。缺點(diǎn):(1)增加了硬件成本,需要更多的硬件支持。(2)增加了系統(tǒng)開(kāi)銷(xiāo)和軟件復(fù)雜性,如地址重定位過(guò)程需多次訪(fǎng)問(wèn)內(nèi)存。(3)空間浪費(fèi)比分頁(yè)管理多,程序各段的最后一頁(yè)都有可能浪費(fèi)一部分空間(仍然存在內(nèi)部碎片),另外段表和頁(yè)表所占的空間都比分頁(yè)管理和分段管理多。4.7.1 虛擬存儲(chǔ)器的概念一次性:指進(jìn)程在執(zhí)行前必須將它所有的程序和數(shù)據(jù)全部裝入內(nèi)存。駐留性:指程序和數(shù)據(jù)一旦裝入內(nèi)存后就一直在內(nèi)存中存放,直到進(jìn)程運(yùn)行結(jié)束。時(shí)間局部性:如果程序中某條

60、指令一旦執(zhí)行,則不久的將來(lái)該指令可能會(huì)再次執(zhí)行;如果某個(gè)存儲(chǔ)單元被訪(fǎng)問(wèn),則不久以后該存儲(chǔ)單元可能再次被訪(fǎng)問(wèn)。產(chǎn)生時(shí)間局部性的典型原因是在程序中存在著大量的循環(huán)操作。空間局部性:一旦程序訪(fǎng)問(wèn)了某個(gè)存儲(chǔ)單元,則在不久的將來(lái),與該存儲(chǔ)單元鄰近的那些存儲(chǔ)單元也最有可能被訪(fǎng)問(wèn);即程序在一段時(shí)間內(nèi)所訪(fǎng)問(wèn)的地址可能集中在一定的范圍內(nèi)。虛擬存儲(chǔ)器:具有自動(dòng)實(shí)現(xiàn)部分裝入和部分對(duì)換的功能,僅將進(jìn)程的一部分裝入內(nèi)存即可運(yùn)行;從邏輯上講,是對(duì)內(nèi)存容量進(jìn)行擴(kuò)充的一種虛擬的存儲(chǔ)器系統(tǒng)。虛擬存儲(chǔ)器的邏輯容量由內(nèi)存和外存容量之和決定,其運(yùn)行速度接近于內(nèi)存速度,而存儲(chǔ)信息的成本接近于外存。4.7 虛擬存儲(chǔ)管理 虛擬存儲(chǔ)器的概念

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論