实验4主存空间的分配和回收.docVIP

  • 25
  • 0
  • 约2.03万字
  • 约 24页
  • 2018-08-23 发布于江苏
  • 举报
实验4主存空间的分配和回收

实验四 主存空间的分配和回收 目的和要求 实验目的 用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解。 实验要求 采用连续分配方式之动态分区分配存储管理,使用首次适应算法、最佳适应算法2种算法完成设计。 (1)**设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收。采用分区说明表进行。 (2)或在程序运行过程,由用户指定申请与释放。 (3)设计一个空闲区说明表,以保存某时刻主存空间占用情况。把空闲区说明表的变化情况以及各作业的申请、释放情况显示。 [提示]: (1)? 动态分区(可变分区方式)是按作业需要的主存空间大小来分割分区的。当要装入一个作业时,根据作业需要的主存容量查看是否有足够的空闲空间,若有,则按需分配,否则,作业无法装入。假定内存大小为256KB,空闲区说明表格式为: ·起始地址——指出空闲区的起始地址; ·长度——一个连续空闲区的长度; ·状态——有两种状态,一种是“已分配”状态;另一种是“空表目”状态,表示该表项目前没有使用。 (2)? 采用首次适应算法分配回收内存空间。运行时,输入一系列分配请求和回收请求。 要求能接受来自键盘的空间申请及释放请求,能显示分区分配及回收后的内存布局情况。 2、源程序代码 #include stdio.h #include stdlib.h #include conio.h #include iostream.h #define getjcb(type) (type*)malloc(sizeof(type)) #define getsub(type) (type*)malloc(sizeof(type)) #define NULL 0 int num,num2; //要调度的作业数和要回收的区域数 int m=0; //已分配作业数 int flag; //分配成功标志 int isup,isdown; //回收区域存在上邻和下邻的标志 int is=0; struct jcb{ char name[10]; char state; int ntime; //所需时间 int size; //所需空间大小 int addr; //所分配分区的首地址 struct jcb *link; } *ready =NULL, *p,*q,*as=NULL; //作业队列ready,已分配作业队列as typedef struct jcb JCB; struct subarea{ //分区块 char name[10]; int addr; //分区首地址 int size; //分区大小 char state; struct subarea *link; } *sub=NULL,*r,*s,*cur; //空闲分区队列sub,当前分区指针cur typedef struct subarea SUB; void sort_sub() /*对空闲分区按从小到大排序*/ { SUB *first,*second; int insert=0; if((sub==NULL)||((s-size)(sub-size))) /*插在队列之首*/ {s-link=sub; sub=s; } else{first=sub; /*寻找适当的位置插入*/ second=first-link; while(second!=NULL) { if((s-size)(second-size)) { s-link=second; first-link=s; second=NULL; insert=1; } else { first=first-link; second=second-link; } } if(insert==0)first-link=s; /*插在队尾*/ } } void sort_sub() /*对空闲分区按从小到大排序*/sort*/ { JCB *first; if(ready==NULL) ready=p; else{ first=ready; while(first-link!=NU

文档评论(0)

1亿VIP精品文档

相关文档