資源簡介
用C++語言實現操作系統中關于動態空閑空間的分配與回收,用首次適應算法實現。簡單的小程序,只用結構體和數組實現。適用于初學者。
代碼片段和文件信息
#include?
using?namespace?std;
void?begin();
int?panduan(int?i);
int?kongjian();
int?pdname(char?c);
void?print();
void?fenpei();
int?assign(char?cint?i);
void?reclaim();
int?huishou(char?c);
void?shiying(char?cint?i);
//主存大小為1024
//定義100個不定分區?可分配100工作?
struct?used_table
{
int?ID;//分區號
char?WorkName;//工作名
int?WorkSize;//工作空間
int?address;//開始地址
bool?state;//狀態?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?panduan(int?size)//判斷分配工作時?剩余主存大小是否可夠工作空間存入
{
int?sizeAll=1024;
int?sizeUse=0;
for(int?i=0;i<100;i++)
{
if(UT[i].state==0)
sizeUse=sizeUse+UT[i].WorkSize?;
}
????if((size+sizeUse)>sizeAll)
{
cout<<“工作空間太大,不能存入“;
return?0;
}
return?1;
}
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;//返回空空空間
}
//判斷作業名
int?pdname(char?name)
{
for(int?i=0;i<100;i++)
{
if(UT[i].WorkName?==name)
{
cout<<“輸入工作名重復!“< return?0;
}
}
return?1;
}
//輸出函數
void?print()
{
cout<<“分區號????“<<“工作名??????“<<“工作空間????“<<“開始地址?????“<<“狀態??“< for(int?i=0;i<100;i++)
{
cout<<“???????“;
cout< cout<<“???????“;
cout< cout<<“???????“;
cout< cout<<“???????“;
cout< cout<<“???????“;
cout< cout<<“???????“;
????????cout< //if(UT[i+3].state==1&&UT[i+4].state==1&&UT[i+2].state==1)
// break;
}
}
//主存分配各函數
void?fenpei()
{
char?name;
int?size;
int?c=1;
cout<<“請輸入工作名:“< cin>>name;
cout<<“請分配空間:“< cin>>size;
//cout<<“請選擇要選的算法?1:首次適應算法?2:最佳適應算法:“;
//cin>>c;
//switch(c)
//{
//case?1:
assign(namesize);//break;
//case?2:
//????shiying(namesize);//break;
//}
}
//分配主存
int?assign(char?nameint?size)
{
if(pdname(name))
{
???? 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<<“成功分配!
評論
共有 條評論