主存空间的分配和回收实验报告

实验四主存空间的分配和回收

网络工程专业   姓名:蔡利聪  学号:201306114117

一、目的和要求

1. 实验目的

用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解。

2.实验要求

采用连续分配方式之动态分区分配存储管理,使用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法4种算法完成设计(任选两种算法)。

(1)设计一个作业申请队列以及作业完成后的释放顺序,实现主存的分配和回收。采用分区说明表进行。

(2)或在程序运行过程,由用户指定申请与释放。

(3)设计一个空闲区说明表,以保存某时刻主存空间占用情况。把空闲区说明表的变化情况以及各作业的申请、释放情况显示。

二、实验内容

编写并调试一个模拟的内存分配与回收程序,使用首次适应算法、循环首次适应算法对内存空间的分配与回收。

三、实验方法、步骤及结果测试

1.    源程序名:a.cpp

可执行程序名:a.exe

2.    原理分析

(1)编写该程序首先要给定一个一定空间大小的内存,即申请空闲区空间最大值,并且要定义空间的各分区的作业标号、分区起始地址、分区长度,单位为字节、分区表的状态位、前向指针、后向指针、已分配分区表、空闲分区等。

(2)通过定义空间分区后,还要定义空间分区链表并对其进行初始化,对空闲分区和已分配分区进行链表访问,对于空闲分区可以分配给新进来的进程使用,对于已分配的分区,则等进程执行结束后在回收空间,恢复空闲区。通过链表的访问实现整个空间分区的分配与回收。

3.      主要程序段及其解释:

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include <conio.h>
  4 #define nil -1
  5 #define NULL 0
  6 #define maxisize 600    //用户的空闲区空间最大值
  7 #define minisize 4     
  8 #define getspace(type) (type*)malloc(sizeof(type)) //分配空间
  9 struct table{
 10     char job;                 //作业标号
 11     float address;            //分区起始地址
 12     float length;             //分区长度,单位为字节
 13     int flag;                 //分区表的状态位
 14     struct table *FRlink;     //前向指针
 15     struct table *RElink;    //后向指针
 16 }*free_table=NULL,*place;   //已分配分区表,空闲分区表
 17 typedef struct table FRtable;
 18 //空间分区链表初始化
 19 FRtable *init(FRtable *tb)
 20 {
 21     tb->FRlink=NULL;
 22     tb->job=nil;
 23     tb->address=1064;
 24     tb->length=1664;
 25     tb->flag=0;
 26     tb->RElink=NULL;
 27     return tb;
 28 }
 29 //主存分配函数,为作业job分配大小为xk的分区空间
 30 void allocate(char job,float xk,int choice)
 31 {
 32     FRtable *tb,*link;
 33     int k=0;
 34     float temp=600;
 35     if (free_table->FRlink==NULL&&free_table->RElink==NULL)
 36     {
   //给首个作业分配空间,改写分区链表
 37         free_table->job=job;
 38         free_table->length=xk;
 39         free_table->flag=1;
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值