模拟主存储器空间的分配和回收-最佳适应算法

源代码:

#include
#include
#include
using namespace std;

#define n 5 //允许最大作业数目
#define m 5 //允许最大空间分区数目
#define minisize 100 //分配分区时,若找到的最小适合空间作业偏大,则分割该分区

struct{
	float address;//起始地址
	float length;//长度
	int flag;//0表示空闲,否则为已分配,可记录作业名称
}used_table[n];//已分配分区表
struct{
	float address;
	float length;
	int flag;//为1表示未分配,否则为已分配
}free_table[m];//未分配分区表

void allocate(char job,float len){//分配函数
	int i,k=-1;//k表示适合作业最小分区下标
	for(i=0;i=len&&free_table[i].flag==1)
			if(k==-1||free_table[i].lengthn){
		printf("the used_table is full!\n");
		if(free_table[k].flag==0)
			free_table[k].flag=1;
		else{
			free_table[k].length=free_table[k].length+len;//组合分区
			return;
		}
	}else{
		used_table[i].address=ad;
		used_table[i].length=len;
		used_table[i].flag=job;
	}
	return;
}

void reclaim(char job){//回收函数
	int s=0,t;
	while((used_table[s].flag!=job||used_table[s].flag==0)&&s=n){
		printf("can not find the job");
		return;
	}
	used_table[s].flag=0;
	float S=used_table[s].address,L=used_table[s].length;
	int i,j=-1,k=-1;
	for(i=0;i=m){
			cout<<"主存空闲表没有空间,回收失败!"<>job;
				reclaim(job);
				break;
			}
			case 3:{
				printf("The free_table:\n address length flag\n");
				for(i=0;i

运行截图:

初始:

模拟主存储器空间的分配和回收-最佳适应算法_第1张图片

尝试分配:

模拟主存储器空间的分配和回收-最佳适应算法_第2张图片

尝试回收:

模拟主存储器空间的分配和回收-最佳适应算法_第3张图片

退出:

可参考:https://wenku.baidu.com/view/d5aae0f5ba0d4a7302763a42.html

 

 

你可能感兴趣的:(Linux操作系统下的简单编程)