-
大小: 14KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-06-07
- 語(yǔ)言: 其他
- 標(biāo)簽: 操作系統(tǒng)??
資源簡(jiǎn)介
存儲(chǔ)管理實(shí)驗(yàn)(3個(gè))
首次適應(yīng)算法,循環(huán)首次適應(yīng)算法,最佳適應(yīng)算法

代碼片段和文件信息
#include
#include
#define?Free?0?//空閑狀態(tài)
#define?Busy?1?//已用狀態(tài)
#define?OK?1????//完成
#define?ERROR?0?//出錯(cuò)
#define?MAX_length?640?//最大內(nèi)存空間為640KB
typedef?int?Status;
typedef?struct?freearea//定義一個(gè)空閑區(qū)說(shuō)明表結(jié)構(gòu)
{
????int?ID;???//分區(qū)號(hào)
????long?size;???//分區(qū)大小
????long?address;?//分區(qū)地址
????int?state;???//狀態(tài)
}ElemType;
//----------??線性表的雙向鏈表存儲(chǔ)結(jié)構(gòu)??------------
typedef?struct?DuLNode?//雙向鏈表
{
????ElemType?data;
????struct?DuLNode?*prior;?//前趨指針
????struct?DuLNode?*next;??//后繼指針
}DuLNode*DulinkList;
DulinkList?block_first;?//頭結(jié)點(diǎn)
DulinkList?block_last;??//尾結(jié)點(diǎn)
Status?alloc(int);//內(nèi)存分配
Status?free(int);?//內(nèi)存回收
Status?First_fit(intint);//首次適應(yīng)算法
Status?Best_fit(intint);?//最佳適應(yīng)算法
Status?Next_fit(intint);?//循環(huán)首次適應(yīng)算法
void?show();//查看分配
Status?Initblock();//開(kāi)創(chuàng)空間表
Status?Initblock()//開(kāi)創(chuàng)帶頭結(jié)點(diǎn)的內(nèi)存空間鏈表
{
????block_first=(DulinkList)malloc(sizeof(DuLNode));
????block_last=(DulinkList)malloc(sizeof(DuLNode));
????block_first->prior=NULL;
????block_first->next=block_last;
????block_last->prior=block_first;
????block_last->next=NULL;
????block_last->data.address=0;
????block_last->data.size=MAX_length;
????block_last->data.ID=0;
????block_last->data.state=Free;
????return?OK;
}
//-----------------------?分?配?主?存?
//-------------------------
Status?alloc(int?ch)
{
????int?IDrequest;
????cout<<“請(qǐng)輸入作業(yè)(分區(qū)號(hào)):“;
????cin>>ID;
????cout<<“請(qǐng)輸入需要分配的主存大小(單位:KB):“;
????cin>>request;
????if(request<0?||request==0)
????{
????????cout<<“分配大小不合適,請(qǐng)重試!“< ????????return?ERROR;
????}
?
?if(ch==3)?//選擇循環(huán)首次適應(yīng)算法
????{
???????
????????if(Next_fit(IDrequest)==OK)?cout<<“分配成功!“< ??????
??else?cout<<“內(nèi)存不足,分配失敗!“< ????????return?OK;
????}
????else?if(ch==2)?//選擇最佳適應(yīng)算法
????{
????????if(Best_fit(IDrequest)==OK)?cout<<“分配成功!“< ????????else?cout<<“內(nèi)存不足,分配失敗!“< ????????return?OK;
????}
????else?//默認(rèn)首次適應(yīng)算法
????{
????????if(First_fit(IDrequest)==OK)?cout<<“分配成功!“< ????????else?cout<<“內(nèi)存不足,分配失敗!“< ????????return?OK;
????}
}
//------------------?首次適應(yīng)算法?-----------------------
Status?First_fit(int?IDint?request)//傳入作業(yè)名及申請(qǐng)量
{
????//為申請(qǐng)作業(yè)開(kāi)辟新空間且初始化
????DulinkList?temp=(DulinkList)malloc(sizeof(DuLNode));
????temp->data.ID=ID;
????temp->data.size=request;
????temp->data.state=Busy;
????DuLNode?*p=block_first->next;
?
????while(p)
????{
????????if(p->data.state==Free?&&?p->data.size==request)
????????{//有大小恰好合適的空閑塊
????????????p->data.state=Busy;
????????????p->data.ID=ID;
????????????return?OK;
????????????break;
????????}
????????if(p->data.state==Free?&&?p->data.size>request)
????????{//有空閑塊能滿足需求且有剩余“
????????????temp->prior=p->prior;
????????????temp->next=p;?????
????????????temp->data.address=p->data.address;
????????????p->prior->next=temp;
????????????p->prior=temp;
????????????p->data.address=temp->data.address+temp->data.size;
????????????p->data.size-=request;
????????????return?OK;
????????????break;
????????}
????????p=p->next;
???
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????61440??2012-11-18?18:00??存儲(chǔ)管理實(shí)驗(yàn)\存儲(chǔ)管理動(dòng)態(tài)分區(qū)分配算法的模擬.doc
?????文件???????8904??2012-11-18?18:51??存儲(chǔ)管理實(shí)驗(yàn)\存儲(chǔ)管理實(shí)驗(yàn)1.cpp
?????文件???????8288??2012-11-18?19:12??存儲(chǔ)管理實(shí)驗(yàn)\存儲(chǔ)管理實(shí)驗(yàn)2.cpp
?????目錄??????????0??2012-11-18?19:18??存儲(chǔ)管理實(shí)驗(yàn)
-----------?---------??----------?-----??----
????????????????78632????????????????????4
評(píng)論
共有 條評(píng)論