资源描述:
《分区式储器管理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、分区式储器管理实验五分区式储器管理目录一.实验冃的2二.实验属性2三.实验仪器设备及器材2四.实验要求2五.实验步骤31、主耍数据结构设计.…32、主要函数设计31)requireMemo(charname,intrequire)32)voidfreeMemo(charname)53、测试数据及运行结果71)测试数据准备..72)运行结果及说明7六、实验总结10七、程序源代码10—.实验目的模拟实现一个简单的固定(或可变)分区存储管理系统,进一步加深对分区分配方案设计思想的理解。二.实验属性该实验为设计性实验。三.实验仪器设备及器材普通PC386以上微机
2、四.实验要求本实验要求2学时完成。本实齡要求完成如卜•任务:(1)建立相关的数拯结构,作业控制块、已分配分区及未分配分区;(2)实现一个分区分配算法,如最先适应分配算法、最优或最坏适应分配算法;(3)实现一个分区回收算法;(4)给定一批作业/进程,选择一个分配或回收算法,实现分区存储的模拟管理;(5)将整个过程可视化显示出来。五.实验步骤1、主耍数据结构设计1).程序中白由链队列的结点类型可描述如下:structfreelink{intlen,address;/*len为分区长度;address为分区起始地址structfreelink/*next;2)
3、.内存占用区用链表描述,其结点类型描述如F:structbusylink{charname;/*作业或进程名name二'S'表示OS占川intIon,address;structbusylink*next;}3).设全程量:structfreelink*free_head=NULL;//自由链队列(带头结点)队首指针structbusylink*busy_head二NULL,//占用区队列队(带头结点)首指针structbusylink*busyta订二NULL;//占用区队列队尾指针2、主要函数设计1)requireMemo(charname,intr
4、equire)函数名称:requireMemo(charname,intrequire)功能描述:在空闲区域链中找到第一个满足条件的结点,将其分配掉,如果结点的长度大于require,则剩下的又将作为一个空闲结点插入到空闲区域链中输入参数:charname,intrequire输出参数:无程序流程图:1、主耍数据结构设计1).程序中白由链队列的结点类型可描述如下:structfreelink{intlen,address;/*len为分区长度;address为分区起始地址structfreelink/*next;2).内存占用区用链表描述,其结点类型描述
5、如F:structbusylink{charname;/*作业或进程名name二'S'表示OS占川intIon,address;structbusylink*next;}3).设全程量:structfreelink*free_head=NULL;//自由链队列(带头结点)队首指针structbusylink*busy_head二NULL,//占用区队列队(带头结点)首指针structbusylink*busyta订二NULL;//占用区队列队尾指针2、主要函数设计1)requireMemo(charname,intrequire)函数名称:require
6、Memo(charname,intrequire)功能描述:在空闲区域链中找到第一个满足条件的结点,将其分配掉,如果结点的长度大于require,则剩下的又将作为一个空闲结点插入到空闲区域链中输入参数:charname,intrequire输出参数:无程序流程图:I2)voidfreeMemo(charname)函数名称:voidfreeMemo(charname)功能描述:找到要回收的结点,将其释放,并将这个结点重新插入到空闲区域链中去输入参数:charname输出参数:无程序流程图:将W插入到空闲区域链中时前的归并算法的流程图如下:begin3、测试
7、数据及运行结果1)测试数据准备假定系统的内存共640K,初始状态为操作系统本身占用64K。在tl时间之后,有作业A、B、C、D分别请求8K、16K、64K、124K的内存空间;在t2时间之后,作业C完成;在t3时间Z后,作业E请求50K的内存空间:在t4时间Z后,作业D完成。要求编程序分别输出tl、t2、13.14时刻内存的空闲区的状态。2)运行结果及说明a.测试廿标:运用按最佳适应算法[1](空闲区未归并时的)运行结果:'•••I)•••I>•••I•1••••••I)•••II—b.测试冃标:运用按最佳适应算法(空闲区归并时的)运行结果六、实验总结本
8、次实验采用最佳适应算法來分配内存,然后分别输出未进行内存回收时和进行回收时,每过