实验二:存储器的分配与回收算法实现.doc
文本预览下载声明
实验报告
学院(系)名称:计算机与通信工程学院
姓名 刘俊杰 学号专业 信息与计算科学 班级 2011级班 2013-11-27 3-4节
2013-11-29 7-8节
2013-12-4 3-4节
2013-12-6 7-8节 实验地点 主校区7-215 批改意见 成绩
教师签字:
实验内容:
本实验是模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不实际启动装入作业。
采用最先适应法、最佳适应法、最坏适应法分配主存空间。
当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。
当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。
设计的模拟系统中,进程数不小于5,进程调度方式可以采用实验一中的任何一种。
运行所设计的程序,输出有关数据结构表项的变化和内存的当前状态。
实验要求中遇到收获#includestdio.h
#includemalloc.h
#define NULL 0
#define LEN1 sizeof(struct job)//作业大小
#define LEN2 sizeof(struct idle)//空闲区单元大小
#define LEN3 sizeof(struct allocate)//已分配区单元大小
int SPACE=100;//定义内存空间大小
int ORIGI=1;//定义内存起始地址
struct job//定义作业
{
int name;
int size;
int address;
};
struct idle//定义空闲区
{
int size;
int address;
struct idle *next;
};
struct allocate//定义已分配区
{
int name;
int size;
int address;
struct allocate *next;
};
struct idle *creatidle(void)//建立空闲表
{
struct idle *head;
struct idle *p1;
p1=(struct idle*)malloc(LEN2);
p1-size=SPACE;
p1-address=ORIGI;
p1-next=NULL;
head=p1;
return(head);
}
struct allocate *creatallocate(void)//建立已分配表
{
struct allocate *head;
head=NULL;
return(head);
}
struct job *creatjob(void)//建立作业
{
struct job *p;
p=(struct job*)malloc(LEN1);
printf(请输入要运行的作业的名称与大小:\n);
scanf(%d%d,p-name,p-size);
return(p);
}
struct idle *init1(struct idle *head,struct job *p)//首次适应算法分配内存
{
struct idle *p0,*p1;
struct job *a;
a=p;
p0=head;
p1=p0;
while(p0-next!=NULLp0-sizea-size)
{
p0=p0-next;
}
if(p0-sizea-size)
{
p0-size=p0-size-a-size;
a-address=p0-address;
p0-address=p0-address+a-size;
}
else
{
printf(无法分配\n);
}
return(head);
}
struct idle *init2(struct idle *head,struct job *p)//最优
{
struct idle *p0,*p1;
struct job *a;
a=p;
p0=head;
if(p0==NULL)
{
printf(无法进行分配!\n);
}
while(p0-next!=NULLp0-sizea-size)
{
p0=p0-next;
}
if(p0-sizea-size)
{
p1=p0;
p0=p0-next;
}
else
{
printf(无法分配!\n);
显示全部