-
大小: 8KB文件類型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-05-22
- 語(yǔ)言: C/C++
- 標(biāo)簽: 主存分配??主存回收??操作系統(tǒng)??
資源簡(jiǎn)介
用C++語(yǔ)言實(shí)現(xiàn)操作系統(tǒng)中關(guān)于動(dòng)態(tài)空閑空間的分配與回收,用首次適應(yīng)算法實(shí)現(xiàn)。簡(jiǎn)單的小程序,只用結(jié)構(gòu)體和數(shù)組實(shí)現(xiàn)。適用于初學(xué)者。
代碼片段和文件信息
#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個(gè)不定分區(qū)?可分配100工作?
struct?used_table
{
int?ID;//分區(qū)號(hào)
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?panduan(int?size)//判斷分配工作時(shí)?剩余主存大小是否可夠工作空間存入
{
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;//返回空空空間
}
//判斷作業(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<<“分區(qū)號(hào)????“<<“工作名??????“<<“工作空間????“<<“開始地址?????“<<“狀態(tài)??“< 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;
}
}
//主存分配各函數(shù)
void?fenpei()
{
char?name;
int?size;
int?c=1;
cout<<“請(qǐng)輸入工作名:“< cin>>name;
cout<<“請(qǐng)分配空間:“< cin>>size;
//cout<<“請(qǐng)選擇要選的算法?1:首次適應(yīng)算法?2:最佳適應(yīng)算法:“;
//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項(xiàng)分成兩項(xiàng)
{
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<<“成功分配!
評(píng)論
共有 條評(píng)論