資源簡介
操作系統(tǒng)中利用最佳適應(yīng)算法 最壞適應(yīng)算法 循環(huán)首次適應(yīng)算法 首次適應(yīng)算法實現(xiàn)動態(tài)內(nèi)存的分配和回收內(nèi)存
代碼片段和文件信息
#include?
#include?
using?namespace?std;
void?begin();
int?kongjian();
int?pdname(char?c);
void?print();
void?fenpei();
int?ShouCi(char?cint?i);
void?reclaim();
int?huishou(char?c);
int?zuijia(char?cint?i);
int?zuihuai(char?cint?i);
int?xunhuan(char?cint?i);
extern?int?xh=0;//記錄循環(huán)首次適應(yīng)時的開始id
//主存大小為1024
//定義100個不定分區(qū)?可分配100工作?
struct?used_table
{
int?ID;//分區(qū)號
char?WorkName;//工作名
int?WorkSize;//工作空間
int?address;//開始地址
bool?state;//狀態(tài)?1?可用?0?已用
}UT[100];
//主存表的初始化
void?begin()
{
UT[0].ID=1;?
????UT[0].address?=0;
UT[0].state?=1;
UT[0].WorkName?=NULL;
UT[0].WorkSize?=1024;
for(int?i=1;i<100;i++)
{
UT[i].ID?=i+1;
UT[i].state?=1;
UT[i].WorkName?=NULL;
????????UT[i].address?=UT[i-1].address?+UT[i].WorkSize?;
}
}
int?kongjian()//返回空閑空間
{
int?sizeAll=1024;//主存總空間
int?sizeUse=0;//已用空間
int?sizeKY;//可用工作空間
for(int?i=0;i<100;i++)
{
if(UT[i].state==0)
sizeUse=sizeUse+UT[i].WorkSize?;
}
????sizeKY=sizeAll-sizeUse;
return?sizeKY;//返回空空空間
}
//判斷作業(yè)名
int?pdname(char?name)
{
for(int?i=0;i<100;i++)
{
if(UT[i].WorkName?==name)
{
cout<<“輸入工作名重復(fù)!“< return?0;
}
}
return?1;
}
//輸出函數(shù)
void?print()
{
cout< for(int?i=0;i<100;i++)
{
cout< if(UT[i].state==1&&UT[i+1].state==1&&UT[i+2].state==1)
break;
}
}
//主存分配各函數(shù)
void?fenpei()
{
char?name;
int?size;
int?c=1;
cout<<“請輸入工作名:“< cin>>name;
cout<<“請分配空間:“< cin>>size;
if(pdname(name))
{
cout<<“請選擇要選的算法?1:首次適應(yīng)算法?2:最佳適應(yīng)算法:3:最壞適應(yīng)算法?4?循環(huán)首次適應(yīng)算法“< ???? cin>>c;
if(c!=1&&c!=2&&c!=3&&c!=4)
{
c=1;
}
????switch(c)
{
???? case?1:
????? ShouCi(namesize);break;
???? case?2:
???? ????zuijia(namesize);break;
case?3:
zuihuai(namesize);break;
case?4:
xunhuan(namesize);break;
}
}
}
//分配主存
int?ShouCi(char?nameint?size)
{
???? for(int?i=0;i<100;i++)
{?
???? if(UT[i].WorkSize>=size&&UT[i].state==1)
{
int?temp=UT[i].WorkSize;
int?sum=UT[i+1].address?;
????UT[i].WorkSize?=size;
???????? UT[i].WorkName?=name;
???????? UT[i].address?=UT[i-1].address?+UT[i-1].WorkSize?;
???????? UT[i+1].address?=UT[i].address?+UT[i].WorkSize?;
???????? UT[i].state?=0;
????????????????if(temp>size)//將i項分成兩項
{
for(int?j=100;j>i+1;j--)
{
UT[j].address?=UT[j-1].address;
UT[j].state?=UT[j-1].state?;
UT[j].WorkName?=UT[j-1].WorkName?;
UT[j].WorkSize?=UT[j-1].WorkSize?;
}
UT[i+2].address?=sum;
UT[i+1].state?=1;
UT[i+1].WorkName?=NULL;
UT[i+1].WorkSize?=temp-size;
}
???? cout<<“成功分配!“< ???? for(int?j=i;j<100;j++)
???? if(UT[j].state?==1&&UT[j+1].state?==1&&UT[j+2].state?==1)//查找以后表?條件
評論
共有 條評論