作業系統實驗記憶體分配

2022-12-19 14:39:06 字數 3219 閱讀 1835

實驗四儲存器管理

一、實驗名稱:儲存器管理

二、實驗目的

在tc、vb、delphi、c++builder等語言與開發環境中,模擬作業系統的記憶體管理;通過程式執行所顯示的記憶體使用的各項指標,加深對記憶體管理的理解。

三、實驗內容

實現主儲存器空間的分配和**。本實驗有兩個題,學生可選擇其中的一題做實驗。第一題:在固定分割槽管理方式下實現主存分配和**。

第二題:在可變分割槽管理方式下採用最先適應演算法實現主存分配和實現主存**。[提示]:

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

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

第一欄第二欄

起址14 k32 k

長度12 k96 k

狀態未分配未分配空表目空表目

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

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

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

的區域是空閒區;另一種是「空表目」狀態,表示表中對應的登記專案是空白(無效),可用來登記新的空閒區(例如,作業撤離後,它所佔的區域就成了空閒區,應找乙個「空表目」欄登記歸還區的起址和長度且修改狀態)。由於分割槽的個數不定,所以空閒區說明表中應有適量的狀態為「空表目」的登記欄目,否則造成**「溢位」無法登記。

空閒區表的定義為:

#define m 10/*假定系統允許的空閒區表最大為m*/struct

free_table[m];/*空閒區表*/

上述的這張說明表的登記情況是按提示(1)中的例所裝入的三個作業占用的主存區域後填寫的。

(2)當有乙個新作業要求裝入主存時,必須查空閒區說明表,從中找出乙個足夠大的空閒區。有時找到的空閒區可能大於作業需要量,這時應把原來的空閒區變成兩部分:一部分分給作業占用;另一部分又成為乙個較小的空閒區。

為了儘量減少由於分割造成的空閒區,而盡量儲存高位址部分有較大的連續空閒區域,以利於大型作業的裝入。為此,在空閒區說明表中,把每個空閒區按其位址順序登記,即每個後繼的空閒區其起始位址總是比前者大。為了方便查詢還可使**「緊縮」,總是讓「空表目」欄集中在**的後部。

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

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

由於本實驗是模擬主存的分配,所以把主存區分配給作業後並不實際啟動裝入程式裝入作業,而用輸出「分配情況」來代替。最先適應分配演算法如圖3-1。

圖3-1最先適應分配模擬演算法

(4)當乙個作業執行結束撤離時,作業所佔的區域應該歸還,歸還的區域如果與其它空閒區相鄰,則應合成乙個較大的空閒區,登記在空閒區說明表中。例如,在提示(1)中列舉的情況下,如果作業2撤離,歸還所佔主存區域時,應與上、下相鄰的空閒區一起合成乙個大的空閒區登記在空閒區說明表中。歸還主存時的**演算法如圖3-2。

圖3—2主存**演算法

(5)請按最先適應演算法設計主存分配和**的程式。然後按(1)中假設主存中已裝入三個作業,且形成兩個空閒區,確定空閒區說明表的初值。現有乙個需要主存量為6k的作業4申請裝入主存;然後作業3撤離;再作業2撤離。

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

第一題#include ""#include ""#include ""#define n 5

struct table;

int k[n]=;

void display(table a[n]);void hs(table a[n]);void fp(table a[n]);

void main()if(j==n)printf("\n所需分割槽太大不能分配,請重新申請。\n\n");elsedisplay(a);}

void display(table a[n])}

第二題#include ""#include ""#include ""

#define n 10 /*假定系統允許的最大作業為,假定模擬實驗中n值為10*/

#define m 10/*假定系統允許的空閒區表最大為m,假定模擬實驗中m值為10*/#define minisize 100structused_table[n]; /*已分配區表*/

structfree_table[m]; /*空閒區表*/

allocate(char j,float xk)

/*採用最優分配演算法分配xk大小的空間*/

/*找到可用空閒區,開始分配:若空閒區大小與要求分配的空間差小於msize大小,則空閒區全部分配;若空閒區大小與要求分配的空間差大於minisize大小,則從空閒區劃出一部分分配*/if(free_table[k].length-xk<=minisize)else

/*修改已分配區表*/i=0;

while(used_table[i].flag!=0&&iif(i>=n) /*無表目填寫已分分割槽*/}else

return 1;

}/*主存分配函式結束*/

reclaim(char j)

/***作業名為j的作業所佔主存空間*/

/*修改已分配表*/used_table[s].flag=0;

/*取得歸還分割槽的起始位址s和長度l*/s=used_table[s].address;l=used_table[s].length;j=-1;k=-1;i=0;

/*尋找**分割槽的空閒上下鄰,上鄰表目k,下鄰表目j*/while(iif(free_table[i].flag==1)i++;}

if(k!=-1)if(j!=-1)

/*上鄰空閒區,下鄰空閒區,三項合併*/else

/*上鄰空閒區,下鄰非空閒區,與上鄰合併*/free_table[k].length=free_table[k].length+l;else if(j!=-1)

/*上鄰非空閒區,下鄰為空閒區,與下鄰合併*/else

/*上下鄰均為非空閒區,**區域直接填入*/

free_table[t].address=s;free_table[t].length=l;free_table[t].flag=1;}

return 0;

}/*主存**函式結束*/

void main( )/*case*/}/*while*/}/*主函式結束*/

作業系統程序分配

5.1 實驗目的 熟悉sql的資料控制功能,能夠使用sql語句來向使用者授予和收回許可權。5.2 實驗內容 1 使用grant語句來對使用者授權,對單個使用者或多個使用者授權,或使用保留字public對所有使用者授權。對不同的操作物件包括資料庫 檢視 基本表等進行不同許可權的授權。2 使用with ...

作業系統實驗

1.共享記憶體的通訊方式 1 2.訊息佇列的通訊方式 3 迴圈從訊息佇列中接收訊息,讀入end結束接收 43.管道通訊 6 4.訊號機制 7 5.兩個執行緒的同步。posix的無名訊號量機制 96.system r訊號量機制實現同步 117.使用訊號量保證語句沒有交叉 16 1 如下 共享記憶體的傳...

作業系統實驗任務書 4 記憶體管理 虛擬儲存

瀋陽工程學院 學生實驗任務書 實驗室名稱 計算機實驗室實驗課程名稱 作業系統實驗專案名稱 儲存管理 2 一 實驗目的 儲存管理的主要功能之一是合理地分配空間。請求頁式管理是一種常用的虛擬儲存管理技術。本實驗的目的是通過請求頁式管理中頁面置換演算法模擬設計,了解虛擬儲存技術的特點,掌握請求頁式儲存管理...