实验四 主存空间的分配与回收

#include <iostream>
#include <list>
#include <algorithm>
#include <vector>
#include <cstdlib>
#include <time.h>
using namespace std;
struct block{
    int begin,end;
};

struct free_place{
    int begin,length;
};

bool cmp(const block &b1,const block &b2){
    if(b1.begin<b2.begin)
        return true;
    return false;
}

bool cmp1(const free_place &f1,const free_place &f2){
    if(f1.begin<f2.begin)
        return true;
    return false;
}

vector<block> memory_tab;
list<free_place> free_list;
void init(){
    srand(time(0));
    cout<<"请输入初始状态"<<endl;
    cout<<"请输入内存占用情况"<<endl;
    block now;
    while(cin>>now.begin>>now.end,now.begin!=now.end){
        memory_tab.push_back(now);
    }
    vector<free_place> v;
    free_place now1;
    cout<<"请输入空闲区表"<<endl;
    while(cin>>now1.begin>>now1.length,now1.begin!=now1.length){
        v.push_back(now1);
    }
    sort(memory_tab.begin(),memory_tab.end(),cmp);
    sort(v.begin(),v.end(),cmp1);
    for(int i=0;i<v.size();i++)
        free_list.push_back(v[i]);
}
int  request(){
    cout<<"请输入要申请的内存空间"<<endl;
    int len;
    cin>>len;
    return len;
}

void print_page(){
    cout<<"内存空间占用"<<endl;
    for(int i=0;i<memory_tab.size();i++){
        cout<<i<<":"<<memory_tab[i].begin<<"--"<<memory_tab[i].end<<endl;
    }
    cout<<endl;
}
void print_free_table(){
    cout<<"空闲分区表"<<endl
        <<"起始长度      长度"<<endl;
    list<free_place>::iterator p=free_list.begin();
    while(p!=free_list.end()){
        cout<<(*p).begin<<"        "<<(*p).length<<endl;
        p++;
    }
    cout<<endl;
}
void print(){
    cout<<endl<<endl<<endl<<"分配结果"<<endl;
    print_page();
    print_free_table();
    cout<<endl;
}

bool mem_get_back(block &c){
    vector<block>::iterator sel;
    int t;
    if(memory_tab.size()!=0){
        t=rand()%memory_tab.size();
        while(t==0)
            t=rand()%memory_tab.size();
        sel=memory_tab.begin()+t;
        c=*sel;
        memory_tab.erase(sel);
        return true;
    }
    return false;
}
void mem_free(block c){
    free_place t;
    t.begin=c.begin;
    t.length=c.end-c.begin;
    if(free_list.size()==0){
        free_list.push_back(t);
        return ;
    }
    if(c.begin<(*free_list.begin()).begin){
        free_list.push_front(t);
    }
    else{
        list<free_place>::iterator p=free_list.begin();
        for(p++;p!=free_list.end();p++){
            if(c.begin<(*p).begin){
                free_list.insert(p,t);
            }
        }
        list<free_place>::iterator q;
        for(p=free_list.begin();p!=free_list.end();p++){
            q=p;
            ++q;
            if(q!=free_list.end()&&((*p).begin+(*p).length)==(*q).begin){
                (*p).length+=(*q).length;
                free_list.erase(q);
            }
        }
    }
}
bool memory_pack(int length){
    list<free_place>::iterator p=free_list.begin();
    while(p!=free_list.end()){
        if((*p).length>=length){
            block c;
            c.begin=(*p).begin;
            c.end=c.begin+length;
            memory_tab.push_back(c);
            if((*p).length>length)
                (*p).begin=c.end+1;
            else free_list.erase(p);
            sort(memory_tab.begin(),memory_tab.end(),cmp);
            return true;
        }
        p++;
    }
    return false;
}
int main(){
    init();
    int length;
    block c;
    while(1){
        length=request();
        if(length){
            if(mem_get_back(c))
                mem_free(c);
            if(memory_pack(length))
                print();
            else cout<<"内存不足"<<endl;
        }
    }
    return 0;
}
时间: 2024-08-26 04:13:42

实验四 主存空间的分配与回收的相关文章

操作系统 实验四主存空间的分配和回收

实验四主存空间的分配和回收 1.    目的和要求 1.1.           实验目的 用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解. 1.2.           实验要求 采用连续分配方式之动态分区分配存储管理,使用首次适应算法.循环首次适应算法.最佳适应算法和最坏适应算法4种算法完成设计. (1)**设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收.采用分区说明表进行. (2)或在程序运行过程,由用户指定申请与释放. (3)设计一

实验四 主存空间的分配和回收模拟

实验四 主存空间的分配和回收模拟 13物联网工程   李小娜  201306104148 一.实验目的 为了合理地分配和使用这些存储空间,当用户提出申请主存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间和使用情况,找出足够的空闲区域给申请者.当作业撤离归还主存资源时,则存储管理要收回占用的主存空间.主存的分配和回收的实现是与主存储器的管理方式有关的,通过本实验帮助我们理解在不同的存储管理方式下应怎样实现主存空间的分配和回收. 用高级语言完成一个主存空间的分配和回收模拟程序,以

实验四 主存空间的分配和回收

实验四主存空间的分配和回收 1.    目的和要求 1.1.           实验目的 用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解. 1.2.           实验要求 采用连续分配方式之动态分区分配存储管理,使用首次适应算法.循环首次适应算法.最佳适应算法和最坏适应算法4种算法完成设计(任选两种算法). (1)**设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收.采用分区说明表进行. (2)或在程序运行过程,由用户指定申请与释放

操作系统之实验四主存空间的分配和回收

                                                                                    实验四主存空间的分配和回收                                                      专业:商业软件工程     班级:商软2班     姓名:甘佳萍     学号:201406114207 一.    目的和要求 1.1.           实验目的 用高级语言完成一个主存空间的

1230《操作系统教程》实验四 主存空间的分配和回收模拟

实验四 主存空间的分配和回收模拟 1.    实验目的 为了合理地分配和使用这些存储空间,当用户提出申请主存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间和使用情况,找出足够的空闲区域给申请者.当作业撤离归还主存资源时,则存储管理要收回占用的主存空间.主存的分配和回收的实现是与主存储器的管理方式有关的,通过本实验帮助我们理解在不同的存储管理方式下应怎样实现主存空间的分配和回收. 用高级语言完成一个主存空间的分配和回收模拟程序,以加深对内存分配方式及其算法的理解. 2.    

0617 实验四 主存空间的分配和回收

实验四主存空间的分配和回收 1.    目的和要求 1.1.           实验目的 用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解. 1.2.           实验要求 采用连续分配方式之动态分区分配存储管理,使用首次适应算法.循环首次适应算法.最佳适应算法和最坏适应算法4种算法完成设计. (1)**设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收.采用分区说明表进行. (2)或在程序运行过程,由用户指定申请与释放. (3)设计一

[操作系统]实验四 主存空间的分配和回收

实验四主存空间的分配和回收 1.    目的和要求 1.1.           实验目的 用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解. 1.2.           实验要求 采用连续分配方式之动态分区分配存储管理,使用首次适应算法.循环首次适应算法.最佳适应算法和最坏适应算法4种算法完成设计. (1)**设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收.采用分区说明表进行. (2)或在程序运行过程,由用户指定申请与释放. (3)设计一

39,叶慧敏 实验四 主存空间的分配和回收模拟

一. 实验目的 为了合理地分配和使用这些存储空间,当用户提出申请主存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间和使用情况,找出足够 的空闲区域给申请者.当作业撤离归还主存资源时,则存储管理要收回占用的主存空间.主存的分配和回收的实现是与主存储器的管理方式有关的,通过本实验帮助 我们理解在不同的存储管理方式下应怎样实现主存空间的分配和回收. 用高级语言完成一个主存空间的分配和回收模拟程序,以加深对内存分配方式及其算法的理解. 二.实验内容和要求 2.1  模拟包括3部分:

【操作系统】实验四 主存空间的分配和回收

1. 实验目的 用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解. 2.实验要求 采用连续分配方式之动态分区分配存储管理,使用首次适应算法.循环首次适应算法.最佳适应算法和最坏适应算法4种算法完成设计(任选两种算法). (1)设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收.采用分区说明表进行. (2)或在程序运行过程,由用户指定申请与释放. (3)设计一个空闲区说明表,以保存某时刻主存空间占用情况.把空闲区说明表的变化情况以及各作业的申请.释

实验四主存空间的分配和回收

1.    目的和要求 1.1.           实验目的 用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解. 1.2.           实验要求 采用连续分配方式之动态分区分配存储管理,使用首次适应算法.循环首次适应算法.最佳适应算法和最坏适应算法4种算法完成设计. (1)**设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收.采用分区说明表进行. (2)或在程序运行过程,由用户指定申请与释放. (3)设计一个空闲区说明表,以保存某时刻