要求
假设主存当前状态如下:
系统采用最优适应分配算法为作业分配主存空间,而且具有紧凑技术。请编程完成以下步骤(代码中OS区用“o”表示,Job1~job4用a~d表示):
- 输出此时的已分配区表和未分配区表;
- 装入 Job3(35K),输出主存分配后的已分配区表和未分配区表;
- 回收 Job2所占用的主存空间,输出主存回收后的已分配区表和未分配区表;
- 装入 Job4(130K),输出主存分配后的已分配区表和未分配区表。
- 空闲区大小不够时,移动已分配表和未分配表,使空间够用。
定义数据结构:
/*已分配区表的数据结构*/
typedef struct used_table
{
int number; //序号
int address; //已分配区起始地址,单位KB
int length; //已分配分区长度,单位KB
char flag; //已分配区表占用作业名;
struct used_table * next; //指向下一个已分配区节点指针
} used_table; //已分配区表
/*未分配区表的数据结构*/
typedef struct free_table
{
int number; //序号
int address; //空闲区起始地址,单位KB
int length; //空闲区长度,单位KB
struct free_table * next; //指向下一个空闲区节点指针
} free_table; //空闲区表
完整代码
#include <stdio.h>
#include <stdlib.h>
#define N 10
#define M 10
/*已分配区表的数据结构*/
typedef struct used_table
{
int number; //序号
int address; //已分配区起始地址,单位KB
int length; //已分配分区长度,单位KB
char flag; //已分配区表占用作业名;
struct used_table * next; //指向下一个已分配区节点指针
} used_table; //已分配区表
/*未分配区表的数据结构*/
typedef struct free_table
{
int number; //序号
int address; //空闲区起始地址,单位KB
int length; //空闲区长度,单位KB
struct free_table * next; //指向下一个空闲区节点指针
} free_table; //空闲区表
used_table * creat_ut(int count, used_table *head)
{
used_table *q, *p, *h;
head = (used_table *)malloc(sizeof(use