操作系统实验3-动态分区存储管理教程.docx
文本预览下载声明
实验三
动态分区存储管理
一:实验目的
了解动态分区存储管理方式中的数据结构和分配算法,加深对动态分区存储管理方式及其实现技术的理解。
二:实验内容
用C语言或Pascal语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程Allocate()和回收过程Free()。其中,空闲分区采用空闲分区链来组织,内存分配时,优先使用空闲区低地址部分的空间。
三:实验类别
动态分区存储管理
四:实验类型
模拟实验
五:主要仪器
计算机
六:结果和小结
七:程序
#includestdio.h
#includetime.h
#includestdlib.h
#define SIZE 640 // 内存初始大小
#define MINSIZE 5 // 碎片最小值
struct memory
{
struct memory *former;//前向指针
int address;//地址
int num;//作业号
int size;//分配内存大小
int state;//状态0表示空闲,1表示已分配
struct memory *next;//后向指针
}linklist;
void intmemory()// 初始化空闲分区链
{
memory *p=(memory *)malloc(sizeof(memory));// 分配初始分区内存
p-address=0;// 给首个分区赋值
p-size=SIZE;
p-state=0;
p-num=-1;
p-former=linklist;
p-next=NULL;
linklist.former=NULL;// 初始化分区头部信息
linklist.next=p;
}
int firstFit(int num, int size)// 首次适应算法
{
memory *p = linklist.next;
while(p != NULL)
{
if(p-state == 0 p-size = size) // 找到要分配的空闲分区
{
if(p-size - size = MINSIZE)// 整块分配
{
p-state = 1;
p-num = num;
}
else // 分配大小为size的区间
{
memory *node=(memory *)malloc(sizeof(memory));
node-address=p-address + size;
node-size=p-size-size;
node-state=0;
node-num=-1;
// 修改分区链节点指针
node-former=p;
node-next=p-next;
if(p-next !=NULL)
{
p-next-former=node;
}
p-next = node;
// 分配空闲区间
p-size = size;
p-state = 1;
p-num = num;
}
printf(内存分配成功!\n);
return 1;
}
p = p-next;
}
printf(找不到合适的内存分区,分配失败...\n);
return 0;
}
int bestFit(int num, int size)// 最佳适应算法
{
memory *tar=NULL;
int tarSize=SIZE + 1;
memory *p=linklist.next;
while(p!=NULL)
{
if(p-state==0 p-size = size p-size tarSize) //寻找最佳空闲区间
{
tar=p;
ta
显示全部