實存管理技術(shù)_第1頁
實存管理技術(shù)_第2頁
實存管理技術(shù)_第3頁
實存管理技術(shù)_第4頁
實存管理技術(shù)_第5頁
已閱讀5頁,還剩101頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

實存管理技術(shù)第1頁,共108頁,2023年,2月20日,星期六基本的存儲管理方法是分區(qū)法、覆蓋技術(shù)、交換技術(shù)、分頁法、分段法、段頁法。第2頁,共108頁,2023年,2月20日,星期六第七章實存管理技術(shù)7.1存儲管理的基本概念7.2連續(xù)分配存儲管理方式7.3離散分配存儲管理方式7.4交換技術(shù)7.5覆蓋技術(shù)第3頁,共108頁,2023年,2月20日,星期六7.1存儲管理的基本概念7.1.1存儲管理要解決的問題7.1.2存儲管理的分類7.1.3地址映射(重定位)第4頁,共108頁,2023年,2月20日,星期六7.1.1存儲管理要解決的問題早期計算機系統(tǒng)中,內(nèi)存是最緊張的資源之一。為了在小內(nèi)存中運行大程序,人們先發(fā)明了覆蓋技術(shù)。當發(fā)明虛存管理技術(shù)后,才真正解決了在小內(nèi)存中運行大程序的問題。為了有效管理計算機內(nèi)存資源,操作系統(tǒng)的存儲管理要具備以下功能:1.內(nèi)存空間分配與回收根據(jù)某種分配方式,遵循某種分配算法,為進程分配內(nèi)存,當進程結(jié)束時再回收內(nèi)存。第5頁,共108頁,2023年,2月20日,星期六2.地址映射設(shè)計地址變換機構(gòu),靜態(tài)和動態(tài)地址變換的方法。3.內(nèi)存保護怎樣讓內(nèi)存中各個進程互不干擾,怎樣保證內(nèi)存中程序、數(shù)據(jù)的安全。4.內(nèi)存擴充怎樣從邏輯上擴充內(nèi)存。這屬于虛存管理的范疇。第6頁,共108頁,2023年,2月20日,星期六7.1.2存儲管理的分類從分配方式上按進程在內(nèi)存中是否連續(xù),可以把存儲管理分成連續(xù)分配方式和離散分配方式兩類。1.連續(xù)分配方式必須為進程在內(nèi)存分配一片連續(xù)的空間。2.離散分配方式允許將一個進程分散地裝入內(nèi)存的多個不相鄰的區(qū)域。第7頁,共108頁,2023年,2月20日,星期六從進程是整體裝入還是局部裝入內(nèi)存可以把存儲管理分成實存管理和虛存管理兩類。1.實存管理必須把進程完整地裝入內(nèi)存。2.虛存管理允許將一個進程局部地裝入內(nèi)存。第8頁,共108頁,2023年,2月20日,星期六7.1.3地址映射(重定位)1.地址空間和存儲空間源程序經(jīng)過編譯或匯編產(chǎn)生目標文件,目標文件經(jīng)過連接和裝配產(chǎn)生可以執(zhí)行的文件。在連接裝配時,語言系統(tǒng)并不知道將來這個執(zhí)行文件會放在內(nèi)存的哪個位置,為了方便地將執(zhí)行文件裝入內(nèi)存,把執(zhí)行文件中第一條指令的地址設(shè)為0。其他指令的地址都以它做參照。執(zhí)行文件中指令的地址稱相對地址或邏輯地址。而相對地址的集合稱相對地址空間,簡稱地址空間。第9頁,共108頁,2023年,2月20日,星期六內(nèi)存每個字節(jié)都有一個地址,這是物理地址是真實的地址,也稱絕對地址。絕對地址空間也叫物理地址空間,簡稱存儲空間。一個程序的邏輯地址和它在內(nèi)存中的地址是不同的,顯然必須先將邏輯地址變成物理地址后程序才能正確運行。第10頁,共108頁,2023年,2月20日,星期六2.靜態(tài)重定位

靜態(tài)重定位是由專門設(shè)計的重定位裝配程序來完成的,是在目標程序裝入到內(nèi)存區(qū)時由裝配程序來完成地址轉(zhuǎn)換。優(yōu)點:無需增加地址轉(zhuǎn)換機構(gòu)

缺點:不能實現(xiàn)重新分配內(nèi)存

用戶必須事先確定所需的存儲量

每個用戶進程需各自使用一個獨立的副本。

第11頁,共108頁,2023年,2月20日,星期六Load#1,450…………35000100450……Load#1,2450……3500………………2100操作系統(tǒng)20002450邏輯地址物理地址圖7-2靜態(tài)地址映射第12頁,共108頁,2023年,2月20日,星期六3.動態(tài)重定位動態(tài)重定位是在目標程序執(zhí)行過程中,在CPU訪問內(nèi)存之前,由硬件地址映射機構(gòu)來完成將要訪問的指令或數(shù)據(jù)的邏輯地址向內(nèi)存的物理地址的轉(zhuǎn)換。優(yōu)點:內(nèi)存的使用更加靈活有效;幾個作業(yè)共享一程序段的單個副本比較容易;無需用戶干預(yù),由系統(tǒng)來負責全部的存儲管理。缺點:需附加硬件支持;實現(xiàn)存儲器管理的軟件比較復(fù)雜。第13頁,共108頁,2023年,2月20日,星期六Load#1,450…………35000100450……Load#1,450……3500………………2100操作系統(tǒng)20002450邏輯地址物理地址圖7-3動態(tài)地址映射基址寄存器2000+第14頁,共108頁,2023年,2月20日,星期六7.2連續(xù)分配方式7.2.1單一連續(xù)分配方式7.2.2固定分區(qū)內(nèi)存管理方式7.2.3可變分區(qū)內(nèi)存管理方式第15頁,共108頁,2023年,2月20日,星期六7.2.1單一連續(xù)分配方式在單任務(wù)的操作系統(tǒng)條件下,讓用戶占用計算機所有資源,內(nèi)存管理采用單一連續(xù)分配方式。內(nèi)存被分成兩個區(qū)1.系統(tǒng)區(qū)供操作系統(tǒng)使用2.用戶區(qū)供用戶放一個程序操作系統(tǒng)區(qū)用戶區(qū)……第16頁,共108頁,2023年,2月20日,星期六7.2.2固定分區(qū)內(nèi)存管理方式分區(qū)管理是滿足多道程序設(shè)計的一種最早采用的存儲管理方法。其基本原理是給每一個進程在內(nèi)存中劃分一塊可用的存儲區(qū),連續(xù)存儲各進程的程序和數(shù)據(jù),使各進程能并發(fā)進行。第17頁,共108頁,2023年,2月20日,星期六

內(nèi)存分配算法:(1)首次適應(yīng)法空閑分區(qū)按物理地址為升序排列,在內(nèi)存現(xiàn)有空閑分區(qū)中,找到第一個可用的分區(qū)就分配。(2)最佳適應(yīng)法在內(nèi)存現(xiàn)有的空閑分區(qū)中,找一個浪費最小的分區(qū)分配。第18頁,共108頁,2023年,2月20日,星期六

(3)最壞適應(yīng)法在現(xiàn)有內(nèi)存空閑區(qū)中,找一個浪費最大的分區(qū)分配。(4)唯一最佳分配法作業(yè)按長度分類排隊,一個分區(qū)對應(yīng)一個隊,使這個隊中每個作業(yè)的長度小于等于分區(qū)的長度,使分配后內(nèi)存浪費最小。從整體上看,這個算法也不是最佳的。第19頁,共108頁,2023年,2月20日,星期六

固定分區(qū)法

固定分區(qū)法就是把內(nèi)存固定劃分為若干個不等的區(qū)域,劃分的原則由系統(tǒng)決定。在整個執(zhí)行過程中保持分區(qū)長度和分區(qū)個數(shù)不變。操作系統(tǒng)為每個用戶作業(yè)分配一個分區(qū)。

第20頁,共108頁,2023年,2月20日,星期六內(nèi)存管理

:分區(qū)號起始地址長度狀態(tài)進程名管理數(shù)據(jù)結(jié)構(gòu):設(shè)置內(nèi)存分配表內(nèi)存分配:每個區(qū)分配一個進程內(nèi)存回收:簡單缺點:內(nèi)存利用率不高如何記錄系統(tǒng)的狀況呢?第21頁,共108頁,2023年,2月20日,星期六分配策略

分區(qū)4分區(qū)3分區(qū)2分區(qū)1操作系統(tǒng)0100K200K400K700K1300K多個輸入隊列分區(qū)4分區(qū)3分區(qū)2分區(qū)1操作系統(tǒng)0100K200K400K700K1300K單個輸入隊列(a)唯一最佳分配算法(b)其他分配算法第22頁,共108頁,2023年,2月20日,星期六固定分區(qū)第23頁,共108頁,2023年,2月20日,星期六

操作系統(tǒng)建立一個內(nèi)存分區(qū)管理表(分區(qū)號、分區(qū)長度、分區(qū)首址和分區(qū)狀態(tài)),所有分區(qū)按物理地址升序排列,每個分區(qū)占表中一行。操作系統(tǒng)為作業(yè)分配內(nèi)存時,按(1)、(2)、(4)中某個分配算法查表,有合適的分區(qū)就分配,否則就不分配。固定分區(qū)法管理方式雖然簡單,但是存在大量內(nèi)碎片(在分區(qū)內(nèi)存在空余的空間,這就稱為內(nèi)碎片),內(nèi)存利用率不高。

第24頁,共108頁,2023年,2月20日,星期六分區(qū)號分區(qū)長度分區(qū)首址分區(qū)狀態(tài)120KB20KB已分配232KB40KB已分配364KB72KB已分配4128KB138KB未分配內(nèi)存分區(qū)管理表第25頁,共108頁,2023年,2月20日,星期六地址映射對于固定分區(qū),可以采用靜態(tài)地址映射也可以采用動態(tài)地址映射。內(nèi)存保護可以采用界限寄存器法,用兩個寄存器分別放用戶區(qū)的首地址和用戶的長度。用戶程序訪問內(nèi)存的地址必須在這個范圍內(nèi),否則就是地址越界。第26頁,共108頁,2023年,2月20日,星期六7.2.3可變分區(qū)內(nèi)存管理方式

可變分區(qū)法

動態(tài)分區(qū)分配是根據(jù)進程的實際需要,動態(tài)地為它分配連續(xù)的內(nèi)存空間,各個分區(qū)是在相應(yīng)進程裝入內(nèi)存時建立的,其大小恰好等于進程的大小。

為了實現(xiàn)內(nèi)存分配,系統(tǒng)中設(shè)置了相應(yīng)的數(shù)據(jù)結(jié)構(gòu)來記錄內(nèi)存的使用情況,常用的數(shù)據(jù)結(jié)構(gòu)形式有空閑分區(qū)鏈。第27頁,共108頁,2023年,2月20日,星期六內(nèi)存分配數(shù)據(jù)結(jié)構(gòu),可以用空閑區(qū)鏈表,節(jié)點中包含空閑區(qū)的首址、長度、鏈指針。在進程PCB中包含進程的內(nèi)存首址、長度、訪問權(quán)限等項目。分配算法:首次適應(yīng)法、最佳適應(yīng)法、最壞適應(yīng)法。分配時,操作系統(tǒng)填寫PCB中進程的內(nèi)存首址、長度、訪問權(quán)限。第28頁,共108頁,2023年,2月20日,星期六內(nèi)存回收為了最大限度的利用內(nèi)存資源,就要不斷將分散的小碎片拼接成一個大的空閑區(qū),這里有個拼接的時機問題,可以在分配時拼接,也可以在回收時拼接。拼接意味著要求進程能在內(nèi)存中移動,例如現(xiàn)在進程的首址是a,將它向地址增大方向移動b個字節(jié),進程的首址變成a+b。進程長度不變。第29頁,共108頁,2023年,2月20日,星期六地址映射為了實現(xiàn)內(nèi)存拼接,必須用動態(tài)地址映射CPU提供基址寄存器、限長寄存器、地址運算器。進程切換時,操作系統(tǒng)把PCB中的內(nèi)存信息(進程的首址、長度)寫入基址寄存器和限長寄存器同時將進程PCB中的現(xiàn)場信息寫入CPU的寄存器集合。第30頁,共108頁,2023年,2月20日,星期六動態(tài)重定位的實現(xiàn)過程第31頁,共108頁,2023年,2月20日,星期六內(nèi)存保護利用基址寄存器和限長寄存器,一個進程只能訪問自己的內(nèi)存區(qū),只有操作系統(tǒng)進程可以訪問全部的內(nèi)存區(qū)。除了地址界限保護外,為了進程間共享數(shù)據(jù)還需要訪問權(quán)限保護,進程可以給另一個進程賦予訪問權(quán)限,允許在訪問權(quán)限范圍內(nèi)訪問。第32頁,共108頁,2023年,2月20日,星期六動態(tài)分區(qū)舉例外碎片進程外的內(nèi)存空間碎片化能用壓縮方法解決OS移動進程使進程和進程相連。消耗CPU時間OS(8M)P1(20M)P2(14M)P3(18M)Empty(56M)Empty(4M)P4(8M)Empty(6M)P2(14M)Empty(6M)RefertoFigure7.4第33頁,共108頁,2023年,2月20日,星期六

例:現(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(占20KB)

B(占80KB)

C(占50KB)F1(100KB,10KB

)F2(50KB,10KB

)第34頁,共108頁,2023年,2月20日,星期六

首次適應(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,10KB

)第35頁,共108頁,2023年,2月20日,星期六

最佳適應(yīng)法

A(20KB)

B(80KB)可變分區(qū)分配采用最佳適應(yīng)算法,結(jié)果不一定是最佳的;采用最壞程序算法,結(jié)果不一定是最差的。F2(20KB,40KB

)F1(80KB,30KB

)第36頁,共108頁,2023年,2月20日,星期六伙伴系統(tǒng)全部可用空間被分成一個長度是2U的塊如請求分配長度s符合2U-1<s<=2U全部空間分配給它否則塊被分成兩個相等的伙伴。這個過程一直持續(xù)直到找到符合長度<=s的伙伴第37頁,共108頁,2023年,2月20日,星期六伙伴系統(tǒng)舉例第38頁,共108頁,2023年,2月20日,星期六伙伴系統(tǒng)樹型表示第39頁,共108頁,2023年,2月20日,星期六7.3離散分配存儲管理方式固定分區(qū)和可變分區(qū)都是連續(xù)分配內(nèi)存的技術(shù),把一個進程裝入一個分區(qū),使用這種方法會造成許多碎片,降低了內(nèi)存的利用率。產(chǎn)生碎片的根本原因就是要求把一個進程連續(xù)地放在一個內(nèi)存區(qū)。雖然可變分區(qū)技術(shù)使用內(nèi)存拼接技術(shù)把分散的空閑分區(qū)集中成較大的分區(qū),但要增加系統(tǒng)的開銷。人們考慮能否化整為零提高內(nèi)存的利用率。第40頁,共108頁,2023年,2月20日,星期六7.3.1分頁式存儲管理方式7.3.2分段式存儲管理方式7.3.3段頁式存儲管理方式第41頁,共108頁,2023年,2月20日,星期六7.3.1分頁式存儲管理方式可變分區(qū)方式除了產(chǎn)生大量的外碎片,還有一個缺點,就是進程動態(tài)增長不方便。分頁管理是解決碎片問題的一種有效辦法,它允許進程在內(nèi)存空間里是不連續(xù)的;還便于進程動態(tài)增長。分頁管理技術(shù)原理(1)操作系統(tǒng)按一個2的整數(shù)次冪為長度,把內(nèi)存用戶區(qū)分成若干存儲區(qū),稱為塊,每個塊的容量都是相同的,每個塊按物理地址值由小到大順序從0開始編號,稱為塊號。第42頁,共108頁,2023年,2月20日,星期六000000000000000001000000010000000…000000111000001000000001001000001…000001111………111111000111111001111111010111111…111111111

塊號塊內(nèi)地址#0#1#63假設(shè)每塊的容量是23個字節(jié)物理地址被分成兩部分,高位部分稱為塊號,低位部分稱為塊內(nèi)地址。假設(shè)內(nèi)存共有64個塊,每塊有8個字節(jié)。塊號是從物理地址中截出來,是物理地址固有的。物理地址=(塊號,塊內(nèi)地址)=(B,d)內(nèi)存塊的起始地址等于內(nèi)存塊號乘以塊長。

物理地址第43頁,共108頁,2023年,2月20日,星期六(2)用戶進程的邏輯空間也按內(nèi)存塊的大小分頁,每頁也按邏輯地址由小到大編號稱為頁號。假設(shè)一個進程有61個字節(jié),以每頁8個字節(jié)分頁,分成8頁,如圖所示:第44頁,共108頁,2023年,2月20日,星期六000000000000000001000000010000000…000000111000001000000001001000001…000001111………000111000000111001000111010000111101

頁號頁內(nèi)地址#0#1#7每頁的容量是23邏輯地址被分成兩部分,高位部分稱為頁號,低位部分稱為頁內(nèi)地址。邏輯地址=(p,d)程序共有8頁,每頁有8個字節(jié)。頁號是從邏輯地址中截出來的。為程序的每一頁分配一個內(nèi)存塊,這就得出程序任何一頁裝入內(nèi)存后,它的頁內(nèi)地址就等于塊內(nèi)地址。

邏輯地址………第45頁,共108頁,2023年,2月20日,星期六

物理地址(塊號,塊內(nèi)地址)用(B,d)表示,邏輯地址(頁號,頁內(nèi)地址)用(p,d)表示,設(shè)邏輯地址是A,頁長是L,從數(shù)學角度描述:

p=AdivLd=AmodL

因為L=2m,所以p是A邏輯右移m位后的結(jié)果,d是A邏輯右移m位時,移出去的m位值。第46頁,共108頁,2023年,2月20日,星期六用匯編語言整數(shù)除法指令很容易描述,以A作為被除數(shù),以L作為除數(shù),商就是頁號,余數(shù)就是頁內(nèi)地址。其實不用對邏輯地址移位,也不用對邏輯地址做除法,在工程上直接根據(jù)頁長的位數(shù),將邏輯地址一分為二,高位部分是頁號,低位部分是頁內(nèi)地址(頁內(nèi)偏移)。第47頁,共108頁,2023年,2月20日,星期六

內(nèi)存空間分配與回收

頁式管理以塊為單位給進程分配內(nèi)存,操作系統(tǒng)必須隨時掌握內(nèi)存塊的狀態(tài)(已分配、未分配、當前空閑塊的總數(shù))。下面建立內(nèi)存空間分配與回收的數(shù)學模型:首先看數(shù)據(jù)的性質(zhì),內(nèi)存塊具有哪些屬性? 內(nèi)存塊的起始地址、內(nèi)存塊的狀態(tài)(已分配或空閑),內(nèi)存塊的總數(shù)是固定的。第48頁,共108頁,2023年,2月20日,星期六這個模型要能反映內(nèi)存塊的地址和狀態(tài)信息。并且內(nèi)存塊的總數(shù)是不變的。從數(shù)據(jù)結(jié)構(gòu)和程序語言角度講,一個數(shù)組元素具備兩個特性,能否用一個數(shù)組元素代表一個內(nèi)存塊?用數(shù)組元素的值代表內(nèi)存塊的狀態(tài),元素的下標值代表內(nèi)存塊的地址。因為一個內(nèi)存塊的狀態(tài)不是已分配就是未分配,可以用一個二進制位表示,0表示未分配,1表示已分配。第49頁,共108頁,2023年,2月20日,星期六進程和頁架A.0A.1A.2A.3B.0B.1B.2C.0C.1C.2C.3D.0D.1D.2D.3D.4第50頁,共108頁,2023年,2月20日,星期六

假定系統(tǒng)有m*n個內(nèi)存塊(m行n列),用m*n的位圖表示:012345...3031323334353637...6263646566676869...949596979899100101…126127128129130131132133…158159160161162163164165…190191192193194195196197…222223224225226227228229…254255

012345...3031

01234567

第51頁,共108頁,2023年,2月20日,星期六

在程序語言中用二維數(shù)組表示這個位圖,每個元素的長度是一個二進制位,用一個數(shù)組元素表示一個內(nèi)存塊。 數(shù)組元素值表示對應(yīng)的內(nèi)存塊的狀態(tài)(空閑或占用)數(shù)組元素的下標映射內(nèi)存塊的起始地址。 從分頁原理可知,內(nèi)存塊的起始地址等于內(nèi)存塊號乘以頁長,在此頁長是個常數(shù),用元素的下標值映射內(nèi)存塊號。塊號左移就可獲得塊的起始地址。第52頁,共108頁,2023年,2月20日,星期六假設(shè)i和j分別代表數(shù)組元素的行、列下標。

B=i*n+j例:n=32,m=8,i=3,j=5B=i*n+j=3*32+5=101分配時遍歷數(shù)組,找到元素值是0的元素,再根據(jù)該元素的下標計算內(nèi)存塊塊號B。分配后,將該元素值更改為1。第53頁,共108頁,2023年,2月20日,星期六

分配原則:設(shè)系統(tǒng)有m個空閑內(nèi)存塊,進程申請n塊,如m>=n就分配,即要求進程一次性的裝入內(nèi)存,不論這些塊在內(nèi)存中是否連續(xù)。一個進程裝入內(nèi)存后,可以離散分布在各個內(nèi)存塊中,進程不需要操作系統(tǒng)為它分配一個連續(xù)的內(nèi)存區(qū)。這正是分頁管理與分區(qū)管理的根本區(qū)別。第54頁,共108頁,2023年,2月20日,星期六

設(shè)k是系統(tǒng)當前的空閑塊數(shù),n是進程的頁數(shù),分配算法可以用N-S流程圖表示為:TTFFk>=nnx;q=&a[0][0];B=0;當x>0*q==0(未分配)分配*q=1,填寫頁表記錄塊號B,x--,k--修改q++;B++不分配第55頁,共108頁,2023年,2月20日,星期六

進程結(jié)束后,要回收進程占用的所有內(nèi)存塊,這時要根據(jù)內(nèi)存塊號計算它在位圖中的位置(即行下標和列下標)

i=Bdivnj=Bmodn

例:B=197,n=32i=Bdivn=197div32=6j=Bmodn=197mod32=5第56頁,共108頁,2023年,2月20日,星期六計算出內(nèi)存塊對應(yīng)的行和列下標后,就可以訪問數(shù)組,把該元素的值修改為0,系統(tǒng)空閑內(nèi)存塊數(shù)自增1,這個內(nèi)存塊就被系統(tǒng)收回;進程如占有n塊,就把這個過程重復(fù)n次。第57頁,共108頁,2023年,2月20日,星期六地址映射地址映射是將邏輯地址轉(zhuǎn)換成真實的物理地址。由于內(nèi)存的一塊恰好裝入一頁,頁內(nèi)地址與塊內(nèi)地址一一對應(yīng)。邏輯地址是(p,d)物理地址是(B,d)現(xiàn)在的問題是已知p,求B。因為進程的一頁可以裝入內(nèi)存的任何一塊中,p和B之間不存第58頁,共108頁,2023年,2月20日,星期六

在一種可計算的線性函數(shù)。但是存在每頁對應(yīng)一個內(nèi)存塊的關(guān)系。一個顯而易見的方法是建立一張表(頁表),表中每行代表一頁,每行的序號代表頁號,通過這張表描述頁號與塊號的關(guān)系。地址映射的工作是用頁號p查表,找到對應(yīng)的塊號B,再用B與頁內(nèi)地址d計算物理地址。為了提高地址映射的效率,需要硬件的支持。在CPU中設(shè)立頁表控制寄存器(其中包含頁表長度L和頁表起始地址a)。第59頁,共108頁,2023年,2月20日,星期六頁表第60頁,共108頁,2023年,2月20日,星期六每個進程都有自己的一張頁表,頁表的起始地址和長度記錄在PCB中。當進程由就緒態(tài)變成執(zhí)行態(tài)時,由操作系統(tǒng)根據(jù)進程的PCB將進程頁表的起始地址和頁表長度填入CPU頁表控制寄存器。第61頁,共108頁,2023年,2月20日,星期六pdLap<L

BBdp+ap+a越界中斷nya邏輯地址頁表寄存器頁表物理地址第62頁,共108頁,2023年,2月20日,星期六由于頁表是駐留在內(nèi)存的某個固定區(qū)域中,而取數(shù)據(jù)或指令又必須經(jīng)過頁表變換才能得到實際物理地址。因此,取一個數(shù)據(jù)或指令至少要訪問內(nèi)存兩次以上。一次訪問頁表以確定所取數(shù)據(jù)或指令的物理地址,另一次是根據(jù)地址取數(shù)據(jù)或指令。這比通常執(zhí)行指令的速度慢了一倍。第63頁,共108頁,2023年,2月20日,星期六

提高查找速度一個最快的辦法就是把頁表放在寄存器中而不是內(nèi)存中,但由于寄存器價格太貴,這樣做是不可取的。另一種辦法是在地址變換機構(gòu)中加入一個高速聯(lián)想存儲器,構(gòu)成一張快表。在快表中,存入那些當前執(zhí)行進程中最常用的頁號與所對應(yīng)的塊號,從而以提高查找速度。第64頁,共108頁,2023年,2月20日,星期六(2)快表的地址轉(zhuǎn)換第65頁,共108頁,2023年,2月20日,星期六由于在某段時間內(nèi)執(zhí)行程序時,是在一個范圍內(nèi)逐條順序執(zhí)行指令;數(shù)組一類數(shù)據(jù)結(jié)構(gòu)在內(nèi)存占據(jù)一片連續(xù)存儲空間,訪問數(shù)組時也是在數(shù)組范圍內(nèi)訪問,所以快表的命中率可達到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第66頁,共108頁,2023年,2月20日,星期六

頁的共享和保護

分頁存儲管理技術(shù)使每個進程分別存儲在內(nèi)存的不連續(xù)的存儲塊中,這種靈活性允許兩個和多個進程共享程序庫中的例程或公共數(shù)據(jù)段的同一副本,共享的方法是使這些相關(guān)進程的邏輯空間中的頁指向相同的內(nèi)存塊。 共享頁面是有條件的,故實現(xiàn)信息共享的前提是提供附加的保護措施,對共享信息加以保護。

第67頁,共108頁,2023年,2月20日,星期六頁共享與保護進程1頁表1ed1ed2…ed40data1data10…ed1ed2…ed40data1data10…2122…606170…2122…607180…進程2頁表2ed1ed2…ed40data1data10…主存data1data10……212260617007180分頁系統(tǒng)中共享editor示意圖第68頁,共108頁,2023年,2月20日,星期六7.3.2分段式存儲管理方式其實程序在邏輯上是分成不同段的,每個段具有其獨特的性質(zhì),例如一個代碼段是只執(zhí)行的,一個數(shù)據(jù)段只允許讀,另一個數(shù)據(jù)段可允許讀和寫。顯然,如以段作為內(nèi)存分配的最小單位,這便于對各個段實施控制和保護。這些段的長度可以不同,段和段在內(nèi)存中也可以不連續(xù)。每個段在內(nèi)存占據(jù)一片連續(xù)的空間。第69頁,共108頁,2023年,2月20日,星期六分段基本原理內(nèi)存分配與回收分段管理中,內(nèi)存的最小分配對象是段,特別地是為每個段分配各自的連續(xù)空間,在內(nèi)存里段和段之間可以不連續(xù)。分配算法與可變分區(qū)的分配算法相似,可以采用最佳適應(yīng)法、最壞適應(yīng)法和首次適應(yīng)法等分配算法。顯然仍然要解決外碎片的問題。第70頁,共108頁,2023年,2月20日,星期六分段基本原理內(nèi)存分配的數(shù)據(jù)結(jié)構(gòu)要采用空閑區(qū)鏈表,為了提高內(nèi)存的利用率,必須實施內(nèi)存碎片拼接的方案,內(nèi)存碎片拼接的時機可以在分配時刻或回收時刻??梢岳斫夥侄喂芾砑夹g(shù)繼承了可變分區(qū)管理技術(shù),但管理上要比可變分區(qū)更復(fù)雜。例如可變分區(qū)管理以進程為內(nèi)存分配的最小對象,為一個進程只進行一次分配工作;而分段管理以段為內(nèi)存分配的最小對象,為一個進程的每個段要進行一次分配工作。第71頁,共108頁,2023年,2月20日,星期六分段基本原理地址映射從前面論述中,知道進程被分成若干個邏輯段,每個段在內(nèi)存中占據(jù)一片連續(xù)的空間,內(nèi)存分配可以按可變分區(qū)的算法,必須進行外碎片拼接。那么采用靜態(tài)地址映射還是動態(tài)地址映射呢?答案顯然是必須采用動態(tài)地址映射。否則無法實施外碎片拼接。

地址映射是將邏輯地址轉(zhuǎn)換為物理地址,先研究邏輯地址的構(gòu)成。

第72頁,共108頁,2023年,2月20日,星期六分段基本原理進程的邏輯地址空間在分段存儲管理方式中,段是一組相關(guān)的邏輯信息的集合。每個段都有自己的名字和長度,通常用一個段號來代替段名,每個段都從0開始編址,并采用一段連續(xù)的地址空間,段的長度由相應(yīng)的邏輯信息組的長度決定。分段系統(tǒng)中的邏輯地址由段號s和段內(nèi)地址d組成,是一個二維地址(s,d)。是程序員負責安排的地址。第73頁,共108頁,2023年,2月20日,星期六由于分段的進程邏輯地址空間是二維的,所以分段的地址映射在于如何把二維段地址結(jié)構(gòu)動態(tài)地變成一維的內(nèi)存地址結(jié)構(gòu)。內(nèi)存分配時,是為任何一個段分配一個連續(xù)的內(nèi)存片,一個段內(nèi)的所有邏輯地址在該內(nèi)存片中的順序仍然不變。假設(shè)段的物理起始地址是a,由于段的起始邏輯地址是0,邏輯地址中作為偏移地址,加上段物理起始地址就是所求的物理地址。所以邏輯地址為x的單元其物理地址為a+x。第74頁,共108頁,2023年,2月20日,星期六現(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)存時,是隨機為一個段分配空間,所以s和a之間第75頁,共108頁,2023年,2月20日,星期六不會存在某種線性函數(shù)關(guān)系,即不可能用數(shù)值計算的方法求解。但是段號s和段物理起始地址a之間確實存在著一一對應(yīng)的關(guān)系,可以用一個表(段表)保存這個關(guān)系,根據(jù)表的起始地址和s找該段的起始物理地址a。然后計算a+d得到所要的物理地址。操作系統(tǒng)每個進程建立一個表,保存其段號s和段物理起始地址a之間的關(guān)系,稱為段表。第76頁,共108頁,2023年,2月20日,星期六在查表中仍然要防止地址越界的問題。所以表中除了段物理起始地址外,還要保存段的長度值。硬件上要提供相應(yīng)的段表控制寄存器,當進程切換時,操作系統(tǒng)把新進程PCB中的段表起始地址和段表長度值寫入段表控制寄存器中,進程訪問內(nèi)存時,按照段表控制寄存器找段表,通過查表找段的物理起始地址。第77頁,共108頁,2023年,2月20日,星期六地址映射

段號段內(nèi)地址段表始址邏輯地址(2,100)>=段號越界中斷

+1K5002006000123基址段號段長物理地址8292段式存儲的地址變換機構(gòu)2100+6K8K9K4Kyn>=yn段內(nèi)地址越界段表長度4第78頁,共108頁,2023年,2月20日,星期六段的共享和保護 段的共享段的共享是指兩個以上的進程,使用同一個子程序或數(shù)據(jù)段,而在內(nèi)存中只保留該信息的一個副本。具體地說,只需在每個進程的段表中,用相應(yīng)的表項裝入共享段在內(nèi)存的起始地址即可。第79頁,共108頁,2023年,2月20日,星期六內(nèi)存保護分段管理優(yōu)點之一就是方便內(nèi)存保護。前面看到怎樣進行地址越界保護,它只是內(nèi)存保護的一部分,為了實施訪問權(quán)限保護,在段表中再增加訪問權(quán)限字段,每個進程訪問該段時還要進行訪問權(quán)限檢查,符合的才允許訪問,否則拒絕訪問。第80頁,共108頁,2023年,2月20日,星期六段的共享與保護

例子:有一個多用戶系統(tǒng),可以容納40個用戶,他們都執(zhí)行一個文本編輯程序,如果文本編輯程序有160K的代碼和40K的數(shù)據(jù)區(qū),則需要: (160+40)*40=8M的內(nèi)存空間,如果160K的代碼是可重入的,則在內(nèi)存中只保存一個副本就可以了,則需要:160+40*40=1760K內(nèi)存空間。第81頁,共108頁,2023年,2月20日,星期六段的共享與保護進程1頁表ed1ed2…ed40data1data10…ed1ed2…ed40data1data10…2122…606170…2122…607180…進程2頁表ed1ed2…ed40data1data10…主存editordata1data1data10……212260617007180editordata1段長16016040基址8080380editordata1data140240…80420240280380進程1進程2段表(a)分頁系統(tǒng)中共享editor示意圖(b)分段系統(tǒng)中共享editor示意圖分頁與分段分配方式共享代碼段的比較進程1頁表ed1ed2…ed40data1data10…ed1ed2…ed40data1data10…2122…606170…2122…607180…進程2頁表ed1ed2…ed40data1data10…主存data1data10……212260617007180第82頁,共108頁,2023年,2月20日,星期六引入分段的理由:邏輯上的完整動態(tài)鏈接信息共享信息保護第83頁,共108頁,2023年,2月20日,星期六分頁和分段的區(qū)別:頁的大小是固定的,頁的長度是由內(nèi)存塊長度決定的。段的長度是可變的,段的長度是由信息的長度決定的;分頁的邏輯地址空間是一維的,分段的邏輯地址空間是二維的;分頁存在內(nèi)碎片,分段存在外碎片;第84頁,共108頁,2023年,2月20日,星期六邏輯地址第85頁,共108頁,2023年,2月20日,星期六分頁第86頁,共108頁,2023年,2月20日,星期六分段第87頁,共108頁,2023年,2月20日,星期六7.3.3段頁式存儲管理方式分頁存儲管理能有效地提高內(nèi)存的利用率,分段存儲管理能很好地滿足用戶的需要,段頁式存儲管理則是分頁和分段兩種存儲管理方式的結(jié)合,它同時具備了兩者的優(yōu)點。也繼承了兩者的缺點。第88頁,共108頁,2023年,2月20日,星期六

分段和分頁都有各自的優(yōu)勢。分頁對程序員來說是透明的,它消除了外部碎片,因而可以更有效地使用主存。它具有處理不斷增長的數(shù)據(jù)的能力。分段是由程序員決定的,對段的共享及保護操作容易,支持動態(tài)鏈接等優(yōu)勢。把它們二者的優(yōu)點結(jié)合起來,就形成了非常具有優(yōu)勢的“段頁式存儲管理”方式。第89頁,共108頁,2023年,2月20日,星期六7.3.3.1段頁式管理原理程序員仍然按分段編程,邏輯地址是二維地址(段號,段內(nèi)地址)。操作系統(tǒng)仍對內(nèi)存用戶區(qū)實施分塊,物理地址由塊號和塊內(nèi)地址組成(塊號,塊內(nèi)地址)。操作系統(tǒng)對進程以段為單位進行分頁,一個段被分成若干頁,每一頁剛好占一個內(nèi)存塊,內(nèi)存里段和段之間可以不連續(xù),一個段內(nèi)的頁和頁之間也可以不連續(xù)。第90頁,共108頁,2023年,2月20日,星期六7.3.3.1段頁式管理原理內(nèi)存分配和回收雖然名叫段頁式,其實內(nèi)存并沒有段的影子只有大小相同的塊,塊長度決定了頁的長度。所以內(nèi)存分配和回收與分頁式管理是一樣的。內(nèi)存分配和回收操作簡單,內(nèi)存的利用率比分頁式稍低一些,因為每一段的最后一頁會有內(nèi)碎片。這是繼承了分頁式的優(yōu)點。第91頁,共108頁,2023年,2月20日,星期六7.3.3.1段頁式管理原理地址映射首先研究邏輯地址在段頁式中的變化。程序員編程時仍然是分段編程,所以邏輯地址仍是二維的,即段號和段內(nèi)地址。操作系統(tǒng)以段為單位分頁,就把段內(nèi)地址分成兩部分,即頁號和頁內(nèi)地址,這樣,邏輯地址變成(段號,頁號,頁內(nèi)地址)。再來看物理地址,物理地址是(塊號,塊內(nèi)地址),因為一塊正好裝入一頁,所以,頁第92頁,共108頁,2023年,2月20日,星期六7.3.3.1段頁式管理原理內(nèi)地址就等于塊內(nèi)地址。下面就要考慮段號和頁號與塊號之間的聯(lián)系。因為以段為單位分頁,所以每個段都要一個頁表,頁表每項裝入對應(yīng)的塊號;每個進程分多個段,一個進程設(shè)置一個段表。段表項目內(nèi)容與分段式中的段表內(nèi)容不同,為了檢查地址越界,一個段表項至少包括頁表的長度和頁表的起始地址。第93頁,共108頁,2023年,2月20日,星期六7.3.3.1段頁式管理原理

主程序段04K8K12K15K16K子程序段04K8K數(shù)據(jù)段04K8K12K10K(a)一個進程地址空間的結(jié)構(gòu)段號(s)段內(nèi)頁號(p)頁內(nèi)偏移量(d)(b)段頁式地址結(jié)構(gòu)的組成圖7.2進程地址空間和地址結(jié)構(gòu)第94頁,共108頁,2023年,2月20日,星期六段頁式分配的地址變換圖解

>=越界中斷

+段頁式存儲的地址變換機構(gòu)0123基址段號2頁表長度頁表+B1塊號頁號0123>=塊內(nèi)地址塊號段號2頁號2頁內(nèi)地址d段表地址段表長度段內(nèi)地址YNYN第95頁,共108頁,2023年,2月20日,星期六7.3.3.1段頁式管理原理從地址映射看到,為了計算內(nèi)存物理地址需要兩次訪問內(nèi)存(段表,頁表),顯然增加執(zhí)行一條指令的時間,使進程執(zhí)行時間延長,這是段頁式管理天生缺陷,為了提高訪問內(nèi)存的速度,可以用增加快表的方法,利用高速緩沖內(nèi)存存放段表和頁表的子集,縮短計算物理地址的時間。第96頁,共108頁,2023年,2月20日,星期六7.3.3.1段頁式管理原理內(nèi)存共享和保護段頁式管理吸取了分段式管理和分頁式管理的優(yōu)點,可以說在內(nèi)存分配回收方面吸取了分頁管理的優(yōu)點,在內(nèi)存共享和保護方面吸取了分段式管理的優(yōu)點。段頁式管理的內(nèi)存保護除了前面講的地址越界保護外,還有訪問權(quán)限保護。這可通過在段表中增加保護字段實現(xiàn)。第97頁,共108頁,2023年,2月20日,星期六7.3.3.2段頁式的實例

Pentium的虛擬存儲器采用段頁式存儲管理Pentium虛擬存儲器的核心是兩張表:LDT(局部段描述符表)和GDT(全局段描述符表)。每個進程都有自己的LDT,一臺計算機上的所有進程共享一個GDT。LDT描述每個

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論