操作系统-最佳适应算法

最佳适应算法要求设定俩张表,一张存放空闲区从小到大的排序表,另一张为进程的分配表,所以每次进程分配的时候只需要从空闲区表的第一个开始寻找,找到即分配,找不到则输出内存不够

代码:

#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;
/**
 *定义俩张表分别用于存放内存分配表和空闲表
 *内存分配表为*DuLinkList2,空闲表为*DuLinkList1
 */
typedef struct DuLNode
{
    ElemType data;
    struct DuLNode *prior;
    struct DuLNode *next;
} DuLNode, *DuLinkList1,*DuLinkList2;
/**
 *block_first
 *链表首地址
 *block_last
 *链表尾地址
 */
DuLinkList1 block_first1;
DuLinkList1 block_last1;
DuLinkList2 block_first2;
DuLinkList2 block_last2;
void alloc(int);
void free(int);
Status best(int);
void show();
/**
 *进程分配表DuLinkList2的初始化
 */
void initblock()
{
    block_first2=(DuLinkList2)malloc(sizeof(DuLNode));
    block_last2=(DuLinkList2)malloc(sizeof(DuLNode));
    block_first2->prior=NULL;
    block_first2->next=block_last2;
    block_last2->prior=block_first2;
    block_last2->next=NULL;
}
/**
 *初始化空闲表DuLinkList1
 *传入用户需设置的内存大小MAX_length
 */
void initblock(int MAX_length)
{
    block_first1=(DuLinkList1)malloc(sizeof(DuLNode));
    block_last1=(DuLinkList1)malloc(sizeof(DuLNode));
    block_first1->prior=NULL;
    block_first1->next=block_last1;
    block_last1->prior=block_first1;
    block_last1->next=NULL;
    block_last1->data.address=0;
    block_last1->data.size=MAX_length;
    block_last1->data.state=Free;


}
/**
 *输入进程请求的空闲块大小
 *调用分配空闲块大小的算法best(response)
 */
void alloc()
{
    int request;//用户输入的请求
    printf("请您输入进程所需分配的空间大小:");
    scanf("%d",&reque

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值