模拟动态分区存储管理方式的主存分配回收.c

来自「一些操作系统课程实验的程序」· C语言 代码 · 共 123 行

C
123
字号
#include <stdio.h>

#define USED_TABLE_LEN 10
#define FREE_TABLE_LEN 10
#define MINSIZE 1024

struct {
	float address;
	float length;
	int flag;
} used_table[USED_TABLE_LEN];

struct {
	float address;
	float length;
	int flag;
} free_table[FREE_TABLE_LEN];

#include "allot.c"
#include "recycle.c"
#include "show.c"

void welcome();
void initialize();
void run();

main()
{
	initialize();
	welcome();
	run();
}

void welcome()
{
	puts("*************模拟动态分区存储管理方式的主存分配回收实验***************");
	puts("|* Description: 〈操作系统〉实验                                     |");
	puts("|* Copyright: Copyright (c) 2006                                     |");
	puts("|* Company: BJTU                                                     |");
	puts("|* @author HuangHan NO.03281159 JK0306                               |");
	puts("|* @version 1.0                                                      |");
	puts("|                                                                    |");
	puts("|                                                                    |");
	puts("**********************************************************************");
}

void initialize()
{	
	int i;

	for (i=0; i<USED_TABLE_LEN; i++)
	{
		used_table[i].address = 0;
		used_table[i].length = 0;
		used_table[i].flag = 0;
	}
	free_table[0].address = 0;
	free_table[0].length = 100 * 1024;
	free_table[0].flag = 1;
	for (i=1; i<FREE_TABLE_LEN; i++)
	{
		free_table[i].address = free_table[i-1].address + free_table[i-1].length;
		free_table[i].length = 0;
		free_table[i].flag = 0;
	}
}

void run()
{
	int commond_i = 0;
	int task_no = 0;
	int out = 0;
	int i;
	int exit = 0;
	float task_length = 0.0;

	while (!out)
	{
		puts("");
		puts("请选择1、2、3执行相应操作: ");
		puts("1、分配内存块");
		puts("2、回收内存块");
		puts("3、显示分配回收情况");
		puts("4、退出程序");
		scanf("%d",&commond_i);
		switch (commond_i) {
		case 1:
			printf("请输入所分配的作业号: ");
			scanf("%d",&task_no);
			for (i=0; i<USED_TABLE_LEN; i++)
			{
				if (task_no == used_table[i].flag) {
					exit = 1;
					break;
				}
			}
			if (exit) {
				printf("该作业已存在!!!\n");
			}
			else {
				printf("\n请输入作业所需内存块大小: ");
				scanf("%f",&task_length);
				allot(task_no,task_length);
				exit = 0;
			}
			break;
		case 2:
			printf("请输入要回收内存块的作业号: ");
			scanf("%d",&task_no);
			recycle(task_no);
			break;
		case 3:
			show();
			break;
		case 4:
			out = 1;
			break;
		default :
			puts("输入错误");
		}
	}
}

⌨️ 快捷键说明

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