可变分区存储管理下主存空间分配回收(最优适应分配算法)

本文探讨了在可变分区存储管理下,如何使用最优适应分配算法进行主存空间的分配和回收。通过编程实现,详细展示了在分配Job3(35K)、回收Job2、装载Job4(130K)时的主存状态变化,以及当空间不足时如何通过紧凑技术调整已分配和未分配区表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要求

假设主存当前状态如下:

 系统采用最优适应分配算法为作业分配主存空间,而且具有紧凑技术。请编程完成以下步骤(代码中OS区用“o”表示,Job1~job4用a~d表示):

  1. 输出此时的已分配区表和未分配区表;
  2. 装入 Job3(35K),输出主存分配后的已分配区表和未分配区表;
  3. 回收 Job2所占用的主存空间,输出主存回收后的已分配区表和未分配区表;
  4. 装入 Job4(130K),输出主存分配后的已分配区表和未分配区表。
  5. 空闲区大小不够时,移动已分配表和未分配表,使空间够用。

 定义数据结构:

/*已分配区表的数据结构*/
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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值