动态分区分配存储管理系统

  • 格式:doc
  • 大小:291.08 KB
  • 文档页数:18

下载文档原格式

  / 18
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

动态分区分配存储管理系统

一、设计目的与内容

用高级语言编写和调试一个动态分区内存分配程序,演示实现下列两种动态分区分配算

1)首次适应算法

2)循环首次适应算法

1. 内存中有0-100M 的空间为用户程序空间,最开始用户空间是空闲的。

2. 作业数量、作业大小、进入内存时间、运行时间需要通过界面进行输入。

3. 可读取样例数据(要求存放在外部文件中)进行作业数量、作业大小、进入内存时间、

运行时间的初始化。

4. 根据作业进入内存的时间,采用简单的先进先出原则进行从外存到内存的调度,作业具

有等待(从外存进入内存执行)、装入(在内存可执行)、结束(运行结束,退出内存)三种状态。

5. 能够自动进行内存分配与回收,可根据需要自动进行紧凑与拼接操作。

二、算法的基本思想

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、运行结束后显示,并继续选择:

4、退出:

五、结论

作业采用数组形式进行存储,起初想用数组模拟分区,但划分记录比较不易,时间空间复杂度较大,容易混乱,遂决定用链表形式模拟分区情况。基本能运行符合要求,能模拟出动态分区过程及最终结果。

六、源程序及系统文件使用说明

#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;

//-------------------------------------------------------------------------------

int Firstfit(int);//首次适应算法

int Next_fit(int); //循环首次适应算法

void showJob(int); //显示作业表

void showPartiton(DuLinkList);//显示分区表

//-----------------------------------------------------------------------------

//---------------------------全局变量-------------------------------------------

int f;