設計程式模擬四種動態分割槽分配演算法:首次適應演算法、迴圈首次適應演算法、最佳適應演算法和最壞適應演算法的工作過程。假設記憶體中空閒分割槽個數為n,空閒分割槽大小分別為p1, … ,pn,在動態分割槽分配過程中需要分配的程序個數為m(m≤n),它們需要的分割槽大小分別為s1, … ,sm,分別利用四種動態分割槽分配演算法將m個程序放入n個空閒分割槽,給出程序在空閒分割槽中的分配情況。
#include
#include
#include
using
namespace std;
#define maxnum 100
typedef
struct nodenode,
*nodelink;
int index[maxnum]
;int pnum,snum;
string name[maxnum]
;int length[maxnum]
;void
print
(int pnum,
int snum,string name,
int index[
],nodelink space)do
q = p;
p = p-
>next;
++count;
free
(q);
cout<}while
(p != space && count != snum)
; cout
"-------------------------"
<}nodelink sort
(nodelink begin)
//將temp插入到p之前
temp-
>next = p;
temp-
>before = p-
>before;
p->before-
>next = temp;
p->before = temp;
if(p == begin && p-
>length > temp-
>length)
//將temp指向要插入的下乙個節點
temp = q;
} begin-
>before-
>next = begin;
return begin;
}voidff(
int pnum,
int snum,string name,
int length[
],node *space)
else
}while
(flag != space)
;//是否查詢過所有的分割槽,避免出現死迴圈的情況
} cout<<
"首次適應演算法"
(pnum,snum,name,index,space)
;//列印輸出結果
}voidnf(
int pnum,
int snum,string name,
int length[
],node *space)}if
(tag || flag != end)
} cout<<
"迴圈適應演算法"
(pnum,snum,name,index,space);}
voidbf(
int pnum,
int snum,string name,
int length[
],node *space)}if
(tag || flag != space)
//將flag指向的分割槽插入到剛才找到的位置
flag-
>before-
>next = flag-
>next;
flag-
>next-
>before = flag-
>before;
flag-
>before = temp-
>before;
flag-
>next = temp;
temp-
>before-
>next = flag;
temp-
>before = flag;
//判斷temp是否是space,若是的話,說明flag指向的分割槽現在的大小是所有分割槽中最小的,要更改space的值
if(temp == space)}}
cout<<
"最佳適應演算法"
(pnum,snum,name,index,space);}
voidwf(
int pnum,
int snum,string name,
int length[
],node *space)
//判斷p是否指向end,若是則說明end指向的分割槽現在的大小是所有分割槽中最小的,要更改space的值
if(p != end)
else}}
cout<<
"最壞適應演算法"
(pnum,snum,name,index,space);}
nodelink create
(int snum,
int space)
else
} node-
>before = q;
q->next = node;
return node;
}int
main
(int argc,
char
* ar**)
;//int length[3] = ;
cout<<
"請輸入作業名稱:"
;for
(i=0
;i) cout<<
"請輸入作業的大小:"
;for
(i=0
;i) cout<<
"請輸入空閒分割槽的個數:"
; cin>>snum;
int space[maxnum]
;//= ;3
cout<<
"請輸入空閒分割槽的大小:"
;for
(i=0
;i) node *node;
string temp;
for(i =
0; i < pnum; i++
) cout
)else
if(i ==2)
else
if(i ==3)
else
if(i ==4)
else
}return0;
}
作業系統 動態分割槽分配演算法
空閒分割槽以位址遞增的次序排列,1 2 3。假設要分配為5大小的記憶體,首先從鏈頭開始查詢,第乙個滿足,分配,修改相應的記憶體,再分配乙個為9大小的記憶體,從鏈頭開始查詢,第二個滿足,分配。則 演算法思想 由於動態分割槽分配是一種連續分配方式,為各程序分配的空間必須是連續的一整片區域。因此為了保證當...
作業系統(三十六)動態分割槽分配演算法
上節講述了連續分割槽分配方式中有動態分割槽分配的方式,如果在動態分割槽分配演算法中有許多空閒分割槽都滿足需求的時候,那該如何分配空間呢,今天來介紹四種分配方法解決這個問題。目錄 3.5 動態分割槽分配演算法 3.5.1 首次適應演算法 3.5.2 最佳適應演算法 3.5.3 最壞適應演算法 3.5....
作業系統 動態分割槽分配演算法的模擬
1.初始化功能 記憶體狀態設定為初始狀態。2.分配功能 要求至少使用兩種演算法,使用者可以選擇使用。3.功能 4.空閒塊的合併 即緊湊功能,用以消除碎片。當做碎片整理時,需要跟蹤分配的空間,修改其引用以保證引用的正確性。5.顯示當前記憶體的使用狀態,可以使用 或圖形。實現分配功能的4種演算法 1.最...