作業系統實驗可變分割槽儲存管理

2021-04-11 19:20:42 字數 2492 閱讀 2876

學時:4學時

⒈ 實驗內容

主儲存器空間分配實驗。

⒉ 實驗目的

通過首次適應演算法、最佳適應演算法和最壞適應演算法實現主存空間的分配,可以使讀者可好地理解儲存分配演算法。

⒊ 實驗題目

編寫一段程式來模擬可變分割槽管理方法。要求能通過檔案形式定義空閒區表;能隨意輸入作業及需要分配的空間;能分別使用首次適應演算法、最佳適應演算法和最壞適應演算法對輸入的作業進行空間分配;能顯示系統空閒表和已分配空間表。

⒋ 實驗提示

⑴可變分割槽方式是按作業需要的主存空間大小來分割槽。當裝入乙個作業時,首先要檢視是否有足夠的空閒空間來分配,若有則按指定的分配方式進行分配;否則作業不能裝入。隨著作業的裝入和撤離主存空間被分為若干個大大小小的不連續的區間,為了表明各區間的狀態可以用乙個記憶體分割槽表如表1所示來表示。

表1 記憶體分割槽表

這樣我們可以定義乙個如下的結構表示記憶體分割槽資訊。

typedef struct node

job;

⑵可變分割槽的三種演算法就是為作業分配主存空間的方法。

● 首次適應演算法:在空閒區間中查詢滿足作業需要的空間,並將作業裝入第乙個滿足條件的空間中去。

● 最佳適應演算法:在空閒區間中查詢滿足作業需要的空間,並將作業裝入滿足條件的空閒空間中最小的乙個空間中去。

● 最壞適應演算法:在空閒區間中查詢滿足作業需要的空間,並將作業裝入滿足條件的空閒空間中最大的乙個空間中去。

從三種演算法的說明可以看出,分配空間的過程主要可以分兩步:

● 查詢所有滿足作業需求的空間塊。

● 按照指定的演算法將作業裝入空間塊中。

⑶在操作的最初主存空間實際就是乙個大的空閒區,不涉及到如何分配的問題。為直接模擬執行一段時間後主存中出現了多個空閒塊的狀態,題目要求從乙個檔案讀入空閒區表。在這裡我們可以設計乙個空閒區表檔案的結構為如表2所示:

表2 空閒區表

這樣也可以方便地將空閒表一次讀入程式中,而不必再乙個個的輸入。

⑷主要變數及函式說明如表3所示。

表3 變數與函式說明表

5.實驗案例

//動態分割槽演算法memory.c

//執行環境redhad9.0 gcc 4.0

#include

#include

#include

#define maxjob 200定義儲存資料最大值

typedef struct node記憶體塊結構

job;

job frees[maxjob]; //定義空閒區表

int free_quantity空閒區塊數

job occupys[maxjob]; //定義已分配區表

int occupy_quantity已分配區塊數

//初始化函式

void initial()

free_quantity=0

occupy_quantity=0;

}//讀資料函式,從檔案中讀入空閒表的設定

int readdata()

else

return 1;

}return 0;

}//排序空閒表

void sort()

} if(p!=i)}}

//顯示函式

void view()

printf("\nn");

printf("當前已分配表:\n");

printf("起始位址\t長度\t占用作業名\n");

for(i=0;i printf("%8d\t%4d\t%s\n",occupys[i].start,occupys[i].length,occupys[i].tag);

}getchar();

}//最先適應分配演算法

void earliest()

}if(flag==0沒找到滿足的空間

printf("\n當前沒有能滿足你申請長度的空閒記憶體,請稍候再試\n");

}else找到了滿足的空間

t=0;

i=0;

while(t==0)

i++;

} i--;

occupys[occupy_quantity].start=frees[i].start分配滿足條件的空間

strcpy(occupys[occupy_quantity].tag,job_name);

occupys[occupy_quantity].length=job_length;

occupy_quantity++;

if(frees[i].length>job_length)

else

free_quantity--;

printf("記憶體空間成功!\n");

}}}//最優適應分配演算法

void excellent()

}if(flag==0)

else

i++;

} i--;

for(j=0;j if((frees[j].length>=job_length)&&(frees[j].length i=j;

作業系統實驗報告 儲存管理實驗

儲存管理實驗 通過編寫和除錯儲存管理的模擬程式以加深對儲存管理方案的理解。熟悉虛存管理的各種頁面淘汰演算法。通過編寫和除錯位址轉換過程的模擬程式以加強對位址轉換過程的了解。作業系統 windows xp 編譯環境 visual c 6.0 由於在單道批處理系統中,作業一投入執行,它就占有計算機的一切...

作業系統實驗五虛擬儲存器管理

作業系統課程報告 虛擬儲存器管理 學號姓名 班級教師 華僑大學電子工程系 設計目的 1 理解虛擬儲存器概念。2 掌握分頁式儲存管理位址轉換和缺頁中斷。設計內容與基本要求 1 模擬分頁式儲存管理中硬體的位址轉換和產生缺頁中斷。2 用先進先出頁面排程演算法處理缺頁中斷。設計報告內容 1 分頁式儲存管理和...

作業系統實驗6 磁碟儲存空間管理

磁碟儲存空間的分配和 演算法類似於主儲存器的可變分割槽方式的分配和 同學們可參考實驗四的第一題。為了減少移臂次數,磁碟上的資訊按柱面上各磁軌順序存放。現假定乙個盤組共有200個柱面,編號0 199 每個柱面有20個磁軌 編號0 19,同一柱面上的各磁軌分布在各盤面上,故磁軌號即盤面號。每個磁軌被分成...