定義結構體allocated_block,結構體中指標allocated_block_head指向煉表表頭,呼叫alloc_process()函式來為程序分配記憶體空間時,就將程序塊節點新增到鍊錶中。
struct定義結構體free_block_type來存放空閒記憶體塊,結構體中的全域性指標變數free_block來指向鍊錶的頭結點,呼叫alloc_process函式來為程序分配記憶體空間時,就會使用最差適應演算法來從空閒分割槽中選出一塊空閒記憶體分配給程序。allocated_block
;struct allocated_block *allocated_block_head=null;
struct使用了最差適應演算法(worst fit):從全部空閒區中找出能滿足作業要求的、且大小最大的空閒分割槽,從而使煉表中free_block_type
;struct free_block_type *free_block=null;
的結點大小趨於均勻,適用於請求分配的記憶體大小範圍較窄的系統。為適應此演算法,空閒分割槽表(空閒區鏈)中的空
閒分割槽按大小從大到小進行排序,自表頭開始查詢到第乙個滿足要求的自由分割槽分配。該演算法保留小的空閒區,盡量
減少小的碎片產生。
int找到對應的鍊錶節點,釋放ab資料結構結點rearrange_wf()
else
if(pre->size>= rear->size)
else}}
return0;
}
int dispose(struct allocated_block *free_ab)else
pre->next= ab->next;
free(ab);
}return1;
}
將ab所表示的已分配區歸還,並進行可能的合併
int free_mem(struct allocated_block *ab)else
rearrange_ff();
pre=free_block;
work= pre->next;
while(work!=null)
else
}current_free_mem_size+= ab->size;
return1;
}
將ab所表示的已分配區歸還,並進行可能的合併
void刪除程序,歸還分配的儲存空間,並刪除描述該程序記憶體分配的結點kill_process()
}
(1)產生測試資料
int main(int argc, char const *ar**)
//分配、釋放記憶體10次
int m=0;
int n=0;
while(m<10)
}(2)解釋結果
作業系統第5次實驗報告 記憶體管理
建立乙個結構體,分配到記憶體進行描述,其中各自含義包括了 pid號,s是程序,start,process name是程序名陣列 空閒分割槽表 struct free block type 按照最壞適應演算法給新程序分配記憶體空間 最差適應演算法 worstfit 從全部空閒區中找出能滿足作業要求的 ...
作業系統第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 函...