*** 作系统
实验名称固定分区存储管理
实验要求1、 实现固定分区存储管理方式下存储空间的分配和回收。
2、 已知当前内存分配表如下
分区号 | 起始地址 | 长度 | 状态 |
---|---|---|---|
1 | 10KB | 30KB | Job5 |
2 | 40KB | 7KB | 0 |
3 | 47KB | 50KB | Job2 |
3、 有若干个作业申请或释放内存空间,请求如下:
(1) 作业Job6请求资源,申请20KB大小的内存空间;
(2) 作业Job7请求资源,申请5KB大小的内存空间;
(3) 作业Job2执行完毕,释放空间。
4、编写程序实现相应存储空间的分配和回收,若请求成功,修改主分配表,并输出该表,若请求不能满足,输出“分配失败”。
通过编写固定分区存储管理的模拟程序,加深对 *** 作系统存储管理功能中固定分区管理方式、主存分配表等相应知识的理解。
源代码#include "stdio.h"
int begin[]={10,40,47}; //起始地址
int len[]={30,7,50}; //长度
int t[]={5,0,2}; //状态
int n,m,k; // 进程号、完成进程号、申请的资源空间大小
char s; //用于接受判断是否继续时输入的字符变量
//申请资源
void p()
{
int flag=0; //标记1
int flag2=0; //标记2
while(flag==0)
{
int sum=0; //累加器
for(int i=0;i<3;i++)
{
if(t[i]!=0)
sum=sum+1;
}
if(sum==3) //空间满了,跳出循环,进入释放
{
printf("已经满了!不能再添加进程了!\n");
break;
}
printf("请输入需要申请资源的进程号:");
scanf("%d",&n);
while(flag2==0)
{
for(int i=0;i<3;i++)
{
if(n==t[i]) //判断进程是否存在
{
printf("该进程已存在!\n");
printf("请重新输入需要申请资源的进程号:");
scanf("%d",&n);
}
}
}
printf("请输入需要申请资源的内存空间:");
scanf("%d",&k);
for(int i=0;i<3;i++)
{
if(t[i]==0) //状态为0
{
if(k<=len[i]) //申请的资源小于等于分配的空间大小
{
t[i]=n;
printf("申请成功!\n");
//申请成功打印新的分配表
printf("分区号 起始地址 长度 状态\n");
for(int i=0;i<3;i++)
{
printf("%d KB %d KB %d KB %d \n",i+1,begin[i],len[i],t[i]);
}
}
else //申请的资源大于分配的空间大小
{
printf("分配失败!\n");
}
}
}
printf("是否继续申请资源(y/n):");
scanf("%s",&s);
if(s=='n')flag=1;
}
}
//释放
void v()
{
int flag=0;
while(flag==0)
{
printf("请输入需要执行完成的进程号:");
scanf("%d",&m);
for(int i=0;i<3;i++)
{
if(m==t[i])
{
t[i]=0;
//释放成功打印新的分配表
printf("释放成功!\n");
printf("分区号 起始地址 长度 状态\n");
for(int i=0;i<3;i++)
{
printf("%d KB %d KB %d KB %d \n",i+1,begin[i],len[i],t[i]);
}
printf("是否继续需要执行完成的进程号(y/n):");
scanf("%s",&s);
if(s=='n')flag=1;
}
else
{
printf("请重新输入需要执行完成的进程号:");
break;
}
}
}
}
主程序(test01):
int main()
{
//分配表
printf("已知当前内存分配表如下\n");
printf("分区号 起始地址 长度 状态\n");
for(int i=0;i<3;i++)
{
printf(" %d %d KB %d KB %d \n",i+1,begin[i],len[i],t[i]);
}
p();
v();
}
流程图
整体模型图
P()模块流程图:
V()模块流程图:
通过此次实验,加深了对 *** 作系统存储管理功能中的固定分区管理方式、主存分配表等相应知识的理解,对 *** 作系统怎么实现存储管理有了初步的认识,固定分区的优势是实现简单,只需要极少的 *** 作系统开销,它也有很多的缺点,例如:有部分碎片,对内存的使用不充分。活动进程的最大数目也是固定的。
教师评语欢迎分享,转载请注明来源:内存溢出
评论列表(0条)