资源简介
设计程序模拟内存的动态分区法存储管理。内存空闲区使用自由链管理,采用最坏适应算法从自由链中寻找空闲区进行分配,内存回收时假定不做与相邻空闲区的合并。
假定系统的内存共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‘; /*
- 上一篇:atl连接点、c++接收器、js接收器
- 下一篇:车位管理系统
评论
共有 条评论