内存的分配与回收实验报告
一.实验目的
通过分区管理,了解操作系统的基本概念,理解计算机系统的资源如何组织,操作系统 如何有效的管理系统资源,用户如何通过操作系统与计算机打交道。
二、实验要求
要求用一种结构化高级语言构造分区,编制动态分区分配算法和回收算法模拟程序,并 掌握分配算法的特点,提高编程技巧和对算法的理解。
三、实验过程
数据结构
1.定义分区 node,包括三个要素:
addr:分区首地址; size:分区大小;next:指向下一个分区的指针
2.定义了三个 node 结构的指针变量:
head1:空闲分区队列首指针 back1:指向释放区 node 结构的指针 assign:指向申请的内存分区 node 结构的指针
3.整型变量 free:用户申请的存储区的大小
过程
- 定义 check 函数,用于检查指定的释放块(由用户键入)的合法性
- 定义 assignment1 函数,实现 First fit 算法
- 定义 assignment2 函数,实现 Best fit 算法
- 定义 acceptment1 函数,实现 first fit 算法的内存回收
- 定义 acceptment2 函数,实现 best fit 算法的内存回收
- 定义 print 函数,打印空闲分区队列
执行:
程序首先申请一整块空闲区,首址为 0,大小为 32767,然后,提示用户使用哪种分配算法, 再提示做何种操作;分配时要求输入申请区的大小,回收时要求输入释放区的首址和大小。
*四、实验源码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_SIZE 32767
typedef struct node
{
int id;
int adr;
int size;
struct node *next;
}Node;
Node *head1,*head2,*back1,*back2,*assign;
int request;
int check(int add,int size,char c)
{
Node *p,*head;
int check=1;
if(add<0||size<0)
check=0;
if(c=='f'||c=='F')
head=head1;
else
head=head2;
p=head->next;
while((p!=NULL)&&check)
if(((add<p->adr)&&(add+size>p->adr))||((add>=p->adr)&&(add<p->adr+p->size)))
check=0;
else
p=p->next;
if(check==0)
printf("\n 输入释放区地址或大小有错误\n");
return check;
}
void init()
{
Node *p,*q;
head1=(Node*)malloc(sizeof(Node));
head2=(Node*)malloc(sizeof(Node));
p=(Node*)malloc(sizeof(Node));
q=(Node*)malloc(sizeof(Node));
head1->next=p;
head2->next=q;
p->size=q->size=MAX_SIZE;
p->adr=q->adr=0;
p->next=q->next=NULL;
p->id=q->id=0;
}
Node* assignment1(int num,int req)
{
Node *before,*after