动态分区分配存储管理系统 下载本文

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

一、设计目的与内容

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

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、循环首次适应算法

在为进程分配内存空间时,不再是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。

三、主要功能模块流程图

主函数:

开始

输入作业信息、操作

选择信息等

Switch 输出并继续选择

1 3 首次适应算法 2 循环首次适应

结束

首次适应算法: 循环首次适应算法