模擬主儲存器最先適應演算法

2021-10-01 20:34:49 字數 2859 閱讀 6424

問題背景

乙個好的計算機系統不僅要有乙個足夠容量的、訪問速度高的、穩定可靠的主儲存器,而且要能合理地分配和使用這些儲存空間。當使用者提出申請儲存器空間時,儲存管理必須根據申請者的要求,按一定的策略分析主存空間的使用情況,找出足夠的空閒區域分配給申請者。當作業撤離或主動歸還主存資源時,則儲存管理要收回作業占用的主存空間或歸還部分主存空間。主存的分配和**的實現與主儲存器的管理方式有關的,通過本實驗幫助學生理解在可變分割槽管理方式下應怎樣實現主存空間的分配和**。

模擬在可變分割槽管理方式下採用最先適應演算法實現主存分配和**。

(1)可變分割槽方式是按作業需要的主存空間大小來分割分割槽的。當要裝入乙個作業時,根據作業需要的主存量檢視是否有足夠的空閒空間,若有,則按需要量分割乙個分割槽分配給該作業;若無,則作業不能裝入。隨著作業的裝入、撤離,主存空間被分成許多個分割槽,有的分割槽被作業占用,而有的分割槽是空閒的。例如:

作業系統

作業1作業3

空閒區作業2

空閒區為了說明哪些區是空閒的,可以用來裝入新作業,必須要有一張空閒區說明表,格式如下:

起    址	長    度	狀      態
第一欄 14 k 12 k 未 分 配

第二欄 32 k 96 k 未 分 配

其中,起址——指出乙個空閒區的主存起始位址。

長度——指出從起始位址開始的乙個連續空閒的長度。

狀態——有兩種狀態,一種是「未分配」狀態,指出對應的由起址指出的某個長度的區域是空閒區。

(2) 當有乙個新作業要求裝入主存時,必須查空閒區說明表,從中找出乙個足夠大的空閒區。有時找到的空閒區可能大於作業需要量,這時應把原來的空閒區變成兩部分:一部分分給作業占用;另一部分又成為乙個較小的空閒區。為了儘量減少由於分割造成的空閒區,而盡量儲存高位址部分有較大的連續空閒區域,以利於大型作業的裝入。為此,在空閒區說明表中,把每個空閒區按其位址順序登記,即每個後繼的空閒區其起始位址總是比前者大。

(3) 採用最先適應演算法(順序分配演算法)分配主存空間。

按照作業的需要量,查空閒區說明表,順序檢視登記欄,找到第乙個能滿足要求的空閒區。當空閒區大於需要量時,一部分用來裝入作業,另一部分仍為空閒區登記在空閒區說明表中。

由於本實驗是模擬主存的分配,所以把主存區分配給作業後並不實際啟動裝入程式裝入作業,而用輸出「分配情況」來代替。

(4) 當乙個作業執行結束撤離時,作業所佔的區域應該歸還,歸還的區域如果與其它空閒區相鄰,則應合成乙個較大的空閒區,登記在空閒區說明表中。

(5) 請按最先適應演算法設計主存分配和**的程式。假設初始時主存中沒有作業,現按下面序列進行記憶體的申請與釋放:

作業1申請300k,作業2申請100k,作業1釋放300k,作業3申請150k,

作業4申請30k, 作業5申請40k, 作業6申請60k, 作業4釋放30k。

請你為它們進行主存分配和**,把空閒區說明表的初值以及每次分配或**後的變化顯示出來或列印出來。

#include

#include

#include

using namespace std;

#include

struct task

task

(string name,

int size)

bool operator ==

(task &b)}}

;struct node

bool operator<

(node a)

return false;}}

;class freetable

void

printinfo()

}}private:

vectorv;

friend class memery;};

class memery

void

distribution

(task &task)

}sort

(f.v.

begin()

,f.v.

end())

; v.

push_back

(task)

;return;}

else

if(v[i]

.m_size == task.m_size)

else

} cout <<

"記憶體不足,無法分配空間"

<< endl;}}

void

recycling

(task & task)

else

if(task.st == f.v[j]

.m_start + f.v[j]

.m_size)

else}}

f.v.

push_back

(node

(task.st, task.m_size, false));

sort

(f.v.

begin()

, f.v.

end())

; v.

erase

(v.begin()

+ i)

;return;}

}}}void

printinfomemery()

}else

}void

printfreetable()

private:

vectorv;

int start;

int end;

freetable f;};

intmain()

實驗結果

最先適應分配演算法

1 執行結果 假設記憶體中已裝入三個作業,且形成三個空閒區,記憶體使用情況如圖4.3所示。現有40k大小的作業a申請裝入記憶體 作業a執行完畢後撤離系統。執行可變分割槽儲存管理模擬程式進行記憶體分配和 將空閒區表和已分配區表的初值以及每次分配或 後的變化顯示輸出。圖4.3 記憶體使用情況 可變分割槽...

模擬首次適應(First Fit)演算法

首次適應演算法 ff first fit 基本思想 要求空閒分割槽按位址遞增的次序排列。當進行記憶體分配時,從空閒區表頭開始順序查詢,直到找到第乙個能滿足其大小要求的空閒區為止。分一塊給請求者,餘下部分仍留在空閒區中。include include include include define nu...

頁式虛擬儲存器模擬 換熱器相關模擬簡述

換熱器是一種很常見的工程裝置,分類方式很多,種類也很多。典型種類有管殼式換熱器 板式換熱器 螺旋板式換熱器 套管換熱器 板翅式換熱器 熱管換熱器以及空氣冷卻器等,這些在工程模擬中也是非常常見的。對於這類換熱器的模擬,主要難點在於物理問題的簡化 數值模型的設定。模擬過程中有幾點需要注意 換熱器是在具有...