【操作系统】C语言模拟操作系统实现动态分区分配算法

#define _CRT_SECURE_NO_WARNINGS 1 
#include
#include
#include
#include
#define N 10000
int n1;//空闲分区的个数
int n2;//作业区的个数
struct kongxian
{
	int start;  //起址
	int end;    //结束
	int length;  //长度
}kongxian[N];
struct zuoye
{
	int start;  //起址
	int end;   //结束
	int length;  //长度
}zuoye[N];
int cmp1(const void *a, const void *b)
{
	return (*(struct kongxian *)a).start - (*(struct kongxian *)b).start;
}
int cmp2(const void *a, const void *b)
{
	return (*(struct zuoye *)a).start - (*(struct zuoye *)b).start;
}
void init()
{
	n1 = 1;  //初始时只有一个空闲区
	n2 = 0;  //初始没有作业
	kongxian[0].start = 0;
	kongxian[0].end = 511;
	kongxian[0].length = 512;
}
void print1() //打印空闲分区
{
	int i;
	for (i = 0; i= len)  //首次适应算法
				{
					flag = 1;
					break;
				}
			}
			if (!flag)
			{
				printf("内存分配失败\n");
			}
			else
			{
				//将该作业加入作业区里
				zuoye[n2].start = kongxian[i].start;
				zuoye[n2].end = zuoye[n2].start + len;
				zuoye[n2].length = len;
				n2++;  //作业数加1
				if (kongxian[i].length == len) //该分区全部用于分配,删除该空闲分区
				{
					for (j = i; jzuoye[id].end)
					break;
				if (kongxian[i].end == zuoye[id].start)  //待回收的作业上面有空闲分区
				{
					front = 1;
					t1 = i;
				}
				if (kongxian[i].start == zuoye[id].end)  //待回收的作业下面有空闲分区
				{
					behind = 1;
					t2 = i;
				}
			}
			if (!front&&!behind)  //待回收的作业上下均没有空闲分区
			{
				kongxian[n1].start = zuoye[id].start;
				kongxian[n1].end = zuoye[id].end;
				kongxian[n1].length = zuoye[id].length;
				n1++;  //空闲分区增加一个
				qsort(kongxian, n1, sizeof(struct kongxian), cmp1); //插入空闲分区后排序
				for (j = id; j

你可能感兴趣的:(C语言,操作系统)