【用C語言寫一個內存管理程序】

【用C語言寫一個內存管理程序】

這個程序有2個系統調用和3種內存分配策略。並計算性能(平均內存利用率,尋找孔(hole)次數)

【1】系統調用(System Calls)
(1)void *mm_request(int n)
這個系統調用是請求一個連續的n字節的內存塊(Block).如果請求成功,返回一個指針到分配的塊的
第一個字節。如果內存沒有足夠的孔(hole)或參數n錯誤,返回NULL.
(2)void mm_release(void *p)
這個系統調用可以釋放已經分配的指針p指到的內存。如果釋放的內存塊相鄰有空的內存(hole),就
要把他們合併。

【2】內存分配策略
內存管理提供三種選擇(1)首次適配(first fit),(2)最佳適配(best fit),(3)最差適配(worst
fit). 使用不同內存分配策略要顯示相應的性能(A.計算平均內存利用率,B.計算每次執行mm_request,尋找孔(hole)的次數)

【提示】

『提示1』
我們可以模擬一段內存來管理。聲明一個數組mm[mem_size]來表示物理內存。(此題並不是用真正得內存,用數組代表會簡單很多)

兩種方式都可以獲得一個mem_size連續字節的序列,就是我們要模擬管理的內存。

『提示2』
假設“釋放”和“請求”放在兩個在不同的隊列裏。“釋放”總是立刻執行,“請求”要等到有
足夠大小的內存孔(hole)才分配。“請求”是先進先出(FIFO)的

『提示3』
程序從一個空的內存開始分配,直到沒有足夠的空間,這個時候“請求”就開始等待。如果有“釋
放”執行,“請求”就去檢查這時有沒有足夠的空間。

『提示4』
假設“請求”永遠不爲空。

『提示5』
假設“釋放”的時候,有幾個塊(Block),就隨機釋放一個。

『提示6』
程序框架:
for (i=0; i<sim_steps; i++) {
do {
得到下一個請求的大小;
mm_request(n)
                記錄尋找孔(hole)的次數;
     }
while (請求成功);
記錄內存利用率(內存利用率=已經分配的空間/總內存空間);
隨機選擇一個block 去釋放;
mm_release(p)
}

注意:最後要算出平均的內存利用率。

『提示7』
產生“請求”字節大小
int uniform(int max)
{
   return (int)(max*drand48());
}
n = uniform(max);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章