操作系统-首次适应算法

这篇博客介绍了一个使用链表实现的操作系统内存管理的首次适应算法。通过链表来存储内存分配的空闲区,简化了内存的回收和分配。文章详细阐述了初始化、分配、回收和查看内存分配的情况,并提供了相应的C语言代码实现。
摘要由CSDN通过智能技术生成

操作系统的课程,课本的知识很容易懂,我的想法是用数组存储内存分配的空闲区,初始的空闲区的个数和大小是固定的,随着后期的回收分配才会有改变,可是这样很麻烦,应该用链表会使回收和分配方便很多

所以运用链表操作首次适应算法时初始化内存分配的空闲区大小是固定的,接下来的代码是初始化的大小为用户输入的max,然后就可以进行分割

回收的时候回考虑三种情况:

一是回收的区域的前一块和后一块均是空闲区,则将三块合为一块

二是只有前一块是空闲区,后一块不是,则将前一块和将回收的区域合并

三是 只有后一块是空闲区,前一块不是,则将后一块和将回收的区域合并

代码是大多参考别人的,也有自己完善的部分

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#define Free 0 //空闲状态
#define Busy 1 //已用状态
#define OK 1    //完成
#define ERROR 0 //出错
typedef int Status;
int flag;
/**
 *设置空闲块
 *有三个标识符
 *address起始地址
 *size空闲块大小
 *state空闲块状态
 */
typedef struct freearea
{
    int address;//空闲区地址
    int size;//作业空间大小
    int state;//空闲去状态
}ElemType;
/**
 *设置链表指针
 */
typedef struct DuLNode
{
    ElemType data;
    struct DuLNode *prior;
    struct DuLNode *next;
}DuLNode, *DuLinkList;
/**
 *block_first
 *链表首地址
 *block_last
 *链表尾地址
 */
DuLinkList block_first;
DuLinkList block_last;
void alloc(int);
void free(int);
Status FF(int);
void show();
void initblock();
/**
 *初始化内存
 *传入用户需设置的内存大小MAX_length
 */
void initblock(int MAX_length)
{
    block_first=(DuLinkList)malloc(sizeof(DuLNode));
    block_last=(DuLinkList)ma

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值