• 大小: 4KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: C/C++
  • 标签:

资源简介

设计程序模拟内存的动态分区法存储管理。内存空闲区使用自由链管理,采用最坏适应算法从自由链中寻找空闲区进行分配,内存回收时假定不做与相邻空闲区的合并。 假定系统的内存共640K,初始状态为操作系统本身占用64K。在t1时间之后,有作业A、B、C、D分别请求8K、16K、64K、124K的内存空间;在t2时间之后,作业C完成;在t3时间之后,作业E请求50K的内存空间;在t4时间之后,作业D完成。要求编程序分别输出t1、t2、t3、t4时刻内存的空闲区的状态。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#define NULL 0

struct freelink{
     int len address;  //  len为分区长度  address为分区起始地址 
     struct freelink *next;
};
//内存占用区用链表描述,其结点类型描述如下:
struct busylink{
     char name;   // 作业或进程名  name=‘S‘ 表示OS占用 
     int len  address;
     struct busylink *next;
};
//并设全程量:
struct freelink *free_head=NULL;      //自由链队列(带头结点)队首指针         
struct busylink *busy_head=NULL    //占用区队列队(带头结点)首指针                 
                *busy_tail=NULL;   //占用区队列队尾指针

void start(void);   /* 设置系统初始状态*/ 
void requireMemo(char  name int  require); /*模拟内存分配*/
void freeMemo(char name);  /* 模拟内存回收*/ 
void past(int  time);  /* 模拟系统过了time 时间*/
void printlink();  /* 输出内存空闲情况(自由链的结点) */ 

void main()
{   
int t1=1t2=2t3=3t4=4;
start();
    past(t1);
    requireMemo(‘A‘8);  requireMemo(‘B‘16); 
    requireMemo(‘C‘64); requireMemo(‘D‘124);//A、B、C、D分别进入
    printlink();//显示t1时刻内存空闲区
    past(t2);
    freeMemo(‘C‘);//C结束
    printlink();//显示t2时刻内存空闲区
    past(t3);
    requireMemo(‘E‘50);//E进入
    printlink();//显示t3时刻内存空闲区
past(t4);
    freeMemo(‘D‘);//D结束
    printlink();//显示t4时刻内存空闲区
}

void start()
{     
struct freelink *p;
    struct busylink *q;
    free_head=(struct  freelink*)malloc(sizeof(struct  freelink));
    free_head->next=NULL;  // 创建自由链头结点
    busy_head=busy_tail=(struct  busylink*)malloc(sizeof(struct  busylink));
    busy_head->next=NULL;  // 创建占用链头结点
    p=( struct freelink *)malloc(sizeof(struct freelink));
    p->address=64;
    p->len=640-64;  //(OS占用了64K)
    p->next=NULL; 
    free_head->next=p;
    q=( struct  busylink *)malloc(sizeof(struct busylink));
    q->name=‘S‘;  /*  

评论

共有 条评论

相关资源