第七章 實存管理技術_第1頁
第七章 實存管理技術_第2頁
第七章 實存管理技術_第3頁
第七章 實存管理技術_第4頁
第七章 實存管理技術_第5頁
已閱讀5頁,還剩99頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

靜態重定位是由專門設計的重定位裝配程序來完成的,是在目標程序裝入到內存區時由裝配程序來完成地址轉換。優點:無需增加地址轉換機構

缺點:不能實現重新分配內存

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

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

Load#1,450…………35000100450……Load#1,2450……3500………………2100操作系統20002450邏輯地址物理地址圖7-2靜態地址映射3.動態重定位動態重定位是在目標程序執行過程中,在CPU訪問內存之前,由硬件地址映射機構來完成將要訪問的指令或數據的邏輯地址向內存的物理地址的轉換。優點:內存的使用更加靈活有效;幾個作業共享一程序段的單個副本比較容易;無需用戶干預,由系統來負責全部的存儲管理。缺點:需附加硬件支持;實現存儲器管理的軟件比較復雜。Load#1,450…………35000100450……Load#1,450……3500………………2100操作系統20002450邏輯地址物理地址圖7-3動態地址映射基址寄存器2000+7.2連續分配方式7.2.1單一連續分配方式7.2.2固定分區內存管理方式7.2.3可變分區內存管理方式7.2.1單一連續分配方式在單任務的操作系統條件下,讓用戶占用計算機所有資源,內存管理采用單一連續分配方式。內存被分成兩個區1.系統區供操作系統使用2.用戶區供用戶放一個程序操作系統區用戶區……7.2.2固定分區內存管理方式分區管理是滿足多道程序設計的一種最早采用的存儲管理方法。其基本原理是給每一個進程在內存中劃分一塊可用的存儲區,連續存儲各進程的程序和數據,使各進程能并發進行。

內存分配算法:(1)首次適應法空閑分區按物理地址為升序排列,在內存現有空閑分區中,找到第一個可用的分區就分配。(2)最佳適應法在內存現有的空閑分區中,找一個浪費最小的分區分配。

(3)最壞適應法在現有內存空閑區中,找一個浪費最大的分區分配。(4)唯一最佳分配法作業按長度分類排隊,一個分區對應一個隊,使這個隊中每個作業的長度小于等于分區的長度,使分配后內存浪費最小。從整體上看,這個算法也不是最佳的。

固定分區法

固定分區法就是把內存固定劃分為若干個不等的區域,劃分的原則由系統決定。在整個執行過程中保持分區長度和分區個數不變。操作系統為每個用戶作業分配一個分區。

內存管理

:分區號起始地址長度狀態進程名管理數據結構:設置內存分配表內存分配:每個區分配一個進程內存回收:簡單缺點:內存利用率不高如何記錄系統的狀況呢?分配策略

分區4分區3分區2分區1操作系統0100K200K400K700K1300K多個輸入隊列分區4分區3分區2分區1操作系統0100K200K400K700K1300K單個輸入隊列(a)唯一最佳分配算法(b)其他分配算法固定分區

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

分區號分區長度分區首址分區狀態

120KB20KB已分配

232KB40KB已分配

364KB72KB已分配

4128KB138KB未分配內存分區管理表地址映射對于固定分區,可以采用靜態地址映射也可以采用動態地址映射。內存保護可以采用界限寄存器法,用兩個寄存器分別放用戶區的首地址和用戶的長度。用戶程序訪問內存的地址必須在這個范圍內,否則就是地址越界。7.2.3可變分區內存管理方式

可變分區法

動態分區分配是根據進程的實際需要,動態地為它分配連續的內存空間,各個分區是在相應進程裝入內存時建立的,其大小恰好等于進程的大小。

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

例:現在有三個作業A(20KB),B(80KB),C(50KB),內存有兩個空閑區F1(110KB),F2(60KB)。首次適應法(設F1的首址<F2的首址)

A(占20KB)

B(占80KB)

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

)F2(50KB,10KB

)

首次適應法(設F1的首址>F2的首址)

A(20KB)

B(80KB)最壞適應法

A(20KB)

B(80KB)

C(50KB)F2(20KB,40KB)F1(80KB,30KB)F1(100KB,10KB

)F2(50KB,10KB

)

最佳適應法

A(20KB)

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

)F1(80KB,30KB

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

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

物理地址(2)用戶進程的邏輯空間也按內存塊的大小分頁,每頁也按邏輯地址由小到大編號稱為頁號。假設一個進程有61個字節,以每頁8個字節分頁,分成8頁,如圖所示:000000000000000001000000010000000…000000111000001000000001001000001…000001111………000111000000111001000111010000111101

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

邏輯地址………

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

p=AdivLd=AmodL

因為L=2m,所以p是A邏輯右移m位后的結果,d是A邏輯右移m位時,移出去的m位值。用匯編語言整數除法指令很容易描述,以A作為被除數,以L作為除數,商就是頁號,余數就是頁內地址。其實不用對邏輯地址移位,也不用對邏輯地址做除法,在工程上直接根據頁長的位數,將邏輯地址一分為二,高位部分是頁號,低位部分是頁內地址(頁內偏移)。

內存空間分配與回收

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

假定系統有m*n個內存塊(m行n列),用m*n的位圖表示:

0

1

2

3

4

5...3031323334353637...6263646566676869...949596979899100101…126127128129130131132133…158159160161162163164165…190191192193194195196197…222223224225226227228229…254255

012345...3031

01234567

在程序語言中用二維數組表示這個位圖,每個元素的長度是一個二進制位,用一個數組元素表示一個內存塊。 數組元素值表示對應的內存塊的狀態(空閑或占用)數組元素的下標映射內存塊的起始地址。 從分頁原理可知,內存塊的起始地址等于內存塊號乘以頁長,在此頁長是個常數,用元素的下標值映射內存塊號。塊號左移就可獲得塊的起始地址。假設i和j分別代表數組元素的行、列下標。

B=i*n+j例:n=32,m=8,i=3,j=5B=i*n+j=3*32+5=101分配時遍歷數組,找到元素值是0的元素,再根據該元素的下標計算內存塊塊號B。分配后,將該元素值更改為1。

分配原則:設系統有m個空閑內存塊,進程申請n塊,如m>=n就分配,即要求進程一次性的裝入內存,不論這些塊在內存中是否連續。一個進程裝入內存后,可以離散分布在各個內存塊中,進程不需要操作系統為它分配一個連續的內存區。這正是分頁管理與分區管理的根本區別。

設k是系統當前的空閑塊數,n是進程的頁數,分配算法可以用N-S流程圖表示為:TTFF

k>=n

nx;q=&a[0][0];B=0;當x>0*q==0(未分配)分配*q=1,填寫頁表記錄塊號B,x--,k--修改q++;B++不分配

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

i=Bdivnj=Bmodn

例:B=197,n=32i=Bdivn=197div32=6j=Bmodn=197mod32=5計算出內存塊對應的行和列下標后,就可以訪問數組,把該元素的值修改為0,系統空閑內存塊數自增1,這個內存塊就被系統收回;進程如占有n塊,就把這個過程重復n次。地址映射地址映射是將邏輯地址轉換成真實的物理地址。由于內存的一塊恰好裝入一頁,頁內地址與塊內地址一一對應。邏輯地址是(p,d)物理地址是(B,d)現在的問題是已知p,求B。因為進程的一頁可以裝入內存的任何一塊中,p和B之間不存

在一種可計算的線性函數。但是存在每頁對應一個內存塊的關系。一個顯而易見的方法是建立一張表(頁表),表中每行代表一頁,每行的序號代表頁號,通過這張表描述頁號與塊號的關系。地址映射的工作是用頁號p查表,找到對應的塊號B,再用B與頁內地址d計算物理地址。為了提高地址映射的效率,需要硬件的支持。在CPU中設立頁表控制寄存器(其中包含頁表長度L和頁表起始地址a)。頁表每個進程都有自己的一張頁表,頁表的起始地址和長度記錄在PCB中。當進程由就緒態變成執行態時,由操作系統根據進程的PCB將進程頁表的起始地址和頁表長度填入CPU頁表控制寄存器。pdLap<L

BBdp+ap+a越界中斷nya邏輯地址頁表寄存器頁表物理地址由于頁表是駐留在內存的某個固定區域中,而取數據或指令又必須經過頁表變換才能得到實際物理地址。因此,取一個數據或指令至少要訪問內存兩次以上。一次訪問頁表以確定所取數據或指令的物理地址,另一次是根據地址取數據或指令。這比通常執行指令的速度慢了一倍。

提高查找速度一個最快的辦法就是把頁表放在寄存器中而不是內存中,但由于寄存器價格太貴,這樣做是不可取的。另一種辦法是在地址變換機構中加入一個高速聯想存儲器,構成一張快表。在快表中,存入那些當前執行進程中最常用的頁號與所對應的塊號,從而以提高查找速度。(2)快表的地址轉換由于在某段時間內執行程序時,是在一個范圍內逐條順序執行指令;數組一類數據結構在內存占據一片連續存儲空間,訪問數組時也是在數組范圍內訪問,所以快表的命中率可達到80%到90%。CPU存取一個數據的平均時間為:T=命中率×(訪內時間+訪cache時間)+非命中率×(2×訪內時間+訪cache時間)例:訪內時間是100ns,訪cache時間是20ns,訪cache命中率是85%計算CPU存取一個數據的平均時間。T=0.85*(100+20)+0.15*(200+20)=135ns

頁的共享和保護

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

頁共享與保護進程1頁表1ed1ed2…ed40data1data10…ed1ed2…ed40data1data10…2122…606170…2122…607180…進程2頁表2ed1ed2…ed40data1data10…主存data1data10……212260617007180分頁系統中共享editor示意圖7.3.2分段式存儲管理方式其實程序在邏輯上是分成不同段的,每個段具有其獨特的性質,例如一個代碼段是只執行的,一個數據段只允許讀,另一個數據段可允許讀和寫。顯然,如以段作為內存分配的最小單位,這便于對各個段實施控制和保護。這些段的長度可以不同,段和段在內存中也可以不連續。每個段在內存占據一片連續的空間。分段基本原理內存分配與回收分段管理中,內存的最小分配對象是段,特別地是為每個段分配各自的連續空間,在內存里段和段之間可以不連續。分配算法與可變分區的分配算法相似,可以采用最佳適應法、最壞適應法和首次適應法等分配算法。顯然仍然要解決外碎片的問題。分段基本原理內存分配的數據結構要采用空閑區鏈表,為了提高內存的利用率,必須實施內存碎片拼接的方案,內存碎片拼接的時機可以在分配時刻或回收時刻。可以理解分段管理技術繼承了可變分區管理技術,但管理上要比可變分區更復雜。例如可變分區管理以進程為內存分配的最小對象,為一個進程只進行一次分配工作;而分段管理以段為內存分配的最小對象,為一個進程的每個段要進行一次分配工作。分段基本原理地址映射從前面論述中,知道進程被分成若干個邏輯段,每個段在內存中占據一片連續的空間,內存分配可以按可變分區的算法,必須進行外碎片拼接。那么采用靜態地址映射還是動態地址映射呢?答案顯然是必須采用動態地址映射。否則無法實施外碎片拼接。

地址映射是將邏輯地址轉換為物理地址,先研究邏輯地址的構成。

分段基本原理進程的邏輯地址空間在分段存儲管理方式中,段是一組相關的邏輯信息的集合。每個段都有自己的名字和長度,通常用一個段號來代替段名,每個段都從0開始編址,并采用一段連續的地址空間,段的長度由相應的邏輯信息組的長度決定。分段系統中的邏輯地址由段號s和段內地址d組成,是一個二維地址(s,d)。是程序員負責安排的地址。由于分段的進程邏輯地址空間是二維的,所以分段的地址映射在于如何把二維段地址結構動態地變成一維的內存地址結構。內存分配時,是為任何一個段分配一個連續的內存片,一個段內的所有邏輯地址在該內存片中的順序仍然不變。假設段的物理起始地址是a,由于段的起始邏輯地址是0,邏輯地址中作為偏移地址,加上段物理起始地址就是所求的物理地址。所以邏輯地址為x的單元其物理地址為a+x

。現在已知邏輯地址(s,d),怎樣計算它在內存的物理地址?與分頁管理的分析一樣,關鍵是找到邏輯地址與物理地址之間的映射關系。由于每個段在內存是連續的,可以將段的物理地址看成是由基址和偏移地址(a,d)組成,根據前面分析,偏移地址又等于段內地址,關鍵要找s和a的聯系。分配內存時,是隨機為一個段分配空間,所以s和a之間不會存在某種線性函數關系,即不可能用數值計算的方法求解。但是段號s和段物理起始地址a之間確實存在著一一對應的關系,可以用一個表(段表)保存這個關系,根據表的起始地址和s找該段的起始物理地址a。然后計算a+d

得到所要的物理地址。操作系統每個進程建立一個表,保存其段號s和段物理起始地址a之間的關系,稱為段表。在查表中仍然要防止地址越界的問題。所以表中除了段物理起始地址外,還要保存段的長度值。硬件上要提供相應的段表控制寄存器,當進程切換時,操作系統把新進程PCB中的段表起始地址和段表長度值寫入段表控制寄存器中,進程訪問內存時,按照段表控制寄存器找段表,通過查表找段的物理起始地址。地址映射

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

+1K5002006000123基址段號段長物理地址8292段式存儲的地址變換機構2100+6K8K9K4Kyn>=yn段內地址越界段表長度4段的共享和保護

段的共享段的共享是指兩個以上的進程,使用同一個子程序或數據段,而在內存中只保留該信息的一個副本。具體地說,只需在每個進程的段表中,用相應的表項裝入共享段在內存的起始地址即可。內存保護分段管理優點之一就是方便內存保護。前面看到怎樣進行地址越界保護,它只是內存保護的一部分,為了實施訪問權限保護,在段表中再增加訪問權限字段,每個進程訪問該段時還要進行訪問權限檢查,符合的才允許訪問,否則拒絕訪問。段的共享與保護

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

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

主程序段04K8K12K15K16K子程序段04K8K數據段04K8K12K10K(a)一個進程地址空間的結構段號(s)段內頁號(p)頁內偏移量(d)(b)段頁式地址結構的組成圖7.2進程地址空間和地址結構段頁式分配的地址變換圖解

>=越界中斷

+段頁式存儲的地址變換機構0123基址段號2頁表長度頁表+B1塊號頁號0123>=塊內地址塊號段號2頁號2頁內地址d段表地址段表長度段內地址YNYN7.3.3.1段頁式管理原理從地址映射看到,為了計算內存物理地址需要兩次訪問內存(段表,頁表),顯然增加執行一條指令的時間,使進程執行時間延長,這是段頁式管理天生缺陷,為了提高訪問內存的速度,可以用增加快表的方法,利用高速緩沖內存存放段表和頁表的子集,縮短計算物理地址的時間。7.3.3.1段頁式管理原理內存共享和保護段頁式管理吸取了分段式管理和分頁式管理的優點,可以說在內存分配回收方面吸取了分頁管理的優點,在內存共

溫馨提示

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

評論

0/150

提交評論