作業系統第5次實驗報告 記憶體管理

2022-07-10 02:39:09 字數 1847 閱讀 2914

建立乙個結構體,分配到記憶體進行描述,其中各自含義包括了:pid號,s是程序,start,process_name是程序名陣列

;
空閒分割槽表

struct

free_block_type

;

按照最壞適應演算法給新程序分配記憶體空間:

最差適應演算法(worstfit):從全部空閒區中找出能滿足作業要求的、且大小最大的空閒分割槽,從而使煉表中的結點大小趨於均勻,適用於請求分配的記憶體大小範圍較窄的系統。為適應此演算法,空閒分割槽表(空閒區鏈)中的空閒分割槽按大小從大到小進行排序,自表頭開始查詢到第乙個滿足要求的自由分割槽分配。該演算法保留小的空閒區,儘量減少小的碎片產生。

int allocate_wf(struct allocated_block *ab)

按照最佳適應演算法給新程序分配記憶體空間

最佳適應演算法(bestfit):從全部空閒區中找出能滿足作業要求的、且大小最小的空閒分割槽,這種方法能使碎片盡量小。為適應此演算法,空閒分割槽表(空閒區鏈)中的空閒分割槽要按從小到大進行排序,自表頭開始查詢到第乙個滿足要求的自由分割槽分配。該演算法保留大的空閒區,但造成許多小的空閒區。

int allocate_bf(struct allocated_block *ab)

pre=bf;

pre= pre->next;

}if(bf== null&¤t_free_mem_size> ab->size)

ret=mem_retrench(ab);

else

ret= -2

; rearrange_bf();

按照首次適應演算法給新程序分配記憶體空間:

首次適應演算法(firstfit):從空閒分割槽表的第乙個表目起查詢該錶,把最先能夠滿足要求的空閒區分配給作業,這種方法的目的在於減少查詢時間。為適應這種演算法,空閒分割槽表(空閒區鏈)中的空閒分割槽要按位址由低到高進行排序。該演算法優先使用低址部分空閒區,在低址空間造成許多小的空閒區,在高位址空間保留大的空閒區。

int allocate_ff(struct allocated_block *ab)

pre=ff;

pre= pre->next;

}if(ff== null&¤t_free_mem_size> ab->size)

ret=mem_retrench(ab);

else

ret= -2

; rearrange_ff();

return

ret;

}

釋放ab資料結構結點:

int dispose(struct allocated_block *free_ab)

else

pre->next= ab->next;

free(ab);

}return1;

}

刪除程序,歸還分配的儲存空間,並刪除描述該程序記憶體分配的結點:

void kill_process(int

x)}

(1)產生測試資料

(2)解釋結果

作業系統第5次實驗報告 記憶體管理

定義結構體allocated block,結構體中指標allocated block head指向煉表表頭,呼叫alloc process 函式來為程序分配記憶體空間時,就將程序塊節點新增到鍊錶中。struct allocated block struct allocated block alloc...

作業系統第2次實驗報告 建立程序

列印1所建立的程序樹結構,給出帶有自己名字的截圖。uid 使用者id號 pid process id 程序 id號 ppid parent process id 父程序 id號 c 占用cpu的量,圖中為0 stime 建立該程序的時間 tty 登入者的終端機位置 time 使用掉的cpu時間 cm...

作業系統課程實驗報告(四)

程序執行軌跡的跟蹤和統計 還是 那門課的實驗,把它從實驗樓搬過來了。這個實驗的目的 需要在 linux 0.11 中建立乙個 log檔案用來收集 linux 0.11 執行中所有程序建立 切換以及退出的狀態。為此,我們需要在系統初始化的時候建立乙個 log檔案,用來記錄 需要乙個 fprintk 函...