操作系统实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
郑州航空工业管理学院
计算机科学与应用系课程设计报告操作系统原理
目录
1 题目简述 (2)
2 需求分析 (2)
2.1设计思想 (2)
2.2要求 (3)
2.3任务 (3)
2.4运行环境 (3)
2.5开发工具 (3)
3 概要设计与详细设计 (3)
3.1系统流程图 (3)
3.2算法流程图 (5)
4 编码与实现 (10)
4.1数据结构和算法设计 (10)
4.2程序调试与截图 (10)
5 课程设计总结 (17)
参考文献 (18)
附录 (19)
动态分区分配算法的模拟
1 题目简述
动态分区分配是根据进程的实际需要,动态地为之分配内存空间。在实现可变分区分配时,将涉及到分区分配中所用到的数据结构、分配算法和分区的分配与回收操作。常用的数据结构有空闲分区表和空闲分区链两种,分区分配算法主要有首次适应算法、最佳适应算法、最坏适应算法等。
本次试验通过C语言进行编程调试并运行,形象地表现出动态分区分配方式,直观地展示了首次适应算法、最佳适应算法、最坏适应算法对内存的释放和回收方式之间的区别。加深了我对三种算法优缺点的理解,帮助我了解一些数据结构和分配算法,进一步加深我对动态分区存储器管理方式及其实现过程的理解。主要问题在于,如何解决三种算法对内存的释放和回收空间的表示。
动态分区分配又称为可变分区分配,这种分配方式并不是事先将主存划分成一块块的分区,而是在作业进入主存时,根据作业的大小动态地建立分区,并使分区的大小正好适适应作业的需要。因此,分区中的大小是可变的,分区的数目也是可变的。
2 需求分析
2.1设计思想
(1)首次适应算法(First_fit)
空闲分区链以地址递增的次序连接。在分配内存时,从联手开始顺序查找,直到找到一个大小能满足要求的空闲分区为止;然后再按照作业大小,从该分区划出一块内存空间给请求者,余下的空闲分区仍然留在空闲链中。若从链首直至链尾都找不到一个能满足要求的分区,则此次内存分配失败。
(2)最佳适应算法(Best_fit)
它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。(4)最坏适应算法(Worst_fit)
最坏适应分配算法要扫描整个空闲分区或链表,总是挑选一个最大的空闲分区分割给作业使用。该算法要求将所有的空闲分区按其容量从大到小的顺序形成一空闲分区链,查找时只要看第一个分区能否满足作业要求。优点是可使剩下的空闲分区不至于太小,产生碎片的几率最小,对中、小作业有利,同时该算法查找效率很高。
(4)内存回收(Free)
将释放作业所在内存块若改为空闲状态,删除其作业名,变为空。然后判断该空闲块是否与其他空闲块相连,若释放的内存空间与空闲块相连时,则合并其为同一个空闲链表,同时修改开始地址及分区大小。
2.2要求
(1)用C++语言实现程序设计;
(2)利用结构体进行相关信息处理;
(3)画出查询模块的流程图;
(4)界面友好(良好的人机互交),程序要有注释。
2.3任务
(1)掌握为实现多道程序并发执行,操作系统是如何通过作业调度选择作业进入内存;
(2)系统如何为进入内存的作业分配内存空间,实现多道作业同时驻留内存,就绪进程队列中的多个进程是如何以分式方式共享CPU,作业运行完成离开系统时,系统如何进行内存回收,计算进程周转时间;
(3)画出所有模块的流程图;
(4)编写代码;
(5)程序分析与调试。
2.4运行环境
(1)WINDOWS2000/XP系统
(2)Microsoft Visual C++ 6.0编译环境
2.5开发工具
C++语言
本程序采用C语言编写,在Windows下的Visual C++环境下编译,模拟可变分区存储管理方式的内存分配与回收。
3 概要设计与详细设计
3.1系统流程图
3.1.1系统流程图
图3.1.1 系统流程图
3.2算法流程图
3.2.1内存分配流程图
图3.2.1 内存分配流程图
3.2.2.首次适应算法流程图
图3.2.2 首次适应算法流程图
3.2.3最佳适应算法流程图
图3.2.3 最佳适应算法流程图
3.2.4 最坏适应算法流程图
图3.2.4 最坏适应算法流程图
3.2.5 内存回收流程图
图3.2.5 内存回收流程图
4 编码与实现
4.1数据结构和算法设计
相关数据结构定义:
空闲分区结构:typedef struct freearea()
线性链表结构:typedef struct DuLNode()
带头结点内存空间链表结构:Status Initblock()
内存分配:Status alloc()
显示主存:void show()
测试类(主函数类):class TestForMemManage
4.2程序调试与截图
1)首界面
2)首次适应算法
测试数据:为作业申请空闲区800KB。作业1申请资源100kb,作业2申请资源120kb,作业3申请资源130kb,作业4申请资源140kb,释放作业1和作业3,作业5申请资源160kb,这时,按照表从头开始查询,第一个找到满足条件的就停止查找,并分配资源。运行结果如下图所示: