欢迎来到天天文库
浏览记录
ID:9649446
大小:156.89 KB
页数:16页
时间:2018-05-04
《操作系统课程设计实验报告--内存的连续分配算法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、组号成绩计算机操作系统课程设计报告题目内存的连续分配算法专业:计算机科学与技术班级:学号姓名:指导教师:2016年12月26日一、设计目的掌握内存的里联系分配方式的各种算法。二、设计内容本系统模拟操作系统内存分配算法的实现,实现可重定位分区分配算法,采用PCB定义结构体来表示一个进程,定义了进程的名称和大小,进程内存起始地址和进程状态。内存分区表用空闲分区表的形式来模拟实现。三、设计原理动态分区的实现是根据进程所申请的内存大小来决定动态的由系统进行分配内存空间大小,因此分区表里的空闲分区个数是不定的,根据进程数和进程大
2、小决定的。可重定位分区算法比动态分区算法增加了紧凑的功能。四、详细设计及编码1、模块分析该实验可分为三大部分,每一部分又由个数不同的几个函数实现。第一部分是装入作业,第二部分是内存回收,第三部分是进行紧凑。装入作业的时候首先初始化一个链表,根据用户输入的操作代号进行相应的操作。若用户选择装入作业首先判断空闲分区表里有没有比作业需要的内存大的分区,若有直接分配,若没有进行紧凑操作,再将紧凑后的空闲分区与作业大小比较,若能装的下则分配给作业,若是进行紧凑后的空闲分区仍不能装入整个作业则通知用户内存不够。2、流程图2、代码实
3、现#include#include#include#include#defineTURE1#defineFALSE0#defineOK1#defineERROR0#defineINFEASIBLE-1#defineOVERFLOW-2#defineSIZE3//进程表intppNo=1;//用于递增生成进程号intpLength=0;structPCB{intpNo;//进程号(名)intpSize;//进程大小intpOccupy;//实际占
4、用的内存intpStartAddr;//进程起始地址intpState;//进程状态};structPCBpList[200];//////////////////空闲分区表部分/////////////////////////////////////////////////////typedefintStatus;typedefstructemptyNode{//空闲分区结构体intareaSize;//空闲分区大小intaStartAddr;//空闲分区始址structemptyNode*next;}emptyNo
5、de,*LinkList;intListDelete(structPCB*pList,inti);//删除下标为i的进程voidpSort(structPCB*pList);//内存中的进程按始址递增排序voidcompact(LinkList&L,structPCB*pList);//紧凑,内存中进程移动,修改进程数据结构;空闲分区合并,修改空闲分区表数据结构voidamalgamate(LinkList&L);//回收后进行合并空闲分区voidrecycle(LinkList&L,structPCB*pList);
6、//回收,从进程表中删除进程,把释放出的空间插入到空闲分区链表中StatusInitList(LinkList&L);///构造一个新的有头节点的空链表LStatusClearList(LinkList&L);///将链表L重置为空表StatusListInsert(LinkList&L,LinkLists1);//根据始址进行插入voidDeleteElem(LinkList&L,intaStartAddr);//删除线性表中始址值为aStartAddr的结点voidPrintList(LinkListL);//输出
7、各结点的值voidcreatP(structPCB*p);///初始化进程intsearch(LinkList&L,intpSize);//检索分区表,返回合适分区的首址intadd(LinkList&L);//返回空闲分区总和voidpListPrint(structPCB*pList);//AAA/输出内存中空间占用情况voiddistribute(LinkList&L,structPCB*process);intListDelete(structPCB*pList,inti)//AAA/删除下标为i的进程{for
8、(;i
此文档下载收益归作者所有