操作系统存储管理—动态不等长存储资源分配算法实验.doc
文本预览下载声明
大学计算机工程学院实验报告
课程名称:网络操作系统 班级: 实验成绩: 指导教师: 姓名: 实验项目名称:存储管理—动态不等长存储资源分配算法 学号: 上机实践日期:
2011-11-25 实验项目编号:7 组号: 上机实践时间: 2学时
一、目的本次实验所涉及并要求掌握的知识点)
理解动态异长存储分区资源管理,掌握所需数据结构和管理程序,了解各种存储分配算法的优点和缺点。
二、内容与
4.编写测试程序,对存储分配表进行初始化。然后对用户输入的请求和释放,按算法动态更新存储分配表,并将每次更新之后的存储分配表在屏幕上显示出来。
三、用环境本次实验所使用的平台和相关软件)
Red Hat Enterprise Linux 5
VMeare
Vi 编辑器
四#ifdef HAVE_CONFIG_H
#include config.h
#endif
#include stdio.h
#include stdlib.h
#define MAPSIZE 100
struct map //存储资源表结构
{
int m_addr;
int m_size;
};
struct map map[MAPSIZE]; //存储资源表
int BF_malloc(struct map *mp,int size)
{
register int a,s;
register struct map *bp,*bpp;
for(bp=mp;bp-m_size;bp++)
{
if(bp-m_size=size)
{ //最佳适应
a=bp-m_addr;
s=bp-m_size;
for(bpp=bp;bpp-m_size;bpp++)
{
if(bpp-m_size=sizebpp-m_sizes)
{
a=bpp-m_addr;
s=bpp-m_size;
bp=bpp;
}
}
bp-m_addr+=size;
if((bp-m_size-=size)==0)
do
{
bp++;
(bp-1)-m_addr=bp-m_addr;
}
while((bp-1)-m_size=bp-m_size);
return(a);
}
}
return (-1);
}
int WF_malloc(struct map *mp,int size)
{
register int a,s;
register struct map *bp,*bpp;
for (bp=mp;bp-m_size;bp++)
{
if(bp-m_size=size)
{
a=bp-m_addr;
s=bp-m_size;
for(bpp=bp;bpp-m_size;bpp++)
{ //最坏适应
if(bpp-m_sizes)
{
a=bpp-m_addr;
s=bpp-m_size;
bp=bpp;
}
}
bp-m_addr+=size;
if((bp-m_size-=size)==0)
do {
bp++;
(bp-1)-m_addr=bp-m_addr;
}
while((bp-1)-m_size=bp-m_size);
return(a);
}
}
return(-1);
}
//存储释放函数
void mfree(struct map *mp,int aa,int size)
{
register struct map *bp;
register int t;
register int a;
a=aa;
for(bp=mp;bp-m_addr=abp-m_size!=0;bp++);
if(bpmp(bp-1)-m_addr+(bp-1)-m_size==a)
{//与前合并
(bp-1)-m_size+=size;
if(a+size==bp-m_addr)
{//前后合并
(bp-1)-m_size+=bp-m_size;
while (bp-m_size)
{
bp++;
(bp-1)-m_addr=bp-m_addr;
(bp-1)-m_size=bp-m_size;
}
}
}
显示全部