栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

操作系统 | 实验六 设备管理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

操作系统 | 实验六 设备管理

文章目录
  • 一、实验目的
  • 二、实验内容
  • 三、数据结构
    • 3.1 数据结构
    • 3.2 函数以及功能
  • 四、程序流程图
  • 五、实验代码
  • 六、实验结果
  • 七、实验体会总结

一、实验目的

①理解设备管理的概念和任务。
②掌握独占设备的分配、回收等主要算法的原理并编程实现。

二、实验内容

在Windows系统中,编写程序实现对独占设备的分配与回收的模拟,该程序中包括:建立设备类表和设备表、分配设备和回收设备的函数。

三、数据结构 3.1 数据结构
struct EquipType
{
	char type[10];//设备类名
	int count;//拥有设备数量
	int remain;//现存的可用设备数量
	int address;//该类设备在设备表中的起始地址
}equip_type[N]; //设备类表定义,假设系统有n个设备类型

struct Equipment
{
	int number;//设备绝对号
	bool status;//设备状态可否使用
	bool isRemain;//设备是否已分配
	char jobName[10];//占有设备的作业名称
	int lnumber;//设备相对号
}equipment[M]; //设备表定义,假设系统有m个设备
3.2 函数以及功能
函数名称功能描述
bool Allocate(char* job,char* type,int mm)设备分配函数
bool Reclaim(char* job,char* type)设备回收函数
void DisplayInfo()信息作者展示
int main()main函数
四、程序流程图

五、实验代码
#include 
#include 
#define N 3//假设系统有3类设备
#define M 5//假设系统有5个设备
#define SYSINFO "设备管理演示" // 系统信息 
#define AUTHOR "Yrani - 依然
" //作者 



struct EquipType
{
	char type[10];//设备类名
	int count;//拥有设备数量
	int remain;//现存的可用设备数量
	int address;//该类设备在设备表中的起始地址
}equip_type[N]; //设备类表定义,假设系统有n个设备类型

struct Equipment
{
	int number;//设备绝对号
	bool status;//设备状态可否使用
	bool isRemain;//设备是否已分配
	char jobName[10];//占有设备的作业名称
	int lnumber;//设备相对号
}equipment[M]; //设备表定义,假设系统有m个设备


//信息展示
void DisplayInfo()
{
	printf("★★★★★★★★★★★★★★★★★★n");
	printf("★☆☆☆ |  %s  | ☆☆☆★n",SYSINFO);
	printf("★☆☆☆ | @Author:%s | ☆☆☆★n",AUTHOR);
	printf("★☆☆☆ ------------------ ☆☆☆★n");
	printf("★☆☆☆ |    1、分配	 |  ☆☆☆★n");
	printf("★☆☆☆ |    2、回收	 |  ☆☆☆★n");
	printf("★☆☆☆ |    3、显示 	 |  ☆☆☆★n");
	printf("★☆☆☆ |    0、退出	 |  ☆☆☆★n");
	printf("★☆☆☆ ------------------ ☆☆☆★n");
	printf("★★★★★★★★★★★★★★★★★★n");

}

//设备分配函数
bool Allocate(char* job,char* type,int mm)
{
	int i = 0, t;
	//查询该类设备
	while(i < N && strcmp(equip_type[i].type,type)!=0) i++;
	//没有找到该类设备
	if(i >= N)
	{
		printf("无该类设备,设备分配请求失败n");
		return false;
	}
	//所需设备现存的可用数量不足
	if(equip_type[i].remain < 1)
	{
		printf("该类设备数量不足,设备分配请求失败n");
		return false;
	}
	//得到该类设备在设备表中的起始地址
	t = equip_type[i].address;
	while(!(equipment[t].status == true&&equipment[t].isRemain == false))
	{
		t++;
	}
	//填写作业名、设备相对号,状态
	equip_type[i].remain--;
	equipment[t].isRemain = true;
	strcpy(equipment[t].jobName,job);
	equipment[t].lnumber = mm;
	return true;
}


//设备回收函数
bool Reclaim(char* job,char* type)
{
	int i = 0,t,j,k=0,nn;
	while(i < N && strcmp(equip_type[i].type,type) != 0)i++;
	//没有找到该类设备
	if(i >= N)
	{
		printf("无该类设备,设备分配请求失败");
		return false;
	}
	//得到该类设备在设备表中的起始地址
	t = equip_type[i].address;
	//得到该设备的数量
	j = equip_type[i].count;
	nn = t+j;
	//修改设备为可使用状态和该类型设备可用数量
	for(; t < nn; t++)
	{
		if(strcmp(equipment[t].jobName,job)==0 && equipment[t].isRemain == true)
		{
			equipment[t].isRemain = false;
			k ++;
		}
	}
	
	equip_type[i].remain = equip_type[i].remain + k;
	
	if(k == 0)
	{
		printf("作业没有使用该类设备");
		return true;
	}

}

int main()
{
	char job[10];
	int i, mm, choose;
	char type[10];
	strcpy(equip_type[0].type,"input");//设备类型:输入设备
	equip_type[0].count = 2;
	equip_type[0].remain = 2;
	equip_type[0].address = 0;
	strcpy(equip_type[1].type,"printer");
	equip_type[1].count = 3;
	equip_type[1].remain = 3;
	equip_type[1].address = 2;
	strcpy(equip_type[2].type,"camera");
	equip_type[2].count = 4;
	equip_type[2].remain = 4;
	equip_type[2].address = 5;
	for(i = 0; i < M; i++)
	{
		equipment[i].number = i;
		equipment[i].status = true;
		equipment[i].isRemain = false;
	}
	
	while(1)
	{
		DisplayInfo();
		printf("请选择功能项:n");
		scanf("%d", &choose);
		switch(choose)
		{
			case 0:
				return 0;
			case 1:
				printf("请输入作业名、作业所需设备类和设备相对号n");
				scanf("%s%s%d",job,type,&mm);
				Allocate(job,type,mm);//分配设备
				break;
			case 2:
				printf("请输入作业名和作业要归还的设备类型n");
				scanf("%s%s",job,type);
				Reclaim(job,type);//回收设备
				break;
			case 3:
				printf("n输出设备类表:n");
				printf("设备类型t设备数量t空闲设备数量n");
				for(i=0; i < N; i++)
				{
					printf("%8s%10d%18dn",equip_type[i].type,equip_type[i].count,equip_type[i].remain);
				}
				
				printf("---------------------------------------------------------------------------n");
				printf("输出设备表:n");
				printf("绝对号t状态 是否分配t占用作业名t相对号n");
				for(i = 0; i < M; i++)
				{
					printf("%3d%8d%7d%14s%11dn",equipment[i].number,equipment[i].status,equipment[i].isRemain,equipment[i].jobName,equipment[i].lnumber);
				}
				
				break;
			default:
				return 0;
		}
	}

	return 0;
}
六、实验结果

1. 设备分配及回收主界面

2. 显示设备类、拥有的设备数量、及空闲设备数量

3. 设备分配(作业名:键盘 设备类:input,相对号:101)

4. 显示设备查看是否分配成功(input设备类型空闲设备量剩余1)

5. 回收设备(作业名:键盘 设备类:input,相对号:101)

6. 显示设备信息查看是否回收成功(input设备类型空闲设备量已变回2)

7. 进行设备的分配(作业名:打印机,设备类:printer,相对号:102)并显示设备信息

8. 退出

七、实验体会总结

总结与体会:

  1. 此次实验思路较为容易理解,也很好调试,相较于前一次实验,难度降低很多。
  2. 此次实验的目的是实现设备管理,设备管理包概括设备管理的概念和任务,以及独占设备的分配,和回收算法的实现。
  3. 通过此次实验拓展了我对设备管理的认识,加深了对独占设备的分配,以及回收算法的理解与掌握。
  4. 其中设备管理实现了设备的分配、回收、显示。
  5. 分配设备就会使得设备类型被分配掉一个,设备类型为input的空闲设备数量减少1。
  6. 回收设备以后相应的资源数量就会被归还回来,从而使得数量+1
  7. 显示就是需要把变量的信息打印出来,进行展示,更为直观。
  8. 代码的规范程度越来越高了!一定要坚持下去,写出更漂亮的代码!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1006255.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号