主存储器空间的分配和回收

#include <iostream>

#include <list>

using namespace std;

#define TOTLE_LEFT 108      //除系统占用内存外的剩余内存

#define frist_free 14    //第一块空闲区的起至地址

#define first_size  12    //第一块空闲区的大小

#define sec_free   32     //第二块空闲区的起至地址

#define sec_size   96    //第二块空闲区的大小

#define first_job_size 3

#define sec_job_size 23

#define third_job_size 3

//空闲分区表节点

struct Free

{

    int start;

    int length;

    Free(int s,int l);

};

Free::Free(int s,int l)

{

    start = s;

    length = l;

}

//已分配分区表节点

struct Task

{

    int name;

    int start;

    int length;

    Task(int n,int s,int l);

};

Task::Task(int n,int s,int l)

{

   name = n;

    start = s;

    length = l;

}

//声明空闲分区表

list<Free *> free_list;

list<Task *> task_list;

//分配可用起始地址

int get_free(int size)

{

    int start = -1;

    //查找适当的空闲分区

    list<Free *>::iterator it=free_list.begin();

    bool find = false;

    while(it!=free_list.end())

    {

        if((*it)->length>=size)

        {

            find=true;

            start = (*it)->start;

            //大于就分割把低地址分配出去

            if((*it)->length>size)

            {

                (*it)->start += size;

                (*it)->length -= size;

            }

            //等于就从空闲分区中删掉

            else

                free_list.erase(it);

            break;//找到就跳出循环

        }

        it++;

    }

    return start;

}

void do_request(int name,int size)

{

    if(name==0)

    {

        cout << "申请不合法!非法作业名!" << endl;

        return;

    }

    if(size>TOTLE_LEFT)

    {

        cout << "申请不合法!超出最大可用内存!" << endl;

        return;

    }

    //查找是否已存在同名作业

    bool find = false;

    list<Task *>::iterator it=task_list.begin();

    while(it!=task_list.end())

    {

        if((*it)->name==name)

        {

            find=true;

            break;

        }

        it++;

    }

    if(find)

    {

        cout << "此作业已存在!" << endl;

        return;

    }

    //从空闲分区选择合适的空间

    int start=get_free(size);

    //未找到合适空间

    if(start==-1)

    {

        cout << "系统内存不足!作业等待!" << endl;

        return;

    }

    Task *ta = new Task(name,start,size);

    task_list.push_back(ta);

    cout << "作业申请内存成功!" << endl;

}

//插入到空闲分区表,按照起始地址从小到大

void free_task(int start,int length)

{

    //查找要插入的位置

    list<Free *>::iterator init_it,last_it;

    last_it = init_it;

    list<Free *>::iterator it=free_list.begin();

    while(it!=free_list.end())

    {

        if((*it)->start > start) break;

        last_it = it;

        it++;

    }

    bool link_prev=false;

    bool link_next=false;

    //有前一个时

    if(last_it!= init_it)

    {

        if((*last_it)->start+(*last_it)->length == start)

            link_prev = true;

    }

    //有后一个时

    if(it!=free_list.end())

    {

        if(start+length==(*it)->start)

            link_next = true;

    }

    //与前后都相连

    if(link_prev && link_next)

    {

        (*last_it)->length += length + (*it)->length;

        free_list.erase(it);

    }

    //只与前相连

    else if(link_prev)

    {

        (*last_it)->length += length;

    }

    //只与后相连

    else if(link_next)

    {

        (*it)->start = start;

        (*it)->length += length;

    }

    //前后都不相连

    else

    {

        Free *fr = new Free(start,length);

        free_list.insert(it,fr);

    }

}

void do_revoke(int name)

{

    if(name==0)

    {

        cout << "错误!不能回收系统内存!" << endl;

        return;

    }

    //查找要回收的作业是否存在

    bool find = false;

    list<Task *>::iterator it=task_list.begin();

    while(it!=task_list.end())

    {

        if((*it)->name==name)

        {

            find=true;

            break;

        }

        it++;

    }

    if(!find)

    {

        cout << "错误!要回收的作业不存在!" << endl;;

        return;

    }

    free_task((*it)->start,(*it)->length);

    task_list.erase(it);

    cout << "回收作业占用内存成功!" << endl;

}

void print_task()

{

    cout <<"作业名称 起始地址 大小" << endl;

    for(list<Task *>::iterator it=task_list.begin();it!=task_list.end();it++)

    {

        cout << (*it)->name <<" " 

 << (*it)->start <<" "

             << (*it)->length << endl;

    }

}

void print_free()

{

    cout <<"以下是空闲分区表的状态"<< endl

         <<"起始地址 大小" << endl;

    for(list<Free *>::iterator it=free_list.begin();it!=free_list.end();it++)

    {

        cout << (*it)->start << " "

             << (*it)->length << endl;

    }

}

int main()

{

    //把系统占用后剩余的内存空间计入空闲分区表

    Free *fr1 = new Free(frist_free,first_size);

    free_list.push_back(fr1);

    Free *fr = new Free(sec_free,sec_size);

    free_list.push_back(fr);

Task *ta = new Task(1,26,first_job_size);

    task_list.push_back(ta);

    Task *ta1 = new Task(3,29,third_job_size);

    task_list.push_back(ta1);

    Task *ta2 = new Task(2,128,sec_job_size);

    task_list.push_back(ta2);

    print_free();

    bool quit=false;

    while(!quit)

    {

        cout <<"选择要进行的操作:1.申请内存 2.回收内存 3.查看作业>";

        int op;

        cin >> op;

        if(op==1)

        {   

int name;

            int size;

            cout << "请输入作业名及占用空间大小(用空格隔开):";

            cin >> name;

            cin >> size;

            do_request(name,size);

            print_free();

        }

        else if(op==2)

        {   int name;

            cout << "请输入要回收的作业名:";

            cin >> name;

            do_revoke(name);

            print_free();

        }

        else if(op==3)

        {

            print_task();

        }

        else

        {

            cout << "非法操作!" << endl;

        }

        cout << "******************************" << endl;

        char con;

        cout << "继续(y/n):";

        cin >> con;

        if(con=='n' || con=='N')

        {

            quit=true;

        }

    }

    return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值