一、实验题目: 模拟动态分区首次适应分配和回收算法
二、实验目的: 通过本实验,可加深理解动态分区分配、回收程序的功能和具体实现,特别是对回收分区的合并的理解。
三、实验环境:
1、硬件:PC机及其兼容机。
2、软件:Windows OS,MS—DOS OS,Turbo C 或 C++、VC++等。
四、实验内容:
1、 设计动态分区首次适应分配、回收算法。
2、 设计“空闲分区表”,格式为:
4、设计显示程序,将“未分配区说明表”和“已分配区说明表”的内容,显示在屏幕上。
5、 初始分配从一个空闲区分配起,回收时要合并空区。
五、运行示例:
六、算法流程图:
七、程序清单:
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<windows.h>
#define N 5
#define MINSIZE 10//最大碎片大小
typedef struct EMP{
int no;//分区编号
int iadd;//起始地址
int length;//长度
int status;//状态 1-占有,0未占有
}EMP;
typedef struct USE{
int no;//分区编号
int iadd;//起始地址
int length;//长度
int status;//状态 1-占有,0未占有
char job[10];//作业名
}USE;
void menu(){
printf("---------OS实验三:模拟动态分区首次适应分配和回收算法---------\n");
printf("---------------------------系统菜单---------------------------\n");
printf("----------------------------1.分配----------------------------\n");
printf("----------------------------2.回收----------------------------\n");
printf("----------------------------3.显示----------------------------\n");
printf("----------------------------0.退出----------------------------\n");
printf("---------------------请输入您需要的功能(0-3)------------------\n");
printf("--------------------------------------------------------------\n");
printf("各功能简要说明:\n");
printf("分配功能:选择该功能后,首先输入需要分配空间的作业名及所需空间的大小。然后,按照首次适用算法从空闲分区表中找到一个合适的分区,若找到,则划分相应的空闲分区给该作业(修改“未分配区说明表”和“已分配区说明表”中的内容);若没有找到,需要给出相应的提示信息。\n");
printf("回收算法:选择该功能后,首先输入需要回收的作业的名称,然后,系统按照该名称从“已分配区说明表”中找到该作业对应的表项,若找到,则回收该分区(修改“未分配区说明表”和“已分配区说明表”中的内容),要注意空闲分区的合并与空闲分区表需要按地址有序调整;若没有找到,则给出相应的提示信息。\n");
printf("显示分区表:将两个分区表的内容显示在屏幕上,以便随时查看程序的运行情况。\n");
}
void allocation(EMP e[],USE u[]){
//分配内存
int i,j,k;
int flag;
char tempname[10]={
'\0'};
int templength;
system(&#