加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

存储器管理之可变式分区分配之首次适应算法

(2011-05-13 15:48:16)
标签:

宋体

算法

存储器管理

存储管理

动态分配

it

分类: 我非我想
【题目要求】

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

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

首次适应算法

循环首次适应算法

最佳适应算法

【核心代码】
#include <iostream>//首次适应算法
#include<cstdlib>

using namespace std;
typedef struct JOB
{
    string JobName;
    int needTime;
    int needMemorrizes;
    int status;
    JOB *next;
} JobProgram;

JobProgram *head,*Program,*p;

typedef struct memorrizesElement
{
    int memorrizes;
};

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)
                return i;

    }
    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;
                            delete s;
                        }
                        else
                        {
                            JobProgram *s = ppp;
                            pre->next = ppp->next;
                            element[s->status].memorrizes += s->needMemorrizes;
                            delete s;
                            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()
{
    int n;
    cout<<"请输入要执行的作业的个数:  ";
    cin >> n;
    initMemorry();
    for (int i = 0; i<n; i++)
        intput();
    while(head)
        MoveMemorryManaging();
    return 0;
}


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有