操作系统实验 内存的分配与回收 实验报告 一、实验题目:内存的分配与回收 二、实验内容:利用可变分区的首次适应算法,模拟内存的分配与回收。 三、实验目的:掌握可变分区首次适应算法的原理以及其编程实现。 四、实验过程: 1、基本思想:可变分区分配是根据进程的实际需求,动态地为之分配内存空间。首次适应算法要求空闲空间链以地址递增的次序链接。进行内存分配时,从链表头部开始依次检索,找到第一个不小于请求空间大小的空闲空间进行分配。分配时需考虑碎片问题,若分配会导致碎片产生则将整块分区分配。内存的回收需要考虑四种情况:⑴回收分区前后两个分区都空闲,则需要和前后两个分区合并;(2)回收分区只有前一分区空闲,则与前一分区合并;(3)回收分区只有后一分区空闲,则和后一分区合并;(4)回收分区独立,不考虑合并 。 2、主要数据结构: struct FreeArea{ 链结点包含的数据:分区号、大小、起址、标记 int ID; int size; long address; int sign; }; struct Node { 双链表结点结构体:数据区、前向指针、后继指针 FreeArea data; struct Node *prior; struct Node *next; }*DLinkList; 3、输入、输出: 输入: I.内存分配时由键盘输入分区ID 和大小; II.内存回收时由键盘输入需要回收的分区ID; 输出: 输出内存的分配情况(按照地址从低到高) 4、程序流程图: 选择操作choice 输出可选操作 Choice>3 或choice<0 输入有误 Choice==1 验证该分区是否已经被占用 输入分区号 Choice==2 Choice==3 Choice==0 退出 开始 显示分区情况 输入分区号 分区独立 回收 5 、实验结果截屏: 6、源程序代码: #include using namespace std; #define Free 0 //空闲状态 #define Busy 1 //已用状态 #define PBusy 2 //碎片已用状态 #define FINISH 1 //完成 #define FINISH2 1 //完成 #define ERROR 0 //出错 #define memory 512 //最大内存空间为(单位:KB) #define min 10 //碎片最小值(单位:KB) typedef struct FreeArea//空闲链数据 { int ID; int size; long address; int sign; }; typedef struct Node //空闲连结构 { FreeArea data; struct Node *prior; struct Node *next; }*DLinkList; DLinkList head; //头结点 DLinkList tail; //尾结点 int Create()//初始化 { h...