版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第七章 實(shí)存管理技術(shù),存儲器是計算機(jī)最重要的資源之一,內(nèi)存管理一直是操作系統(tǒng)最主要的功能之一。內(nèi)存容量一直是計算機(jī)硬件資源中最緊張的資源,特別在多道程序設(shè)計技術(shù)條件下,一方面要充分利用內(nèi)存容量,另一方面必須保證多個程序在內(nèi)存中互不干擾即保證內(nèi)存安全。存儲器管理技術(shù)分實(shí)存管理和虛存管理。,,,基本的存儲管理方法是分區(qū)法、覆蓋技術(shù)、交換技術(shù) 、分頁法、分段法、段頁法。,第七章 實(shí)存管理技術(shù),7.1 存儲管理的基本概念7.2 連
2、續(xù)分配存儲管理方式7.3 離散分配存儲管理方式7.4 交換技術(shù)7.5 覆蓋技術(shù),7.1 存儲管理的基本概念,7.1.1 存儲管理要解決的問題7.1.2 存儲管理的分類7.1.3 地址映射(重定位),,7.1.1 存儲管理要解決的問題,早期計算機(jī)系統(tǒng)中,內(nèi)存是最緊張的資源之一。為了在小內(nèi)存中運(yùn)行大程序,人們先發(fā)明了覆蓋技術(shù)。當(dāng)發(fā)明虛存管理技術(shù)后,才真正解決了在小內(nèi)存中運(yùn)行大程序的問題。為了有效管理計算機(jī)內(nèi)存資源
3、,操作系統(tǒng)的存儲管理要具備以下功能:1. 內(nèi)存空間分配與回收根據(jù)某種分配方式,遵循某種分配算法,為進(jìn)程分配內(nèi)存,當(dāng)進(jìn)程結(jié)束時再回收內(nèi)存。,,,2. 地址映射設(shè)計地址變換機(jī)構(gòu),靜態(tài)和動態(tài)地址變換的方法。3. 內(nèi)存保護(hù)怎樣讓內(nèi)存中各個進(jìn)程互不干擾,怎樣保證內(nèi)存中程序、數(shù)據(jù)的安全。4. 內(nèi)存擴(kuò)充怎樣從邏輯上擴(kuò)充內(nèi)存。這屬于虛存管理的范疇。,7.1.2 存儲管理的分類,從分配方式上按進(jìn)程在內(nèi)存中是否連續(xù),可以把存儲管理分成連續(xù)分
4、配方式和離散分配方式兩類。1. 連續(xù)分配方式必須為進(jìn)程在內(nèi)存分配一片連續(xù)的空間。2. 離散分配方式允許將一個進(jìn)程分散地裝入內(nèi)存的多個不相鄰的區(qū)域。,,,從進(jìn)程是整體裝入還是局部裝入內(nèi)存可以把存儲管理分成實(shí)存管理和虛存管理兩類。1. 實(shí)存管理必須把進(jìn)程完整地裝入內(nèi)存。2. 虛存管理允許將一個進(jìn)程局部地裝入內(nèi)存。,7.1.3 地址映射(重定位),1. 地址空間和存儲空間源程序經(jīng)過編譯或匯編產(chǎn)生目標(biāo)文件,目標(biāo)文件經(jīng)過連接和
5、裝配產(chǎn)生可以執(zhí)行的文件。在連接裝配時,語言系統(tǒng)并不知道將來這個執(zhí)行文件會放在內(nèi)存的哪個位置,為了方便地將執(zhí)行文件裝入內(nèi)存,把執(zhí)行文件中第一條指令的地址設(shè)為 0。 其他指令的地址都以它做參照。執(zhí)行文件中指令的地址稱相對地址或邏輯地址。而相對地址的集合稱相對地址空間,簡稱地址空間。,,,內(nèi)存每個字節(jié)都有一個地址,這是物理地址是真實(shí)的地址,也稱絕對地址。絕對地址空間也叫物理地址空間,簡稱存儲空間。一個程序的邏輯地址和它在內(nèi)存中的地址是不同的
6、,顯然必須先將邏輯地址變成物理地址后程序才能正確運(yùn)行。,,2. 靜態(tài)重定位 靜態(tài)重定位是由專門設(shè)計的重定位裝配程序來完成的,是在目標(biāo)程序裝入到內(nèi)存區(qū)時由裝配程序來完成地址轉(zhuǎn)換。 優(yōu)點(diǎn):無需增加地址轉(zhuǎn)換機(jī)構(gòu) 缺點(diǎn) :不能實(shí)現(xiàn)重新分配內(nèi)存 用戶必須事先確定所需的存儲量 每個用戶進(jìn)程需各自使用一個獨(dú)立的副本。,,Load #1,450,… …,… …,3500,0,100,450,… …,Load #1,2450,…
7、 …,3500,… …,… …,… …,2100,操作系統(tǒng),2000,2450,邏輯地址,物理地址,,,圖 7-2 靜態(tài)地址映射,,3. 動態(tài)重定位 動態(tài)重定位是在目標(biāo)程序執(zhí)行過程中,在CPU訪問內(nèi)存之前,由硬件地址映射機(jī)構(gòu)來完成將要訪問的指令或數(shù)據(jù)的邏輯地址向內(nèi)存的物理地址的轉(zhuǎn)換。 優(yōu)點(diǎn):內(nèi)存的使用更加靈活有效;幾個作業(yè)共享一程序段的單個副本比較容易;無需用戶干預(yù),由系統(tǒng)來負(fù)責(zé)全部的存儲管理。 缺點(diǎn) :需附加硬件支持
8、;實(shí)現(xiàn)存儲器管理的軟件比較復(fù)雜。,,Load#1,450,… …,… …,3500,0,100,450,… …,Load#1, 450,… …,3500,… …,… …,… …,2100,操作系統(tǒng),2000,2450,邏輯地址,物理地址,圖 7-3 動態(tài)地址映射,基址寄存器,2000,,+,,,,7.2 連續(xù)分配方式,7.2.1 單一連續(xù)分配方式7.2.2 固定分區(qū)內(nèi)存管理方式7.2.3 可變分區(qū)內(nèi)存管理方式,,7.2.
9、1 單一連續(xù)分配方式,在單任務(wù)的操作系統(tǒng)條件下,讓用戶占用計算機(jī)所有資源,內(nèi)存管理采用單一連續(xù)分配方式。內(nèi)存被分成兩個區(qū)1. 系統(tǒng)區(qū) 供操作系統(tǒng)使用2. 用戶區(qū)供用戶放一個程序,操作系統(tǒng)區(qū),用戶區(qū)… …,,7.2.2 固定分區(qū)內(nèi)存管理方式,分區(qū)管理是滿足多道程序設(shè)計的一種最早采用的存儲管理方法。其基本原理是給每一個進(jìn)程在內(nèi)存中劃分一塊可用的存儲區(qū),連續(xù)存儲各進(jìn)程的程序和數(shù)據(jù),使各進(jìn)程能并發(fā)進(jìn)行。,,,內(nèi)存分配算法:
10、 (1)首次適應(yīng)法 空閑分區(qū)按物理地址為升序排列,在內(nèi)存現(xiàn)有空閑分區(qū)中,找到第一個可用的分區(qū)就分配。 (2)最佳適應(yīng)法 在內(nèi)存現(xiàn)有的空閑分區(qū)中,找一個浪費(fèi)最小的分區(qū)分配。,,(3)最壞適應(yīng)法 在現(xiàn)有內(nèi)存空閑區(qū)中,找一個浪費(fèi)最大的分區(qū)分配。 (4)唯一最佳分配法 作業(yè)按長度分類排隊(duì),一個分區(qū)對應(yīng)一個隊(duì),使這個隊(duì)中每個作業(yè)的長度小于等于分區(qū)的長度,使分配后內(nèi)存浪費(fèi)最小。從整體上看,這個算法也不是最佳的。
11、,,固定分區(qū)法 固定分區(qū)法就是把內(nèi)存固定劃分為若干個不等的區(qū)域,劃分的原則由系統(tǒng)決定。在整個執(zhí)行過程中保持分區(qū)長度和分區(qū)個數(shù)不變。操作系統(tǒng)為每個用戶作業(yè)分配一個分區(qū)。,內(nèi)存管理 :,管理數(shù)據(jù)結(jié)構(gòu):設(shè)置內(nèi)存分配表內(nèi)存分配:每個區(qū)分配一個進(jìn)程內(nèi)存回收:簡單缺點(diǎn):內(nèi)存利用率不高,如何記錄系統(tǒng)的狀況呢?,,,分配策略,分區(qū)4,分區(qū)3,分區(qū)2,分區(qū)1,操作系統(tǒng),0,100K,200K,400K,700K,1300K,,,,,,,多個輸入
12、隊(duì)列,分區(qū)4,分區(qū)3,分區(qū)2,分區(qū)1,操作系統(tǒng),0,100K,200K,400K,700K,1300K,,單個輸入隊(duì)列,,,,,,,,,,(a)唯一最佳分配算法,(b)其他分配算法,,,,,,,,,,,,固定分區(qū),,操作系統(tǒng)建立一個內(nèi)存分區(qū)管理表(分區(qū)號、分區(qū)長度、分區(qū)首址和分區(qū)狀態(tài)),所有分區(qū)按物理地址升序排列,每個分區(qū)占表中一行。操作系統(tǒng)為作業(yè)分配內(nèi)存時,按(1)、(2)、(4)中某個分配算法查表,有合適的分區(qū)就分配,否則就不分配。
13、 固定分區(qū)法管理方式雖然簡單,但是存在大量內(nèi)碎片(在分區(qū)內(nèi)存在空余的空間,這就稱為內(nèi)碎片),內(nèi)存利用率不高。,,內(nèi)存分區(qū)管理表,,地址映射對于固定分區(qū),可以采用靜態(tài)地址映射也可以采用動態(tài)地址映射。內(nèi)存保護(hù)可以采用界限寄存器法,用兩個寄存器分別放用戶區(qū)的首地址和用戶的長度。用戶程序訪問內(nèi)存的地址必須在這個范圍內(nèi),否則就是地址越界。,7.2.3 可變分區(qū)內(nèi)存管理方式,可變分區(qū)法 動態(tài)分區(qū)分配是根據(jù)進(jìn)程的實(shí)際需要,動態(tài)地為
14、它分配連續(xù)的內(nèi)存空間,各個分區(qū)是在相應(yīng)進(jìn)程裝入內(nèi)存時建立的,其大小恰好等于進(jìn)程的大小。 為了實(shí)現(xiàn)內(nèi)存分配,系統(tǒng)中設(shè)置了相應(yīng)的數(shù)據(jù)結(jié)構(gòu)來記錄內(nèi)存的使用情況,常用的數(shù)據(jù)結(jié)構(gòu)形式有空閑分區(qū)鏈。,,,內(nèi)存分配數(shù)據(jù)結(jié)構(gòu),可以用空閑區(qū)鏈表,節(jié)點(diǎn)中包含空閑區(qū)的首址、長度、鏈指針。在進(jìn)程PCB中包含進(jìn)程的內(nèi)存首址、長度、訪問權(quán)限等項(xiàng)目。分配算法:首次適應(yīng)法、最佳適應(yīng)法、最壞適應(yīng)法。分配時,操作系統(tǒng)填寫PCB中進(jìn)程的內(nèi)存首址、長度、訪問權(quán)限
15、。,,內(nèi)存回收為了最大限度的利用內(nèi)存資源,就要不斷將分散的小碎片拼接成一個大的空閑區(qū),這里有個拼接的時機(jī)問題,可以在分配時拼接,也可以在回收時拼接。拼接意味著要求進(jìn)程能在內(nèi)存中移動,例如現(xiàn)在進(jìn)程的首址是 a ,將它向地址增大方向移動 b 個字節(jié),進(jìn)程的首址變成 a + b 。進(jìn)程長度不變。,,地址映射為了實(shí)現(xiàn)內(nèi)存拼接,必須用動態(tài)地址映射CPU提供基址寄存器、限長寄存器、地址運(yùn)算器。進(jìn)程切換時,操作系統(tǒng)把PCB中的內(nèi)存信息( 進(jìn)
16、程的首址、長度 )寫入基址寄存器和限長寄存器同時將進(jìn)程PCB中的現(xiàn)場信息寫入CPU的寄存器集合。,,動態(tài)重定位的實(shí)現(xiàn)過程,,內(nèi)存保護(hù)利用基址寄存器和限長寄存器,一個進(jìn)程只能訪問自己的內(nèi)存區(qū),只有操作系統(tǒng)進(jìn)程可以訪問全部的內(nèi)存區(qū)。除了地址界限保護(hù)外,為了進(jìn)程間共享數(shù)據(jù)還需要訪問權(quán)限保護(hù),進(jìn)程可以給另一個進(jìn)程賦予訪問權(quán)限,允許在訪問權(quán)限范圍內(nèi)訪問。,動態(tài)分區(qū)舉例,外碎片進(jìn)程外的內(nèi)存空間碎片化能用壓縮方法解決OS 移動進(jìn)程使進(jìn)程和進(jìn)
17、程相連。消耗CPU時間,P1 (20M),P2(14M),P3(18M),Empty (56M),Empty (4M),P4(8M),Empty (6M),P2(14M),Empty (6M),Refer to Figure 7.4,,例:現(xiàn)在有三個作業(yè)A(20KB),B(80KB),C(50KB),內(nèi)存有兩個空閑區(qū)F1(110KB),F(xiàn)2(60KB)。 首次適應(yīng)法(設(shè)F1的首址 < F2的首址 ) A(占2
18、0KB) B(占80KB) C(占50KB),,F1( 100KB, 10KB ),,F2( 50KB, 10KB ),,首次適應(yīng)法(設(shè)F1的首址 > F2的首址 ) A(20KB) B(80KB) 最壞適應(yīng)法 A(20KB) B(80KB) C(50KB),,,F2(20KB,40KB),F1(80KB,30KB),,,F1( 100KB, 10KB ),F2( 50KB, 10K
19、B ),,最佳適應(yīng)法 A(20KB) B(80KB) 可變分區(qū)分配采用最佳適應(yīng)算法,結(jié)果不一定是最佳的;采用最壞程序算法,結(jié)果不一定是最差的。,F2( 20KB, 40KB ),F1( 80KB, 30KB ),,,伙伴系統(tǒng),全部可用空間被分成一個長度是2U的塊如請求分配長度s符合2U-1 < s <= 2U全部空間分配給它否則塊被分成兩個相等的伙伴。這個過程一直持續(xù)直到找到符合長度<= s
20、的伙伴,伙伴系統(tǒng)舉例,伙伴系統(tǒng)樹型表示,7.3 離散分配存儲管理方式,固定分區(qū)和可變分區(qū)都是連續(xù)分配內(nèi)存的技術(shù),把一個進(jìn)程裝入一個分區(qū),使用這種方法會造成許多碎片,降低了內(nèi)存的利用率。產(chǎn)生碎片的根本原因就是要求把一個進(jìn)程連續(xù)地放在一個內(nèi)存區(qū)。雖然可變分區(qū)技術(shù)使用內(nèi)存拼接技術(shù)把分散的空閑分區(qū)集中成較大的分區(qū),但要增加系統(tǒng)的開銷。人們考慮能否化整為零提高內(nèi)存的利用率。,,,,7.3.1 分頁式存儲管理方式7.3.2 分段式存儲管理方
21、式7.3.3 段頁式存儲管理方式,7.3.1 分頁式存儲管理方式,可變分區(qū)方式除了產(chǎn)生大量的外碎片,還有一個缺點(diǎn),就是進(jìn)程動態(tài)增長不方便。分頁管理是解決碎片問題的一種有效辦法,它允許進(jìn)程在內(nèi)存空間里是不連續(xù)的;還便于進(jìn)程動態(tài)增長。 分頁管理技術(shù)原理(1)操作系統(tǒng)按一個2的整數(shù)次冪為長度,把內(nèi)存用戶區(qū)分成若干存儲區(qū),稱為塊,每個塊的容量都是相同的,每個塊按物理地址值由小到大順序從 0 開始編號,稱為塊號。,,,,000000 0
22、00,000000 001,000000 010,000000 …,000000 111,,000001 000,000001 001,000001 …,000001 111,,… … …,111111 000,111111 001,111111 010,111111 …,111111 111,,,,,塊 號 塊內(nèi)地址,# 0,# 1,# 63,假設(shè)每塊的容量是23個字節(jié)物理地址被分成兩部分,高位部分稱為塊號,低
23、位部分稱為塊內(nèi)地址。假設(shè)內(nèi)存共有64個塊,每塊有 8 個字節(jié)。塊號是從物理地址中截出來,是物理地址固有的。物理地址=(塊號,塊內(nèi)地址)=( B , d )內(nèi)存塊的起始地址等于內(nèi)存塊號乘以塊長。,物理地址,,(2)用戶進(jìn)程的邏輯空間也按內(nèi)存塊的大小分頁,每頁也按邏輯地址由小到大編號稱為頁號。假設(shè)一個進(jìn)程有61個字節(jié),以每頁8個字節(jié)分頁,分成8 頁,如圖所示:,,,000000 000,000000 001,000000 010,0
24、00000 …,000000 111,,000001 000,000001 001,000001 …,000001 111,,… … …,000111 000,000111 001,000111 010,000111 101,,,,,頁 號 頁內(nèi)地址,# 0,# 1,# 7,每頁的容量是23邏輯地址被分成兩部分,高位部分稱為頁號,低位部分稱為頁內(nèi)地址。邏輯地址=( p , d )程序共有8頁,每頁有 8 個字
25、節(jié)。頁號是從邏輯地址中截出來的。為程序的每一頁分配一個內(nèi)存塊,這就得出程序任何一頁裝入內(nèi)存后,它的頁內(nèi)地址就等于塊內(nèi)地址。,邏輯地址,… … …,物理地址(塊號,塊內(nèi)地址)用(B,d)表示, 邏輯地址(頁號,頁內(nèi)地址)用(p,d)表示, 設(shè)邏輯地址是A,頁長是L,從數(shù)學(xué)角度描述: p = A div L d = A mod L 因?yàn)長=2m,所以p是A邏輯右移 m 位后
26、的結(jié)果,d 是A邏輯右移 m 位時,移出去的m 位值。,,用匯編語言整數(shù)除法指令很容易描述,以A 作為被除數(shù),以L 作為除數(shù),商就是頁號,余數(shù)就是頁內(nèi)地址。其實(shí)不用對邏輯地址移位,也不用對邏輯地址做除法,在工程上直接根據(jù)頁長的位數(shù),將邏輯地址一分為二,高位部分是頁號,低位部分是頁內(nèi)地址(頁內(nèi)偏移)。,,內(nèi)存空間分配與回收 頁式管理以塊為單位給進(jìn)程分配內(nèi)存,操作系統(tǒng)必須隨時掌握內(nèi)存塊的狀態(tài)(已分配、未分配、當(dāng)前空閑塊的總數(shù))。
27、 下面建立內(nèi)存空間分配與回收的數(shù)學(xué)模型: 首先看數(shù)據(jù)的性質(zhì),內(nèi)存塊具有哪些屬性?內(nèi)存塊的起始地址、內(nèi)存塊的狀態(tài)(已分配或空閑),內(nèi)存塊的總數(shù)是固定的。,,這個模型要能反映內(nèi)存塊的地址和狀態(tài)信息。并且內(nèi)存塊的總數(shù)是不變的。從數(shù)據(jù)結(jié)構(gòu)和程序語言角度講,一個數(shù)組元素具備兩個特性,能否用一個數(shù)組元素代表一個內(nèi)存塊?用數(shù)組元素的值代表內(nèi)存塊的狀態(tài),元素的下標(biāo)值代表內(nèi)存塊的地址。因?yàn)橐粋€內(nèi)存塊的狀態(tài)不是已分配就是未分配,可以用一個
28、二進(jìn)制位表示,0表示未分配,1表示已分配。,進(jìn)程和頁架,A.0,A.1,A.2,A.3,B.0,B.1,B.2,C.0,C.1,C.2,C.3,D.0,D.1,D.2,D.3,D.4,假定系統(tǒng)有m* n個內(nèi)存塊(m行n列),用m*n的位圖表示:,0 1 2 3 4 5 ... 30 31,0 1 2 3
29、4 5 6 7,,在程序語言中用二維數(shù)組表示這個位圖,每個元素的長度是一個二進(jìn)制位,用一個數(shù)組元素表示一個內(nèi)存塊。數(shù)組元素值表示對應(yīng)的內(nèi)存塊的狀態(tài)(空閑或占用)數(shù)組元素的下標(biāo)映射內(nèi)存塊的起始地址。從分頁原理可知,內(nèi)存塊的起始地址等于內(nèi)存塊號乘以頁長,在此頁長是個常數(shù),用元素的下標(biāo)值映射內(nèi)存塊號。塊號左移就可獲得塊的起始地址。,,假設(shè)i和j分別代表數(shù)組元素的行、列下標(biāo) 。 B = i * n + j 例:n
30、=32, m= 8 , i = 3, j = 5 B = i * n + j = 3 * 32 + 5 = 101 分配時遍歷數(shù)組,找到元素值是0的元素,再根據(jù)該元素的下標(biāo)計算內(nèi)存塊塊號B。分配后,將該元素值更改為1。,,分配原則:設(shè)系統(tǒng)有m 個空閑內(nèi)存塊,進(jìn)程申請n塊,如m>=n就分配,即要求進(jìn)程一次性的裝入內(nèi)存,不論這些塊在內(nèi)存中是否連續(xù)。一個進(jìn)程裝入內(nèi)存后,可以離散分布在各個內(nèi)存塊中,進(jìn)程
31、不需要操作系統(tǒng)為它分配一個連續(xù)的內(nèi)存區(qū)。這正是分頁管理與分區(qū)管理的根本區(qū)別。,設(shè)k是系統(tǒng)當(dāng)前的空閑塊數(shù),n是進(jìn)程的頁數(shù),分配算法可以用N-S流程圖表示為:,,,,,,,,,,,,,,T,T,F,F,k >= n,n x ; q=&a[0][0] ; B=0;,,當(dāng) x > 0,* q = = 0 (未分配),分配 *q= 1,填寫頁表,記錄塊號 B, x--, k --,修改 q ++;
32、 B++,不分配,,進(jìn)程結(jié)束后,要回收進(jìn)程占用的所有內(nèi)存塊,這時要根據(jù)內(nèi)存塊號計算它在位圖中的位置(即行下標(biāo)和列下標(biāo)) i = B div n j = B mod n例:B=197,n=32 i = B div n = 197 div 32 = 6 j = B mod n = 197 mod 32 = 5,,計算出內(nèi)存塊對應(yīng)的行和列下標(biāo)后,就可以訪問數(shù)組,把該元素的值修
33、改為 0 ,系統(tǒng)空閑內(nèi)存塊數(shù)自增 1 ,這個內(nèi)存塊就被系統(tǒng)收回;進(jìn)程如占有 n 塊,就把這個過程重復(fù) n 次。,,地址映射地址映射是將邏輯地址轉(zhuǎn)換成真實(shí)的物理地址。由于內(nèi)存的一塊恰好裝入一頁,頁內(nèi)地址與塊內(nèi)地址一一對應(yīng)。邏輯地址是(p , d )物理地址是(B , d )現(xiàn)在的問題是已知p ,求B。因?yàn)檫M(jìn)程的一頁可以裝入內(nèi)存的任何一塊中,p 和B之間不存,,在一種可計算的線性函數(shù)。但是存在每頁對應(yīng)一個內(nèi)存塊的關(guān)系。一個顯而易見
34、的方法是建立一張表 (頁表) ,表中每行代表一頁,每行的序號代表頁號,通過這張表描述頁號與塊號的關(guān)系。地址映射的工作是用頁號 p 查表,找到對應(yīng)的塊號B ,再用B 與頁內(nèi)地址d 計算物理地址。 為了提高地址映射的效率,需要硬件的支持。在CPU中設(shè)立頁表控制寄存器(其中包含頁表長度L和頁表起始地址a)。,頁表,,每個進(jìn)程都有自己的一張頁表,頁表的起始地址和長度記錄在PCB中。當(dāng)進(jìn)程由就緒態(tài)變成執(zhí)行態(tài)時,由操作系統(tǒng)根據(jù)進(jìn)程的PCB將進(jìn)
35、程頁表的起始地址和頁表長度填入CPU頁表控制寄存器。,,,,,,,,,p,d,L,a,p < L,,,,,,,B,B,d,p + a,p + a,,越界中斷,,n,y,,a,邏輯地址,頁表寄存器,頁表,物理地址,由于頁表是駐留在內(nèi)存的某個固定區(qū)域中,而取數(shù)據(jù)或指令又必須經(jīng)過頁表變換才能得到實(shí)際物理地址。因此,取一個數(shù)據(jù)或指令至少要訪問內(nèi)存兩次以上。一次訪問頁表以確定所取數(shù)據(jù)或指令的物理地址,另一次是根據(jù)地址取數(shù)據(jù)或指令。這比通常執(zhí)
36、行指令的速度慢了一倍。,,提高查找速度一個最快的辦法就是把頁表放在寄存器中而不是內(nèi)存中,但由于寄存器價格太貴,這樣做是不可取的。另一種辦法是在地址變換機(jī)構(gòu)中加入一個高速聯(lián)想存儲器,構(gòu)成一張快表。在快表中,存入那些當(dāng)前執(zhí)行進(jìn)程中最常用的頁號與所對應(yīng)的塊號,從而以提高查找速度。,(2)快表的地址轉(zhuǎn)換,,由于在某段時間內(nèi)執(zhí)行程序時,是在一個范圍內(nèi)逐條順序執(zhí)行指令;數(shù)組一類數(shù)據(jù)結(jié)構(gòu)在內(nèi)存占據(jù)一片連續(xù)存儲空間,訪問數(shù)組時也是在數(shù)組范圍內(nèi)訪問,所以
37、快表的命中率可達(dá)到80%到90%。CPU存取一個數(shù)據(jù)的平均時間為:T=命中率×(訪內(nèi)時間+訪cache時間)+非命中率×(2 ×訪內(nèi)時間+訪cache時間)例:訪內(nèi)時間是100ns,訪cache時間是20ns,訪cache命中率是85%計算CPU存取一個數(shù)據(jù)的平均時間。T=0.85*(100+20)+0.15*(200+20)=135ns,頁的共享和保護(hù),分頁存儲管理技術(shù)使每個進(jìn)程分別存儲在內(nèi)存的不連
38、續(xù)的存儲塊中,這種靈活性允許兩個和多個進(jìn)程共享程序庫中的例程或公共數(shù)據(jù)段的同一副本,共享的方法是使這些相關(guān)進(jìn)程的邏輯空間中的頁指向相同的內(nèi)存塊。共享頁面是有條件的,故實(shí)現(xiàn)信息共享的前提是提供附加的保護(hù)措施,對共享信息加以保護(hù)。,頁共享與保護(hù),7.3.2 分段式存儲管理方式,其實(shí)程序在邏輯上是分成不同段的,每個段具有其獨(dú)特的性質(zhì),例如一個代碼段是只執(zhí)行的,一個數(shù)據(jù)段只允許讀,另一個數(shù)據(jù)段可允許讀和寫。顯然,如以段作為內(nèi)存分配的最小單
39、位,這便于對各個段實(shí)施控制和保護(hù)。這些段的長度可以不同,段和段在內(nèi)存中也可以不連續(xù)。每個段在內(nèi)存占據(jù)一片連續(xù)的空間。,,分段基本原理,內(nèi)存分配與回收分段管理中,內(nèi)存的最小分配對象是段,特別地是為每個段分配各自的連續(xù)空間,在內(nèi)存里段和段之間可以不連續(xù)。分配算法與可變分區(qū)的分配算法相似,可以采用最佳適應(yīng)法、最壞適應(yīng)法和首次適應(yīng)法等分配算法。顯然仍然要解決外碎片的問題。,分段基本原理,內(nèi)存分配的數(shù)據(jù)結(jié)構(gòu)要采用空閑區(qū)鏈表,為了提高內(nèi)存的利用
40、率,必須實(shí)施內(nèi)存碎片拼接的方案,內(nèi)存碎片拼接的時機(jī)可以在分配時刻或回收時刻??梢岳斫夥侄喂芾砑夹g(shù)繼承了可變分區(qū)管理技術(shù),但管理上要比可變分區(qū)更復(fù)雜。例如可變分區(qū)管理以進(jìn)程為內(nèi)存分配的最小對象,為一個進(jìn)程只進(jìn)行一次分配工作;而分段管理以段為內(nèi)存分配的最小對象,為一個進(jìn)程的每個段要進(jìn)行一次分配工作。,分段基本原理,地址映射從前面論述中,知道進(jìn)程被分成若干個邏輯段,每個段在內(nèi)存中占據(jù)一片連續(xù)的空間,內(nèi)存分配可以按可變分區(qū)的算法,必須進(jìn)行外
41、碎片拼接。那么采用靜態(tài)地址映射還是動態(tài)地址映射呢?答案顯然是必須采用動態(tài)地址映射。否則無法實(shí)施外碎片拼接。地址映射是將邏輯地址轉(zhuǎn)換為物理地址,先研究邏輯地址的構(gòu)成。,分段基本原理,進(jìn)程的邏輯地址空間在分段存儲管理方式中,段是一組相關(guān)的邏輯信息的集合。每個段都有自己的名字和長度,通常用一個段號來代替段名,每個段都從0 開始編址,并采用一段連續(xù)的地址空間,段的長度由相應(yīng)的邏輯信息組的長度決定。分段系統(tǒng)中的邏輯地址由段號 s和段內(nèi)
42、地址 d 組成, 是一個二維地址( s , d )。是程序員負(fù)責(zé)安排的地址。,,由于分段的進(jìn)程邏輯地址空間是二維的,所以分段的地址映射在于如何把二維段地址結(jié)構(gòu)動態(tài)地變成一維的內(nèi)存地址結(jié)構(gòu)。內(nèi)存分配時,是為任何一個段分配一個連續(xù)的內(nèi)存片,一個段內(nèi)的所有邏輯地址在該內(nèi)存片中的順序仍然不變。假設(shè)段的物理起始地址是 a,由于段的起始邏輯地址是 0,邏輯地址中作為偏移地址,加上段物理起始地址就是所求的物理地址。所以邏輯地址為 x的單元其物理地址
43、為 a+x 。,,現(xiàn)在已知邏輯地址(s,d),怎樣計算它在內(nèi)存的物理地址?與分頁管理的分析一樣,關(guān)鍵是找到邏輯地址與物理地址之間的映射關(guān)系。由于每個段在內(nèi)存是連續(xù)的,可以將段的物理地址看成是由基址和偏移地址( a,d)組成,根據(jù)前面分析,偏移地址又等于段內(nèi)地址,關(guān)鍵要找 s 和 a 的聯(lián)系。分配內(nèi)存時,是隨機(jī)為一個段分配空間,所以 s 和 a 之間,不會存在某種線性函數(shù)關(guān)系,即不可能用數(shù)值計算的方法求解。但是段號 s 和段物理起始地
44、址 a 之間確實(shí)存在著一一對應(yīng)的關(guān)系,可以用一個表(段表)保存這個關(guān)系,根據(jù)表的起始地址和 s 找該段的起始物理地址 a 。然后計算 a+d 得到所要的物理地址。操作系統(tǒng)每個進(jìn)程建立一個表,保存其段號 s 和段物理起始地址 a 之間的關(guān)系,稱為段表。,,在查表中仍然要防止地址越界的問題。所以表中除了段物理起始地址外,還要保存段的長度值。硬件上要提供相應(yīng)的段表控制寄存器,當(dāng)進(jìn)程切換時,操作系統(tǒng)把新進(jìn)程PCB中的段表起始地址和段表長度值
45、寫入段表控制寄存器中,進(jìn)程訪問內(nèi)存時,按照段表控制寄存器找段表,通過查表找段的物理起始地址。,地址映射,段號,段內(nèi)地址,段表始址,邏輯地址( 2 , 100 ),>=,,段號越界中斷,,+,1K,500,200,600,0,1,2,3,基址,段號,段長,物理地址,8292,段式存儲的地址變換機(jī)構(gòu),2,100,,+,6K,8K,9K,4K,y,n,,,,,,,>=,,,,y,n,段內(nèi)地址越界,段表長度4,,,,段的共享和保護(hù),
46、段的共享 段的共享是指兩個以上的進(jìn)程,使用同一個子程序或數(shù)據(jù)段,而在內(nèi)存中只保留該信息的一個副本。具體地說,只需在每個進(jìn)程的段表中,用相應(yīng)的表項(xiàng)裝入共享段在內(nèi)存的起始地址即可。,,內(nèi)存保護(hù)分段管理優(yōu)點(diǎn)之一就是方便內(nèi)存保護(hù)。前面看到怎樣進(jìn)行地址越界保護(hù),它只是內(nèi)存保護(hù)的一部分,為了實(shí)施訪問權(quán)限保護(hù),在段表中再增加訪問權(quán)限字段,每個進(jìn)程訪問該段時還要進(jìn)行訪問權(quán)限檢查,符合的才允許訪問,否則拒絕訪問。,段的共享與保護(hù),例子:有一個多
47、用戶系統(tǒng),可以容納40個用戶,他們都執(zhí)行一個文本編輯程序,如果文本編輯程序有160K的代碼和40K的數(shù)據(jù)區(qū),則需要:(160+40)*40 =8M 的內(nèi)存空間,如果160K的代碼是可重入的,則在內(nèi)存中只保存一個副本就可以了,則需要:160+40*40=1760K內(nèi)存空間。,段的共享與保護(hù),,引入分段的理由:邏輯上的完整動態(tài)鏈接信息共享信息保護(hù),,分頁和分段的區(qū)別:頁的大小是固定的,頁的長度是由內(nèi)存塊長度決定的。段的長度是可
48、變的,段的長度是由信息的長度決定的;分頁的邏輯地址空間是一維的,分段的邏輯地址空間是二維的;分頁存在內(nèi)碎片,分段存在外碎片;,邏輯地址,分頁,分段,7.3.3 段頁式存儲管理方式,分頁存儲管理能有效地提高內(nèi)存的利用率,分段存儲管理能很好地滿足用戶的需要,段頁式存儲管理則是分頁和分段兩種存儲管理方式的結(jié)合,它同時具備了兩者的優(yōu)點(diǎn)。也繼承了兩者的缺點(diǎn)。,,,分段和分頁都有各自的優(yōu)勢。分頁對程序員來說是透明的,它消除了外部碎片,因而可以
49、更有效地使用主存。它具有處理不斷增長的數(shù)據(jù)的能力。分段是由程序員決定的,對段的共享及保護(hù)操作容易,支持動態(tài)鏈接等優(yōu)勢。把它們二者的優(yōu)點(diǎn)結(jié)合起來,就形成了非常具有優(yōu)勢的“段頁式存儲管理”方式。,7.3.3.1 段頁式管理原理,程序員仍然按分段編程,邏輯地址是二維地址(段號,段內(nèi)地址)。操作系統(tǒng)仍對內(nèi)存用戶區(qū)實(shí)施分塊,物理地址由塊號和塊內(nèi)地址組成(塊號,塊內(nèi)地址)。操作系統(tǒng)對進(jìn)程以段為單位進(jìn)行分頁,一個段被分成若干頁,每一頁剛好占一個內(nèi)
50、存塊,內(nèi)存里段和段之間可以不連續(xù),一個段內(nèi)的頁和頁之間也可以不連續(xù)。,7.3.3.1 段頁式管理原理,內(nèi)存分配和回收雖然名叫段頁式,其實(shí)內(nèi)存并沒有段的影子只有大小相同的塊,塊長度決定了頁的長度。所以內(nèi)存分配和回收與分頁式管理是一樣的。內(nèi)存分配和回收操作簡單,內(nèi)存的利用率比分頁式稍低一些,因?yàn)槊恳欢蔚淖詈笠豁摃袃?nèi)碎片。這是繼承了分頁式的優(yōu)點(diǎn)。,7.3.3.1 段頁式管理原理,地址映射首先研究邏輯地址在段頁式中的變化。程序員編程時
51、仍然是分段編程,所以邏輯地址仍是二維的,即段號和段內(nèi)地址。操作系統(tǒng)以段為單位分頁,就把段內(nèi)地址分成兩部分,即頁號和頁內(nèi)地址,這樣,邏輯地址變成(段號,頁號,頁內(nèi)地址)。再來看物理地址,物理地址是(塊號,塊內(nèi)地址),因?yàn)橐粔K正好裝入一頁,所以,頁,7.3.3.1 段頁式管理原理,內(nèi)地址就等于塊內(nèi)地址。下面就要考慮段號和頁號與塊號之間的聯(lián)系。因?yàn)橐远螢閱挝环猪摚悦總€段都要一個頁表,頁表每項(xiàng)裝入對應(yīng)的塊號;每個進(jìn)程分多個段,一個進(jìn)程
52、設(shè)置一個段表。段表項(xiàng)目內(nèi)容與分段式中的段表內(nèi)容不同,為了檢查地址越界,一個段表項(xiàng)至少包括頁表的長度和頁表的起始地址。,7.3.3.1 段頁式管理原理,,段頁式分配的地址變換圖解,>=,越界中斷,,+,段頁式存儲的地址變換機(jī)構(gòu),,,,,0,1,2,3,基址,段號2,頁表,,,,,長度,頁表,,+,,B,1,,塊號,頁號,0,1,2,,,,,,,,,3,,,,,>=,,,,,,,,塊內(nèi)地址,塊號,段號2,頁號2,頁內(nèi)地址d,段表
53、地址,段表長度,段內(nèi)地址,Y,N,Y,N,7.3.3.1 段頁式管理原理,從地址映射看到,為了計算內(nèi)存物理地址需要兩次訪問內(nèi)存(段表,頁表),顯然增加執(zhí)行一條指令的時間,使進(jìn)程執(zhí)行時間延長,這是段頁式管理天生缺陷,為了提高訪問內(nèi)存的速度,可以用增加快表的方法,利用高速緩沖內(nèi)存存放段表和頁表的子集,縮短計算物理地址的時間。,7.3.3.1 段頁式管理原理,內(nèi)存共享和保護(hù)段頁式管理吸取了分段式管理和分頁式管理的優(yōu)點(diǎn),可以說在內(nèi)存分配回收方
54、面吸取了分頁管理的優(yōu)點(diǎn),在內(nèi)存共享和保護(hù)方面吸取了分段式管理的優(yōu)點(diǎn)。段頁式管理的內(nèi)存保護(hù)除了前面講的地址越界保護(hù)外,還有訪問權(quán)限保護(hù)。這可通過在段表中增加保護(hù)字段實(shí)現(xiàn)。,7.3.3.2段頁式的實(shí)例,Pentium的虛擬存儲器采用段頁式存儲管理Pentium虛擬存儲器的核心是兩張表:LDT(局部段描述符表)和GDT(全局段描述符表)。每個進(jìn)程都有自己的LDT,一臺計算機(jī)上的所有進(jìn)程共享一個GDT。LDT描述每個進(jìn)程的段,包括代碼、數(shù)據(jù)、
55、堆棧等;GDT描述系統(tǒng)段,包括操作系統(tǒng)本身。,7.3.3.2段頁式的實(shí)例,為了訪問一個段,操作系統(tǒng)必須把這個段的選擇符(selector)裝入中央處理器的某個段寄存器。每個選擇符是一個16位數(shù)。,15 3 2 1 0,索 引,0=GDT / 1=LDT,,優(yōu)先級(0~3),,7.3.3.2段頁式的實(shí)例,段寄存器SS表示堆棧段,CS表示代碼段
56、, DS 表示數(shù)據(jù)段, ES、FS、GS表示附加數(shù)據(jù)段。在選擇符被裝入段寄存器時,從LDT或GDT中取出對應(yīng)的描述符,以便快速訪問。一個描述符由8個字節(jié)組成包括段的基地址、大小和其它信息。,基址 24 -31,G,X,0,段長 16-19,,基址16 -23,0:16位段1:32位段,0:段長以字節(jié)為單位1:段長以頁長為單位,,,基址0 -15,段長 0 -15,Type,S,DPL,P,A,0:段不在內(nèi)存中1:段在內(nèi)存中,,,,
57、,,,,0: 未訪問過1: 訪問過,,,,,,,0:系統(tǒng)段或門1:代碼段或數(shù)據(jù)段,,,,,,,,段類型和保護(hù),,,,優(yōu)先級(0~3),Pentium段描述符,7.3.3.2段頁式的實(shí)例,現(xiàn)在讓我們跟蹤一個邏輯地址(選擇符,偏移地址)轉(zhuǎn)換為物理地址的過程:用選擇符做索引,查段描述符表中的描述符。Pentium接著把段描述符中的32位段基址和偏移地址相加形成線性地址 。如果禁止分頁,線性地址就作為物理地址并被送往寄存器用于讀寫。
58、如果允許分頁,線性地址將被解釋成一個虛擬地址并通過頁表映射到物理地址。,,7.3.3.2段頁式的實(shí)例,段選擇符,段描述符表,段起始地址,段長度,段的其他屬性,偏移地址,32位線性地址,,,…,,…,,,,,,+,邏輯地址轉(zhuǎn)換為線性地址,CSDSSSESFSGS,7.3.3.2段頁式的實(shí)例,,,,,在實(shí)存管理中,會遇到內(nèi)存不夠用的情況。人們也想了解決該問題的辦法,交換技術(shù)和覆蓋技術(shù)就是在實(shí)存管理中擴(kuò)充內(nèi)存的方法。這些方法在一
59、定程度上解決了實(shí)存管理中用小內(nèi)存運(yùn)行大程序的問題。,7.4 交換技術(shù),交換技術(shù)是指將一個進(jìn)程完整地從內(nèi)存移動到磁盤上,騰出空間給其他進(jìn)程使用。需要時,再將該進(jìn)程移入內(nèi)存。交換進(jìn)程由換出和換進(jìn)兩個過程組成,換出是把內(nèi)存中的數(shù)據(jù)和程序換到外存的交換區(qū),反之就是換進(jìn)。 在交換系統(tǒng)中,交換所占用的時間相當(dāng)多。在前面學(xué)習(xí)進(jìn)程狀態(tài)時,曾經(jīng)學(xué)習(xí)過掛起和激活轉(zhuǎn)換,從進(jìn)程狀態(tài)轉(zhuǎn)換上講,交換技術(shù)就是將進(jìn)程掛起或激活。,,7.5 覆蓋技術(shù),覆蓋是在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論