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

📄 recycle.c

📁 一些操作系统课程实验的程序
💻 C
字号:
void recycle(int task_no)
{   
	int s,up_neighbor,down_neighbor,i;
    float address,length;
	
	for (s=0; s<USED_TABLE_LEN; s++)
	{
		if (used_table[s].flag == task_no)
			break;
	}
	if (s >= USED_TABLE_LEN) {
		printf("未找到作业,回收失败\n");
		return;
	}

	address = used_table[s].address;
	length = used_table[s].length;
	used_table[s].flag = 0;
	
	up_neighbor = -1;
	down_neighbor = -1;

	i = 0;

	while (1)
	{
		if ((free_table[i].flag == 0) || (up_neighbor != -1) && (down_neighbor != -1))
			break;
		if (!free_table[i].flag) {
			i++;
			continue;
		}
		if (free_table[i].address + free_table[i].length == address) {
			up_neighbor = i++;
			continue;
		}
		if (address + length == free_table[i].address) {
			down_neighbor = i++;
			continue;
		}
		i++;
	}

	if (up_neighbor != -1) {
		if (down_neighbor != -1) {
			free_table[up_neighbor].length =free_table[up_neighbor].length + length + free_table[down_neighbor].length;
			free_table[down_neighbor].flag = 0;
		}
		else {
			free_table[up_neighbor].length += length;
		}
	}
	else {
		if (down_neighbor != -1) {
			free_table[down_neighbor].length += length;
			free_table[down_neighbor].address = address;
		}
		else {
			for (i=0; i<FREE_TABLE_LEN; i++)
			{
				if (!free_table[i].flag)
					break;
			}
			if (i>=FREE_TABLE_LEN) {
				used_table[s].flag = 1;
				printf("空闲区长度不足,回收失败!!!\n");
			}
			else {
				free_table[i].address = address;
				free_table[i].length = length;
				free_table[i].flag = 1;
			}
		}
	}
	printf("作业 %d 回收成功!\n",task_no);
}

⌨️ 快捷键说明

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