[英]im having trouble getting my best fit allocation to get more then a few to allocate
嗨,我正在為一個類編寫一個模擬操作系統,並嘗試使用最佳擬合分配技術為進程分配內存。 我的列表有兩個參數num_units和process_id,有128個單位要啟動,如果我的程序搜索並找到-1,則進程id為-1,然后比較該數量的單位,如果適合,將新Node插入列表中。 我一直遇到它僅在模擬的10,000中分配3或4個項目的問題,這是分配功能
int allocate_mem(int process_id, int num_units)
{
list<Node>::iterator best = memory_list.begin();
// TODO: Implement
for(list<Node>::iterator cur = memory_list.begin(); cur != memory_list.end(); ++cur)
{
if (cur->process_id == HOLE_PROCESS_ID)
{
if (cur->num_units == num_units)
{
cur->process_id = (process_id);
num_alloc_successes++;
return temp;
}
else if (cur->num_units > num_units)
{
if (best->num_units > cur->num_units)
{
best = cur;
}
}
}
temp++;
}
if (best->num_units > num_units)
{
best->num_units = (best->num_units - num_units);
memory_list.insert(best,1,Node(process_id, num_units));
num_alloc_successes++;
return temp;
}
++num_alloc_failures;
return -1;
}
還有一個似乎可以正常工作的解除分配功能
在此先感謝您的幫助。
首先,提早退出for循環的唯一方法是完全匹配。
其次,只要cur-> num_units> num_units,best最好一直設置為cur,這樣就可以成為滿足該要求的列表中的最后一個元素。
第三,您沒有正確分割部分使用的塊。 我很確定您正在破壞信息。 實際上,您似乎沒有任何合並內存塊的方法。 您是否按大小對列表進行排序?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.