动态分区分配存储管理系统.docx
- 文档编号:15384061
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:56
- 大小:79.98KB
动态分区分配存储管理系统.docx
《动态分区分配存储管理系统.docx》由会员分享,可在线阅读,更多相关《动态分区分配存储管理系统.docx(56页珍藏版)》请在冰点文库上搜索。
动态分区分配存储管理系统
动态分区分配存储管理系统
学院
专业
学号
学生姓名
指导教师姓名
2014年3月20日
目录
1设计目的------------------------------------------------------3
2设计内容------------------------------------------------------3
3设计要求------------------------------------------------------3
4程序总体功能说明---------------------------------------------3
5程序各模块功能说明-------------------------------------------4
6程序设计流程图------------------------------------------------5
7系统测试------------------------------------------------------8
8程序代码-----------------------------------------------------19
9课设总结-----------------------------------------------------34
一、设计目的
操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
●进一步巩固和复习操作系统的基础知识。
●培养学生结构化程序、模块化程序设计的方法和能力。
●提高学生调试程序的技巧和软件设计的能力。
●提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。
二、设计内容
用高级语言编写和调试一个动态分区内存分配程序,演示实现下列两种动态分区分配算法
1.首次适应算法
2.循环首次适应算法
三、设计要求
1.内存中有0-100M的空间为用户程序空间,最开始用户空间是空闲的
2.作业数量、作业大小、进入内存时间、运行时间需要通过界面进行输入
3.可读取样例数据(要求存放在外部文件中)进行作业数量、作业大小、进入内存时间、运行时间的初始化
4.根据作业进入内存的时间,采用简单的先进先出原则进行从外存到内存的调度,作业具有等待(从外存进入内存执行)、装入(在内存可执行)、结束(运行结束,退出内存)三种状态。
(为了简化,不考虑CPU的调度与切换,运行时间为作业在内存中驻留的时间)
5.能够自动进行内存分配与回收,可根据需要自动进行紧凑与拼接操作,所有过程均有动态图形变化的显示
6.采用可视化界面,可随时暂停显示当前内存分配和使用情况图。
四、程序总体功能说明
本程序可以从界面直接输入作业并进行动态的内存分配,也可以自动地生成作业文件并自行调度进行内存分配,每次分配可以选择两种算法(首次适应算法和循环首次算法)中的一种,每次作业结束后可以进入操作主界面进行再次作业的操作。
首次适应算法:
空闲分区链以地址递增的次序链接,分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止;然后再按照作业的大小,从该分区中划出一块内存空间分配给请求者,取消的空闲分区仍留在空闲链中。
若从链首直至链尾都不能找到一个能满足要求的分区,则此次内存分配失败,返回。
循环首次适应算法:
在为进程分配内存空间时,不再是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。
五、程序部分模块功能说明
(1)随机产生文件:
voidRandomParameter()//将随机产生进程的参数写入文件
{
openFile();
srand((unsigned)time(NULL));//初始化随机函数种子
for(inti=0;i { fprintf(fp,"%d%d%d%d%d\n",i+1,rand()%80,rand()%20,rand()%10+1,0); } fclose(fp); } (2)界面显示函数: showInterface(PLp,Jobjob);显示操作界面 showJob(Jobjob);显示作业链表; showPartitiion(PLpl)显示分区链表 (3)执行练习的功能函数: copyJob(Jobp);作业链表复制函数函数 InitpartitionList(PL&p);链表初始化分区函数函数 CreateJoblist(Job&job,intcount);创建作业链表函数 InsertNode(Jobp,Job&job);按时间顺序创建链表函数 InitpartitionList(PL&p);初始化分区链表函数 (4)结构体数组 typedefstructjobList { intid;//作业名 intsize;//作业所需的存储空间大小 intintime;//作业进入时间 intruntime;//作业运行时间 intstate;//作业状态(0表示等待,1表示执行,2表示结束并释放) structjobList*next;//作业链表指针 }*Job; typedefstructpartitionList { intid; intstartAddress;//分区起始地址 intsize;//分区大小 intstate;//分区状态 structpartitionList*prior;//前驱指针 structpartitionList*next;//后继指针 }*PL; FILE*fp; 六、程序设计流程图: 总体设计流程图: 首次适应算法: 循环首次适应算法: 七、系统测试 在vc++6.0环境中运行本程序,先进行编译,然后再进行链接,在进行执行将会出现显示界面。 按照显示界面上显示的提示进行操作,就可以实现相应的功能。 1、从界面输入 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~动态分区分配存储管理系统~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~首次适应算法~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~循环首次适应算法~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 请选择作业生成方式: 1----->界面输入作业: 2----->文件自动生成: 3----->退出系统: 1 请输入作业数目: 3 作业信息输入: 作业号: 1 作业大小: 10 作业进入时间: 1 作业运行时间: 3 作业信息输入: 作业号: 2 作业大小: 20 作业进入时间: 2 作业运行时间: 3 作业信息输入: 作业号: 3 作业大小: 10 作业进入时间: 2 作业运行时间: 1 将作业按进入时间排序表示: ****************************************** *idsizeintimeruntimestate* ****************************************** *110130* *310210* *220230* ****************************************** 1.首次适应算法 2.循环首次适应算法 3.退出 (首次适应算法) 请选择算法或退出: 1 请输入分区首地址: 1 时钟: 0 时钟: 1 开始对作业id: 1进行分配! 将作业按进入时间排序表示: ****************************************** *idsizeintimeruntimestate* ****************************************** *110131* *310210* *220230* ****************************************** *************************************** *StartAddridsizestate* *************************************** *11101* *110900* *************************************** 时钟: 2 开始对作业id: 3进行分配! 开始对作业id: 2进行分配! 将作业按进入时间排序表示: ****************************************** *idsizeintimeruntimestate* ****************************************** *110131* *310211* *220231* ****************************************** *************************************** *StartAddridsizestate* *************************************** *11101* *113101* *210800* *************************************** 将作业按进入时间排序表示: ****************************************** *idsizeintimeruntimestate* ****************************************** *110131* *310211* *220231* ****************************************** *************************************** *StartAddridsizestate* *************************************** *11101* *113101* *212201* *410600* *************************************** 时钟: 3 作业id: 3运行结束,释放内存! 将作业按进入时间排序表示: ****************************************** *idsizeintimeruntimestate* ****************************************** *110131* *310212* *220231* ****************************************** *************************************** *StartAddridsizestate* *************************************** *11101* *113100* *212201* *410600* *************************************** 时钟: 4 作业id: 1运行结束,释放内存! 将作业按进入时间排序表示: ****************************************** *idsizeintimeruntimestate* ****************************************** *110132* *310212* *220231* ****************************************** *************************************** *StartAddridsizestate* *************************************** *11100* *113100* *212201* *410600* *************************************** 时钟: 5 作业id: 2运行结束,释放内存! 将作业按进入时间排序表示: ****************************************** *idsizeintimeruntimestate* ****************************************** *110132* *310212* *220232* ****************************************** *************************************** *StartAddridsizestate* *************************************** *11100* *113100* *212200* *410600* *************************************** 所有进程分配完毕! 1----->返回操作界面,3----->退出程序操作 1 1.首次适应算法 2.循环首次适应算法 3.退出 (循环首次适应算法) 请选择算法或退出: 2 请输入分区首地址: 1 时钟: 0 时钟: 1 开始对作业id: 1进行分配! 将作业按进入时间排序表示: ****************************************** *idsizeintimeruntimestate* ****************************************** *110131* *310210* *220230* ****************************************** *************************************** *StartAddridsizestate* *************************************** *11101* *110900* *************************************** 时钟: 2 开始对作业id: 3进行分配! 开始对作业id: 2进行分配! 将作业按进入时间排序表示: ****************************************** *idsizeintimeruntimestate* ****************************************** *110131* *310211* *220231* ****************************************** *************************************** *StartAddridsizestate* *************************************** *11101* *113101* *210800* *************************************** 将作业按进入时间排序表示: ****************************************** *idsizeintimeruntimestate* ****************************************** *110131* *310211* *220231* ****************************************** *************************************** *StartAddridsizestate* *************************************** *11101* *113101* *212201* *410600* *************************************** 时钟: 3 作业id: 3运行结束,释放内存! 将作业按进入时间排序表示: ****************************************** *idsizeintimeruntimestate* ****************************************** *110131* *310212* *220231* ****************************************** *************************************** *StartAddridsizestate* *************************************** *11101* *113101* *212201* *410600* *************************************** 时钟: 4 作业id: 1运行结束,释放内存! 将作业按进入时间排序表示: ****************************************** *idsizeintimeruntimestate* ****************************************** *110132* *310212* *220231* ****************************************** *************************************** *StartAddridsizestate* *************************************** *11101* *113101* *212201* *410600* *************************************** 时钟: 5 作业id: 2运行结束,释放内存! 将作业按进入时间排序表示: ****************************************** *idsizeintimeruntimestate* ****************************************** *110132* *310212* *220232* ****************************************** *************************************** *StartAddridsizestate* *************************************** *11101* *113101* *212201* *410600* *************************************** 将作业按进入时间排序表示: ****************************************** *idsizeintimeruntimestate* ****************************************** *110132* *310212* *220232* ****************************************** *************************************** *StartAddridsizestate* *************************************** *11100* *113100* *212200* *410600* *************************************** 所有进程分配完毕! 2、文件自动生成 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~动态分区分配存储管理系统~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~首次适应算法~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~循环
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动态 分区 分配 存储 管理 系统