【题目要求】
设计一个可变式分区分配的存储管理方案。并模拟实现分区的分配和回收过程。
对分区的管理法可以是下面三种算法之一:
首次适应算法
循环首次适应算法
最佳适应算法
【核心代码】
#include<iostream>//首次适应算法
#include<cstdlib>
using namespace std;
typedef struct JOB
{
stringJobName;
intneedTime;
intneedMemorrizes;
intstatus;
JOB*next;
} JobProgram;
JobProgram *head,*Program,*p;
typedef struct memorrizesElement
{
intmemorrizes;
};
memorrizesElement element[3];
void initMemorry()
{
for(int i = 0; i<3; i++)
element[i].memorrizes =5;
}
int searchAndJudge(JobProgram *JP)
{
for(int i = 0; i<3; i++)
{
if (element[i].memorrizes>= JP->needMemorrizes)
returni;
}
return-1;
}
void intput()
{
Program= new JobProgram;
cout<<"请输入作业名称: ";
cin>>Program->JobName;
cout<<"请输入作业需要时间: ";
cin>>Program->needTime;
cout<<"请输入作业需要内存数: ";
cin>>Program->needMemorrizes;
Program->status = -1;
if(head == NULL)
{
p = head;
head = Program;
p = Program;
head->next =NULL;
}
else
{
p->next =Program;
p = Program;
p->next =NULL;
}
}
void MoveMemorryManaging()
{
// JobProgram *q;
JobProgram *ppp = head;
JobProgram *pre;
while(ppp!=NULL)
{
int k =searchAndJudge(ppp);
if (ppp->status==-1)
{
if (k!=-1)
{
if(ppp->needMemorrizes <= 5)
{
//element[k].flag = 1;
element[k].memorrizes -=ppp->needMemorrizes;
ppp->status =k;
cout<<"作业正在运行: "<<endl;
cout<<"作业名字: "<<ppp->JobName<<endl<<"作业需要时间: "<<ppp->needTime<<endl<<"作业状态: "<<ppp->status<<endl;
ppp->needTime--;
if(ppp->needTime==0)
{
if (ppp == head)
{
JobProgram*s = head;
head =head->next;
element[s->status].memorrizes +=s->needMemorrizes;
deletes;
}
else
{
JobProgram*s = ppp;
pre->next =ppp->next;
element[s->status].memorrizes +=s->needMemorrizes;
deletes;
ppp =pre;
}
}
}
else
{
cout<<"你输入的内存需要大小超过了固定分区每个块的大小,无法装入运行"<<endl;//这里可以用于动态分配内存时
exit(1);
}
}
else
{
cout<<"作业就绪: "<<endl;
cout<<"作业名字: "<<ppp->JobName<<endl<<"作业需要时间: "<<ppp->needTime<<endl<<"作业状态: "<<ppp->status<<endl;
}
}
else
{
cout<<"作业正在运行: "<<endl;
cout<<"作业名字: "<<ppp->JobName<<endl<<"作业需要时间: "<<ppp->needTime<<endl<<"作业状态: "<<ppp->status<<endl;
ppp->needTime--;
if (ppp->needTime==0)
{
if (ppp ==head)
{
JobProgram *s = head;
head =head->next;
element[s->status].memorrizes +=s->needMemorrizes;
delete s;
}
else
{
JobProgram *s = ppp;
pre->next =ppp->next;
element[s->status].memorrizes +=s->needMemorrizes;
delete s;
ppp = pre;
}
}
}
pre = ppp;
ppp =ppp->next;
}
}
int main()
{
intn;
cout<<"请输入要执行的作业的个数: ";
cin>> n;
initMemorry();
for(int i = 0; i<n; i++)
intput();
while(head)
MoveMemorryManaging();
return0;
}
【效果如图】