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

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

📁 一些操作系统课程实验的程序
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -