⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 allot.c

📁 一些操作系统课程实验的程序
💻 C
字号:
void allot(int task_no, float size)
{
	int i, k, first_meet;
	float ad, xk;
	
	k = -1;
	first_meet = 1;
	xk = size;



	i = 0;
	while (i < FREE_TABLE_LEN)
	{
		if (free_table[i].flag && (free_table[i].length >= size)) {
			if (first_meet || (free_table[i].length < free_table[k].length)) {
				k = i;
			}
			i++;
		}
		else {
			i++;
		}
	}
	if (k == -1) {
		printf("没有合适的空闲区,分配失败!\n");
		return;
	}
	else {
		if (free_table[k].length - size <= MINSIZE) {
			free_table[k].flag = 0;
			ad = free_table[k].address;
			xk = free_table[k].length;
		}
		else {
			free_table[k].length -= size;
			ad = free_table[k].address + free_table[k].length;
		}
		i = 0;
		for (; used_table[i].flag != 0; i++);
		if (i < USED_TABLE_LEN) {
			used_table[i].address = ad;
			used_table[i].length = xk;
			used_table[i].flag = task_no;
			printf("分配成功!\n");
			return;
		}
		else {
			if (free_table[k].flag == 0) {
				free_table[k].flag = 1;
			}
			else {
				free_table[k].length += xk;
				printf("分配区已满,分配失败\n");
				return;
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -