固定分区存储管理

固定分区存储管理,第1张

固定分区存储管理(C语言) 课程

*** 作系统

实验名称

固定分区存储管理

实验要求

1、 实现固定分区存储管理方式下存储空间的分配和回收。
2、 已知当前内存分配表如下

分区号起始地址长度状态
110KB30KBJob5
240KB7KB0
347KB50KBJob2

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()模块流程图:

实验结果

实验总结

通过此次实验,加深了对 *** 作系统存储管理功能中的固定分区管理方式、主存分配表等相应知识的理解,对 *** 作系统怎么实现存储管理有了初步的认识,固定分区的优势是实现简单,只需要极少的 *** 作系统开销,它也有很多的缺点,例如:有部分碎片,对内存的使用不充分。活动进程的最大数目也是固定的。

教师评语

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/756639.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-30
下一篇 2022-04-30

发表评论

登录后才能评论

评论列表(0条)

保存