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

2021-09-23 01:47:13 字數 1882 閱讀 7089

一.實驗目的和要求

通過這次實驗,加深對記憶體管理的認識,進一步掌握記憶體的分配、**演算法的思想。

.實驗目的和要求

編寫程式模擬實現記憶體的動態分割槽法儲存管理。記憶體空閒區使用自由鏈管理,採用最壞適應演算法從自由鏈中尋找空閒區進行分配,記憶體**時假定不做與相鄰空閒區的合併。

假定系統的記憶體共640k,初始狀態為作業系統本身占用64k。在t1時間之後,有作業a、b、c、d分別請求8k、16k、64k、124k的記憶體空間;在t2時間之後,作業c完成;在t3時間之後,作業e請求50k的記憶體空間;在t4時間之後,作業d完成。要求程式設計序分別輸出t1、t2、t3、t4時刻記憶體的空閒區的狀態。

.實驗環境

windows作業系統、vc++6.0

c語言設計思想

模擬記憶體分配和**,要設定兩個鏈佇列,乙個空閒區鏈和乙個占用區鏈,空閒區鏈節點有起始位址,大小和指向下一節點的指標等資料域,占用區鏈節點有起始位址,大小,作業名和指向下一節點的指標等資料域,本實驗用最壞適應演算法,每次作業申請記憶體都是從空閒鏈隊頭節點分配,如果相等,就刪除空閒頭結點,如果小於申請的,就不分配,否則就劃分記憶體給作業,剩下的記憶體大小,重新插入空閒鏈隊,按從大到小,接著把作業占用的記憶體放到占用區鏈節點的末尾。每次作業執行完,就要**其占用的記憶體大小,把作業節點按從大到小插入到空閒鏈隊中。

2.程式及注釋

#include#includestruct freelink;

struct busylink;

struct freelink *free_head=null;    //自由鏈佇列(帶頭結點)隊首指標         

struct busylink *busy_head=null;   //占用區佇列隊(帶頭結點)首指標                 

struct busylink *busy_tail=null;   //占用區佇列隊尾指標

void  start(void)  /* 設定系統初始狀態*/

void  requirememo(char  name, int  require) /*模擬記憶體分配*/

else

printf("can't allocate");

w=free_head->next;

free_head->next=w->next;

if(w->len==require)

else

u=free_head;

v=free_head->next;

while((v!=null)&&(v->len>w->len))

u->next=w;

w->next=v;

}void freememo(char name) /* 模擬記憶體***/

if (p==null)

else

else

u->next=w;

w->next=v;}}

}void  past(int  time) /* 模擬系統過了time 時間*/

void  printlink()  /* 輸出記憶體空閒情況(自由鏈的結點) */

}int main()

3.執行結果:程式分別輸出t1、t2、t3、t4時刻記憶體的空閒區的狀態:

作業系統實驗三 動態分割槽儲存管理

一 目的與任務 目的 熟悉並掌握動態分割槽分配的各種演算法,熟悉並掌握動態分割槽中分割槽 的各種情況,並能夠實現分割槽合併。任務 用高階語言模擬實現動態分割槽儲存管理。二 內容 要求與安排 1 實驗內容 分割槽分配演算法至少實現首次適應演算法 最佳適應演算法和最壞適應演算法中的至少一種。熟悉並掌握各...

作業系統實驗 動態分割槽管理

1 動態分割槽管理的主存分配模擬系統的設計 最先適應法 最佳適應法 最壞適應法 選擇1 3種 模擬實現記憶體的分配 2 能夠輸入給定的記憶體大小,程序的個數,每個程序所需記憶體空間的大小等 3 能夠選擇分配或 操作 並能顯示完成記憶體分配或 後記憶體空間的使用情況 4 能夠顯示程序在記憶體的儲存位址...

作業系統 固定分割槽與可變分割槽

作業系統儲存至少要分成兩級 記憶體和外存。記憶體管理最基本的操作時由處理器把程式裝入記憶體中執行。固定分割槽 原理 靜態分割槽模式,給進入主存的使用者作業劃分一塊連續儲存區域,把作業裝入該連續儲存區域,若有多個作業裝入主存,則它們可併發執行。使用大小相等的固定分割槽有一些問題 程式可能太大而不能放到...