1. 程式人生 > >作業系統——分割槽儲存管理

作業系統——分割槽儲存管理

分割槽儲存管理是把主儲存器中的使用者區作為一個連續區或分成若干個連續區進行管理,每個連續區中可裝入一個作業。

多道程式系統一般都採用多個分割槽的儲存管理,具體可分為固定分割槽和可變分割槽兩種方式。

一、固定分割槽儲存管理

把主存中可分配的使用者區域預先劃分成若干個連續的分割槽,每個連續區的大小可以相同,也可以不同。但是,一旦劃分好分割槽之後,主存中分割槽的個數就固定了,且每個分割槽的大小也固定不變。這是一種靜態分割槽法。

在固定分割槽方式管理下,每個分割槽用來裝入一個作業。由於主存中有多個分割槽,就可同時在每個分割槽中裝入一個作業。所以,這種儲存管理方式適用於多道程式系統。

1、主存空間的分配與釋放

為了管理主存空間的使用,必須設定一張“主存分配表”(分割槽說明表),以說明各分割槽的分配情況。主存分配表中應指出各分割槽的起始地址和長度,併為每個分割槽設一個標誌位。當標誌位為“0”時,表示對應的分割槽是空閒分割槽,當標誌位為非“0”時,表示對應的分割槽已被某作業佔用。空閒分割槽可以用來裝作業。

當作業佇列中有作業要裝入主存時,儲存管理可採用“順序分配演算法”進行主存空間的分配。
順序檢視主存分配表,找到一個標誌為“0”的並且長度大於或等於欲裝入作業的地址空間長度的分割槽,則把此分割槽分配給該作業,相應表目的標誌位改成作業名的標識;若找不到一個這樣的空閒分割槽,則該作業暫時不能裝入主存。

主存空間的釋放很簡單。某作業執行結束後必須歸還所佔的分割槽,這時儲存管理根據作業名檢視主存分配表,找到相應的表目後,把其中的標誌位重新置成“0”即可。

2、地址轉換

固定分割槽管理方式下作業的地址轉換常採用靜態重定位技術。

3、儲存保護

固定分割槽管理方式下只考慮判斷其實體地址即可。常採用“界限暫存器對”法。
If           下限地址<=實體地址<=上限地址

Then      繼續

Else        產生“越界中斷” ,轉越界中斷的處理子程式

4.記憶體擴充

採用覆蓋技術

5.固定分割槽的優缺點

優點:實現簡單,無外部碎片

缺點:

a.當用戶程式太大時,可能所有的分割槽都不能滿足需求,此時不得不採用覆蓋技術解決,但這又會降低效能

b.會產生內部碎片,碎片大,存在小分割槽佔用大作業的情況,記憶體利用率低。

解決辦法:採用可變分割槽儲存管理

二、可變分割槽儲存管理

記憶體管理的可變分割槽模式,又稱變長分割槽模式、動態分割槽分配模式。這種分配方式不會預先劃分記憶體分割槽,而是在程序裝入記憶體時,根據程序的大小動態地建立分割槽,並使分割槽的大小正好適合程序的需要。因此係統分割槽的大小和數目是可變的。

與固定分割槽的區別就是:動態的劃分分割槽。
克服固定分割槽管理的“內碎片”問題。

1.可變分割槽模式下,剛開始,OS就緒,但任何使用者程式未進入記憶體前整個使用者記憶體區是一大空間。已佔用區和空閒分割槽並不是絕對的。
2.必須有表來記錄分割槽的情況。
3.程式進入記憶體時的例行工作就是分配空閒區和裝入程式,並修改相應的空閒表和已分配區表。
4.一旦一個記憶體分割槽被分配給一個程序,該程序可以被裝入該塊中執行,裝入時需重定位。

可變分割槽分配的資料結構

系統要使用什麼樣的資料結構來記錄記憶體的使用情況?

 

可變分割槽分配演算法

把一個新作業裝入記憶體時,需要按照一定的可變分割槽分配演算法,從空閒分割槽表(或空閒分割槽鏈)中選出一個分割槽分配給該作業。

在可變分割槽分配方式中,當有很多空閒分割槽都滿足需求時,應該使用哪個分割槽進行分配?

這裡介紹三種可變分割槽分配演算法

最先適應分配演算法

演算法思想:每次都從低地址開始查詢,找到第一個能滿足大小的空閒分割槽。

實現步驟:

空閒區地址由低到高排序
=>1.順序查詢各個空閒區,把第一個找到能容納申請要求的記憶體區分配給申請者.(若空閒區比作業長度大,則分割該空閒區。一部分分配給作業一部分空閒。)
=>2.調整相應的空閒分割槽表和已分配分割槽表。

評價:效能一般但實現比較簡單直接,易於釋放時合併相鄰空間分割槽。比較容易的滿足大作業的需要。完成一次分配平均需要的搜尋次數較大,影響了工作效率。

 


儘可能地利用儲存器中低地址的空閒區,而儘量儲存高地址的空閒區。

最佳適應演算法

演算法思想:由於可變分割槽分配是一種連續分配方式,為各程序分配的空間必須是連續的一整片區域。因此為了保證當“大程序”到來時能有連續的大片空間,優先使用更小的空閒區。

實現步驟:

空閒分割槽按容量遞增次序連結。每次分配記憶體時順序查詢空閒分割槽表,找到大小能夠滿足要求的第一個空閒分割槽。
評價:儘可能地保留了較大的空間。 產生大量的不能被使用的很小的空閒區。因此這種方法會產生很多的外部碎片。所以該演算法分配效果不一定是最佳的。

 

儘可能地利用儲存器中小的空閒區,而儘量儲存大的空閒區。

最壞適應演算法

演算法思想:為了解決最佳適應演算法的問題——即留下太多難以利用的小碎片,可以在每次分配時,優先使用最大的連續空閒區,這樣分配後的空閒區就不會太小,更方便使用。

實現步驟:

空閒分割槽按照容量遞減次序連結。每次分配記憶體時順序查詢空閒分割槽表,找到大小能滿足要求的第一個空閒分割槽。

評價:分割後產生的空閒區一般仍可以供以後分配使用。工作一段時間後,不能滿足大作業對空閒區的請求。

儘可能地利用儲存器中大的空閒區。

三種演算法的比較:

 

 

可變分割槽記憶體回收

只比固定分割槽管理增加了合併相鄰空閒區的操作。
主要是為了及時減少“外碎片”,利於今後大作業的到來。
實現回收記憶體空間,關鍵是修改空閒分割槽表和已分配分割槽表。

回收記憶體分割槽時可能會遇到的四種情況:

(a)若釋放區R既有上鄰空閒區,又有下鄰空閒區。將三個空閒區合併成一個大空閒區。

先將R與F2合併記為F2,
再將F2與F1合併記為F1,並將F2從鏈中刪除。


IF     (B+H1=C) AND (C+L2=D)
THEN   修改空閒表,分配表。

(b)若釋放區R只有上鄰空閒區F1。
 則只修改空閒區F1大小即可。

 

 IF     (D+H2=E)
THEN   修改空閒表,分配表。


(c)只有下鄰空閒區

 

修改空閒區F2的首地址。
F2的大小=F2的大小+R的大小

(d)既無上鄰又無下鄰空閒區
Else         修改釋放區的首地址為空閒區的起始地址

地址轉換

動態重定位

分割槽的儲存保護 

     If           下限地址<=實體地址<=上限地址
     Then             繼續
     Else        產生“越界中斷” ,轉越界中斷的處理子程式

記憶體擴充

消除了固定分割槽管理造成的“內碎片”,但是不可避免的在記憶體空間造成“外碎片”。
採用移動(緊縮)技術。定時的或在記憶體緊張時,將記憶體中所有作業移到記憶體的一端,使其相鄰。
經過緊縮後的程序在記憶體中的位置發生了變化,若不對程式和資料的地址進行修改,在程序就無法執行。
要使其執行,必須進行“動態重定位”
注意:
=》緊縮的時機:
      (1)一旦有歸還的分割槽便進行緊縮,系統開銷大。
      (2)分配演算法發現各空閒區不夠用,但其和夠用時。此法緊縮開銷小,更實用。因此,實際的可變分割槽分配演算法比固定分割槽分配演算法主要增加了“緊縮”操作

&n