操作系统课程设计报告最佳适应算法模拟实现内存分配与回收.doc
《操作系统课程设计报告最佳适应算法模拟实现内存分配与回收.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计报告最佳适应算法模拟实现内存分配与回收.doc(21页珍藏版)》请在沃文网上搜索。
1、目 录一、概述3 1设计目的3 2开发环境33任务分配3二、需求分析3三、实验基本原理41可变分区存储管理之最优适应分配算法的概念42关于最优适应分配算法的一些基本原理4四、数据结构设计4 1内存块与作业块4 2程序流程图5 2.1整体程序流程图5 2.2内存分配allocate()流程图6 2.3内存回收callback()流程图7五、算法的实现7 1程序主要功能函数设计思想7 2源程序清单83测试用例与程序运行结果截图18六、总结21 1经验总结212心得与体会21七、参考文献2221一、概述1、设计目的(1)了解多道程序系统中,多个进程并发执行的内存资源分配。 (2)模拟可变分区存储管理
2、算法实现分区管理的最佳适应分配算法(3)利用最佳适应算法动态实现内存分配与回收(3)通过实现最佳算法来进一步了解动态分区模式的优缺点。 (4)掌握最佳适应分配算法,深刻了解各进程在内存中的具体分配策略。 2、开发环境PC机DOS;WINDOWS环境Visual C+6.0 for Windows3、任务分配设计人员设计任务王果程序总体设计,部分内存回收的实现,上机编码和调试,程序后期优化刘芳麟部分内存分配的实现,编写文档,设计测试用例何超英部分内存分配的实现,编写文档,数据结构设计高超部分内存回收的实现,资料收集,需求分析二、需求分析克服固定分区中的主存资源的浪费,有利于多道程序设计,提高主存
3、资源的利用率。三、实验基本原理、可变分区存储管理之最优适应算法分配的概念:分区存储管理是给内存中的进程划分适当大小的存储区,以连续存储各进程的程序和数据,使各进程能并发地执行。最优适应分配算法扫描整个未分配区表或链表,从空闲区中挑选一个能满足用户进程要求的最小分区进行分配。2、关于最优适应的一些基本原理: 在可变分区模式下,在系统初启且用户作业尚未装入主存储器之前,整个用户区是一个大空闲分区,随着作业的装入和撤离,主存空间被分成许多分区,有的分区被占用,而有的分区时空闲的。为了方便主存空间的分配和去配,用于管理的数据结构可由两张表组成:“已分配区表”和“未分配区表”。在“未分配表中”将空闲区按
4、长度递增顺序排列,当装入新作业时,从未分配区表中挑选一个能满足用户进程要求的最小分区进行分配。这时从已分配表中找出一个空栏目登记新作业的起始地址和占用长度,同时修改未分配区表中空闲区的长度和起始地址。当作业撤离时已分配区表中的相应状态变为“空”,而将收回的分区登记到未分配区表中,若有相邻空闲区再将其连接后登记。可变分区的回收算法较为复杂,当一个作业撤离时,可分为4种情况:其临近都有作业(A和B),其一边有作业(A或B),其两边均为空闲区。尤其重要的是,在程序中利用“ new 类型T(初值列表)”申请分配用于存放T类型数据的内存空间,利用 “delete 指针名”释放指针所指向的内存空间。 四、
5、数据结构设计1、(1)内存块struct space /定义内存空间结构体 long startaddress; long length; struct space *next;space *pbc; (2)作业块struct work /定义进程结构体 char name20; long startaddress; long length; struct work *next;work *S; 2、程序流程图 2.1、整体程序流程图2.2、内存分配allocate()流程图2.3、内存回收callback()流程图五、算法的实现1、程序主要功能函数设计思想 allocate() : 实现内存
6、分配,并在当中调用display(pbc),以及display(S) 两个函数显示内存分配完后的空闲块链表和进程链表情况。 requireback(): 实现内存回收,在满足情况的条件下调用allocate()对用户申请的内存块进行回收并在当中调用display(pbc),以及display(S)显示内存回收完后的空闲块链表和进程链表情况。 callback(): 按内存回收时的四种情况对内存进行回收。display(pbc): 对空闲块链表中的空闲块进行从小到大排序并显示空闲链情况。display(S): 对进程链表中的进程进行从小到大排序并显示进程链情况。main(): 创建并初始化空闲块
7、链表和进程链链表,用户选择操作功能2、程序清单#include #include#include struct space /定义内存空间结构体 long startaddress; long length; struct space *next;space *pbc; /申明结构体指针struct work /定义进程结构体 char name20; long startaddress; long length; struct work *next;work *S; /申明结构体指针void callback(work *r); /申明callback()函数原型void display(s
8、pace *pbc); /申明display()函数原型void display(work *S); void allocate() /内存分配函数实现 work *q,*w; q=new work; /申请分配用于存放work类型的数据的内存空间 cout请输入进程名和占用空间大小:q-nameq-length; if(q-length=0) /判断输入进程的合法性 cout进程错误.next!=NULL) /进程链不为空 if(strcmp(w-next-name, q-name)=0) /判断进程名是否已经存在 cout此进程名已经存在!next; if(w-next=NULL) /进程
9、名不存在,继续进行内存分配 space *p,*r; p=pbc; r=p; while(p-next!=NULL&p-next-lengthlength) /在空间链中寻找第一个大于所输入的进程大小的空闲块 r=p; p=p-next; if(p-next=NULL) /空闲链中无大于所输入进程空间大小的空闲块 cout空间不足,分配失败!startaddress=p-next-startaddress; /将该空闲块的起始地址赋给所输入的进程 q-next=S-next; S-next=q; /将所输入的进程插入work链首。 p-next-length-=q-length; if(p-n
10、ext-length!=0) /该空闲块空间有剩余,改变该空闲块的起始地址 p-next-startaddress+=q-length; else /该空闲块空间无剩余 if(p-next-next!=NULL) /该空闲块不处于空闲链链尾 p-next=p-next-next; /删除该空闲块,修改空闲链 else r-next=NULL; /该空闲块处于空闲链链尾,修改空闲链 delete p-next; /释放该空闲块的空间 display(pbc); /显示空闲链情况 display(S); /显示进程链情况 void requireback() /用户申请进程回收函数 char na
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 报告 最佳 适应 算法 模拟 实现 内存 分配 回收
