动态分区分配管理系统
- 格式:doc
- 大小:806.00 KB
- 文档页数:27
动态分区分配管理系统
学院
专业
学号
学生姓名
指导教师姓名
2014年3月14 日
目录
1程序设计的内容和相关的要求---------------------------------2 2程序总的功能说明--------------------------------------------3 3程序的模块的说明--------------------------------------------4 4程序设计的流程图--------------------------------------------5 5程序的操作说明及运行结果-----------------------------------7 6源程序-------------------------------------------------------11 7心得体会----------------------------------------------------27
1程序设计的内容和相关的要求:
课程设计的目的:操作系统课程设计是计算机学院重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
● 进一步巩固和复习操作系统的基础知识。
● 培养学生结构化程序、模块化程序设计的方法和能力。
● 提高学生调试程序的技巧和软件设计的能力。
● 提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能
力。
实现的任务:编写一个动态分区分配程序。
设计内容:
用高级语言编写和调试一个动态分区内存分配程序,演示实现下列两种动态分区分配算法
1.首次适应算法
2.循环首次适应算法
设计要求:
1.内存中有0-100M的空间为用户程序空间,最开始用户空间是空闲的;
2.作业数量、作业大小、进入内存空间、运行时间需要通过界面进行输入;
3.可读取样例数据(要求存放在外部文件夹中)进行作业数量、作业大小、进图内存时间、运行时间的初始化;
4.根据作业进图内存的时间,采用简单的先进先出原则进行从外村到内存的调度,作业具有等待(从外存进入内存执行)、装入(在内存可执行)、结束(运行结束,退出内存)三种状态。(为了简化,不考虑cpu的调度与切换,运行时间为作业在内存中驻留的时间);
5.能够自动进行内存分配与回收,可根据需要自动进行紧凑与拼接操作,所有过程均有动态图形变化的显示;
6.采用可视化界面,可随时暂停显示当前内存分配和使用情况图。
2程序总的功能说明:
本程序可以从界面直接输入作业并进行动态的内存分配,也可以自动地生成作业文件并自行调度进行内存分配,每次分配可以选择两种算法(首次适应算法和循环首次算法)中的一种,每次作业结束后可以进入操作主界面进行再次作业的操作。
首次适应算法(First-fit):当要分配内存空间时,就查表,在各空闲区中查找满足大小要求的可用块。只要找到第一个足以满足要球的空闲块就停止查找,并把它分配出去;
如果该空闲空间与所需空间大小一样,则从空闲表中取消该项;如果还有剩余,则余下的部分仍留在空闲表中,但应修改分区大小和分区始址。
循环首次首次适应算法(Next-first):在为进程分配内存空间时,不再是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求的空闲分区,从中划一块与要求大小相等的内存空间分配给作业。
内存回收:将释放作业所在内存块的状态改为空闲状态,删除其作业名,设置为空。并判断该空闲块是否与其他空闲块相连,若释放的内存空间与空闲块相连时,则合并为同一个空闲块,同时修改分区大小及起始地址。
3程各模块的功能说明:
(1)界面显示函数:
showInterface(PL p,Job job);显示操作界面
showJob(Job job);显示作业链表;
showPartitiion(PL pl)显示分区链表
(2)执行练习的功能函数:
copyJob(Job p);作业链表复制函数函数
InitpartitionList(PL &p);链表初始化分区函数函数
CreateJoblist(Job &job,int count);创建作业链表函数
InsertNode(Job p,Job &job);按时间顺序创建链表函数
InitpartitionList(PL &p);初始化分区链表函数
(3)文件函数
openFile();打开文件函数
ReadFile();读取文件函数
RandomParameter();随即参数读入文件函数
main()///主函数
4程序设计的流程图:总体设计流程图:
首次适应算法:
回收函数:
五程序操作说明书及结果:
在vc++6.0环境中运行本程序,先进行编译,然后再进行链接,在进行执行将会出现显示界面。按照显示界面上显示的提示进行操作,就可以实现相应的功能:
六源程序:
#include
#include
#include
#include
#include
#define MemorySize 100//为空闲分区分配的最大空间(按题目要求)
int workload;//输入作业的数量;
typedef struct jobList
{
int id; // 作业的name
int size; // 作业大小(需要的存储空间大小)
int intime; //进入时间
int runtime; //运行时间
int state; //作业的状态(0表示等待,1表示执行,2表示结束并释放)
struct jobList *next; // 作业链表指针
} *Job;
typedef struct partitionList
{
int id;
int startAddress; //分区起始地址
int size; //分区大小
int state; //分区的状态
struct partitionList *prior;
struct partitionList *next; // 分区链表指针
}*PL;
FILE *fp;
/************************打开文件***************************/
void openFile()
{
if((fp=(fopen("D:\\作业文件.txt","w")))==NULL)
{
printf("无法打开文件!\n");
exit(0);
}
}
/************************读取文件****************************/
void ReadFile()
{
if((fp=(fopen("D:\\作业文件.txt","r")))==NULL)