动态分区分配存储管理系统.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----->退出程序操作11.首次适应算法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、文件自动生成~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~动态分区分配存储管理系统~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~首次适应算法~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~循环
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
作业信息输入:
作业号:
作业大小:
10
作业进入时间:
作业运行时间:
2
20
将作业按进入时间排序表示:
******************************************
*idsizeintimeruntimestate*
*110130*
*310210*
*220230*
3.退出
(首次适应算法)
请选择算法或退出:
请输入分区首地址:
时钟:
0
开始对作业id:
1进行分配!
*110131*
***************************************
*StartAddridsizestate*
*11101*
*110900*
3进行分配!
2进行分配!
*310211*
*220231*
*113101*
*210800*
*212201*
*410600*
作业id:
3运行结束,释放内存!
*310212*
*113100*
4
1运行结束,释放内存!
*110132*
*11100*
5
2运行结束,释放内存!
*220232*
*212200*
所有进程分配完毕!
1----->返回操作界面,3----->退出程序操作
(循环首次适应算法)
2、文件自动生成
~~~~~~~~~~~~~~~~~~~循环
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2