算法思想:
将内存块中的所有的块按照地址递增的顺序连接成一个链表,每次要将新的作业放入内存的时候就按顺序查找内存块链表,每次都是用找到的可以用的第一个内存块。
链表数据结构:
链表结点共有4个区域和一个下指针构成,四个区域分别记录该内存块的起始地址,该内存块长度,内存块的状态和内存块存放的作业编号(没有作业时存放的是0)。
模拟实现的策略:
1.插入操作时依照地址递增的顺序检查可以装入的第一个内存块
若找到,则装入内存中,并且把内部碎片分出来变成新的结点插入链表中
若没找到则分配失败
2.撤销操作时按照作业编号找到要撤销作业所在内存块
若找到,则将状态置位未分配,此时假如前后有可以合并的空内存块则合并
若没有找到,则返回没有找到该作业信息
实现代码:
#include <stdio.h>
#include <stdlib.h>
/*
算法思想:
1.插入操作时依照地址递增的顺序检查可以装入的第一个内存块
若找到,则装入内存中,并且把内部碎片分出来变成新的结点插入链表中
若没找到则分配失败
2.撤销操作时按照作业编号找到要撤销作业所在内存块
若找到,则将状态置位未分配,此时假如前后有可以合并的空内存块则合并
若没有找到,则返回没有找到该作业信息
*/
//使用链表的数据结构
typedef struct LNode{
int address;//表示该分区的起始地址
int length; //表示该分区的长度
int state; //0表示该分区空闲,1表示该分区已分配
int number; //作业的编号
struct LNode *ne