动态分区分配存储管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
动态分区分配存储管理系统
学院
专业
学号
学生姓名
指导教师姓名
2014年3月19 日
一、课题要求
课程设计的目的:
操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
● 进一步巩固和复习操作系统的基础知识。
● 培养学生结构化程序、模块化程序设计的方法和能力。
● 提高学生调试程序的技巧和软件设计的能力。
● 提高学生分析问题、解决问题以及综合利用C 语言进行程序设计的能力。
设计内容:
用高级语言编写和调试一个动态分区内存分配程序,演示实现下列两种动态分区分配算法
1. 首次适应算法
2. 循环首次适应算法
设计要求:
1. 内存中有0-100M 的空间为用户程序空间,最开始用户空间是空闲的
2. 作业数量、作业大小、进入内存时间、运行时间需要通过界面进行输入
3. 可读取样例数据(要求存放在外部文件中)进行作业数量、作业大小、进入内存
时间、运行时间的初始化
4. 根据作业进入内存的时间,采用简单的先进先出原则进行从外存到内存的调度,
作业具有等待(从外存进入内存执行)、装入(在内存可执行)、结束(运行结束,
退出内存)三种状态。(为了简化,不考虑CPU 的调度与切换,运行时间为作业
在内存中驻留的时间)
5. 能够自动进行内存分配与回收,可根据需要自动进行紧凑与拼接操作,所有过程
均有动态图形变化的显示
6. 采用可视化界面,可随时暂停显示当前内存分配和使用情况图。
设计结束需提交下列资料:
1、课程设计报告。报告中至少应包括:相关操作系统的知识介绍,程序总的功能说明、程序各模块的功能说明、程序设计的流程图、源程序清单。
2、源程序和编译连接后的可执行程序文件。
时间安排:
分析设计贮备阶段(1 天)
编程调试阶段(7 天)
写课程设计报告、考核(2 天)
二、算法思想
1、定义基本结构:
1作业结构:
typedef struct JOB
{
int num; //作业号
int size; //作业大小
int ctime; //作业进入时间
int rtime; //作业运行时间
int state; //作业状态
}Job
;
2)分区结构:
typedef struct DuLNode
{
int ID; //分区号
int start; //开始地址
int size; //大小
int state; //0=尚未使用1=使用2=释放
struct DuLNode *prior;//前向指针
struct DuLNode *next; //后向指针
}DuLNode, * DuLinkList;
2、基本操作:
int Firstfit(int);//首次适应算法
int Next_fit(int); //循环首次适应算法
void showJob(int); //显示作业表
void showPartiton(DuLinkList);//显示分区表
DuLinkList InitpartitionList(DuLinkList &p);//初始化
void huishou(DuLinkList pl3,DuLinkList &pl);//回收函数
int Putin(int &n);//输入函数,输入作业相关信息
3、首次适应算法
空闲分区链以地址递增的次序链接,分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止;然后再按照作业的大小,从该分区中划出一块内存空间分配给请求者,取消的空闲分区仍留在空闲链中。若从链首直至链尾都不能找到一个能满足要求的分区,则此次内存分配失败,返回。
4、循环首次适应算法
在为进程分配内存空间时,不再是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。
三、主要功能模块流程图主函数:
首次适应算法:循环首次适应算法
四、系统测试
1、输入界面
2、首次适应算法:
3、循坏首次适应算法:
五、源程序
#include
#include
#include
#include
#define Free 0
#define Use 1
#define MAX_length 100 //最大内存空间为100MB
//--------------作业结构体数组----------------------------
typedef struct JOB
{
int num; //作业号
int size; //作业大小
int ctime; //作业进入时间
int rtime; //作业运行时间
int state; //作业状态
}Job;
typedef struct DuLNode
{
int ID; //分区号
int start; //开始地址
int size; //大小
int state; //0=尚未使用1=使用2=释放
struct DuLNode *prior;//前向指针
struct DuLNode *next; //后向指针
}DuLNode, * DuLinkList;
//-------------------------------------------------------------------------------