实验三固定分区存储管理汇.doc
文本预览下载声明
课程名称:操作系统
实验三 固定分区存储管理
时间:2010年5月10日星期二,第3-4节 地点:理工楼 学号105072008117 姓名lrtwilly 班级:一班
一、实验目的
通过编写固定分区存储管理的模拟程序,加深对操作系统存储管理功能中的固定分区管理方式、主存分配表等相应知识的理解。
二、实验内容
1、实现固定分区存储管理方式下存储空间的分配和去配。
2、已知当前内存分配表如下:
3、有若个作业申请或释放内存空间,请求如下:
(1)作业J3请求资源,申请5K大小的内存空间;
(2)作业J4申请33K大小的内存空间 ;
(3)作业J1执行完毕,释放空间
4、编写程序实现相应存储空间的分配和去配,若请求成功,修改主存分配表,并输出该表,若请求不能满足,输出“分配失败”。(其中不考虑空闲分区的移动)。
三、实验环境
软件环境:VC ++
硬件环境:微机
四、实验步骤
2.建立结构??存储进程情况。
3.编写算法对进程请求资源进行判断。
4、编写代码调试运行 ,运用数据对算法进行检测。
五、实验代码和结果
#includestdio.h
#define max 10000
typedef struct zone
{
int Znumber[6];
int address[6];
int size[6];
int flag[6];
}zone;
int fenqu(zone Z,int work,int s)
{
int k=-1,min=max;
for(int i=0;i6;i++)
{
if(Z.size [i]=s)
{
if(Z.size [i]-smin)
{
k=i;
min=Z.size [i]-s;
}
}
}
if(k==-1)
{
printf(分区失败\n);
return 0;
}
else
{
Z.flag[k]=work;
return 1;
}
}
void shifang(zone Z,int work)
{
for(int i=0;i6;i++)
{
if(Z.flag[i] ==work)
Z.flag[i] =0;
}
}
void main()
{
zone z;
int s;//作业长度
int w;//作业名称
char J;
printf(请输入内存分配表\n);
printf(分区号,起始地址,长度,占用标志\n);
for(int i=0;i6;i++)
{
scanf(%d,%d,%d,%d,z.Znumber [i],z.address [i],z.size [i],z.flag [i]);
getchar();
}
printf(请输入作业申请\n);
scanf(%c%d,%d,J,w,s);
getchar();
fenqu(z,w,s);
if(fenqu(z,w,s))
{
printf(分区号 起始地址 长度 占用标志\n);
for(int i=0;i6;i++)
{
printf(%d %d %d ,z.Znumber [i],z.address [i],z.size [i]);
if(z.flag[i] !=0)
{
printf(J%d\n,z.flag [i]);
}
else
{
printf(%d\n,z.flag [i]);
}
}
}
printf(请输入作业申请\n);
scanf(%c%d,%d,J,w,s);
getchar();
if(fenqu(z,w,s))
{
printf(分区号 起始地址 长度 占用标志\n);
for(i=0;i6;i++)
{
printf(%d %d %d ,z.Znumber [i],z.address [i],z.size [i]);
if(z.flag[i] !=0)
{
printf(J%d\n,z.flag [i]);
}
else
{
printf(%d\n,z.flag [i]);
}
}
}
printf(请输入释放作业申请\n);
scanf(%c%d,J,w);
shifang(z,w);
printf(分区号 起始地址 长度 占用标志\n);
for(i=0;i6;i++)
{
printf(%d %d %d
显示全部