存储器管理之可变式分区分配之首次…

来源:互联网 发布:济南外贸seo 编辑:程序博客网 时间:2024/06/05 18:29
【题目要求】

设计一个可变式分区分配的存储管理方案。并模拟实现分区的分配和回收过程。

对分区的管理法可以是下面三种算法之一:

首次适应算法

循环首次适应算法

最佳适应算法

【核心代码】
#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;
}
【效果如图】存储器管理之可变式分区分配之首次适应算法


原创粉丝点击