建立乙個結構體,分配到記憶體進行描述,其中各自含義包括了: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)釋放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;
}
int dispose(struct allocated_block *free_ab)刪除程序,歸還分配的儲存空間,並刪除描述該程序記憶體分配的結點:else
pre->next= ab->next;
free(ab);
}return1;
}
void kill_process(int(1)產生測試資料x)}
(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 函...