📄 模拟动态分区存储管理方式的主存分配回收.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 + -