实验六:设备管理---device.c实验目的:1、对理论课中学习的设备管理中的概念作进一步的理解;2、明白设备管理的主要任务;3、了解设备管理任务的主要实现方法;4、通过编程,学会独占设备的分配、回收等主要算法的原理;实验内容:1、编写程序,由必要的数据结构、主函数、设备分配函数及设备回收函数构成,实现对独占设备的分配与回收的模拟。2、模拟实验的程序包括建立设备类表和设备表的程序段,分配设备和回收设备的函数,分配设备要求输入作业名、设备类名和相对号;回收设备要求输入作业名和设备类名。#includestdio.h#includesys/types.h#includeunistd.h#includestdlib.h#includestring.h#definefalse0#definetrue1#definen3#definem5struct{chartype[10];intcount;intremain;intaddress;}equip_type[n];struct{intnumber;intstatus;intremain;charjobname[10];intlnumber;}equipment[m];allocate(char*job,char*type,intmm){inti,t,j;i=0;while(in&&strcmp(equip_type[i].type,type)!=0)i++;if(i=n){printf(Nothedevice,deviceallocateerrno);return(false);}if(equip_type[i].remain1){printf(thereisnomuchdevice,therequestofdeviceisfailure);return(false);}t=equip_type[i].address;while(!(equipment[t].status==1&&equipment[t].remain==0))t++;equip_type[i].remain--;equipment[t].remain=1;strcpy(equipment[t].jobname,job);equipment[t].lnumber=mm;}reclaim(char*job,char*type){inti,t,j,k,nn;i=0;while(in&&strcmp(equip_type[i].type,type)!=0)i++;if(i=n){printf(thereisnothisdevice,thedevicereclaimisfailure);return(false);}t=equip_type[i].address;j=equip_type[i].count;k=0;nn=t+j;for(;tnn;t++)if(strcmp(equipment[t].jobname,job)==0&&equipment[t].remain==1){equipment[t].remain=0;k++;}equip_type[i].remain=equip_type[i].remain+k;if(k==0)printf(jobisnotusethisdevice);}main(){charjob[10];inti,mm,a;chartype[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,disk);equip_type[2].count=4;equip_type[2].remain=4;equip_type[2].address=5;for(i=0;i10;i++){equipment[i].number=i;equipment[i].status=1;equipment[i].remain=0;}while(1){printf(\n0---exit,1---allocate,2---recycle,3---display);printf(\npleaseselectthefunction:);scanf(%d,&a);switch(a){case0:exit(0);case1:printf(pleaseinputthenameofthejob,type,N-device:\n);scanf(%s%s%d,job,type,&mm);allocate(job,type,mm);break;case2:printf(pleaseinputthenameofthejobandthetypeofthedevice:\n);scanf(%s%s,job,type);reclaim(job,type);break;case3:printf(\nthetableofoutputdevice:\n);printf(devicetypedevicenumberIdledevicenumber\n);for(i=0;in;i++)printf(%8s%9d%8d\n,equip_type[i].type,equip_type[i].count,equip_type[i].remain);printf(-----------------------------------\n);printf(outputdevicetable:\n);printf(juedui-Nomberbest/bedallocated/No-allocatedName-jobxiang-dui-Nomber\n);for(i=0;im;i++)printf(%3d%7d%8d%10s%7d\n,equipment[i].number,equipment[i].status,equipment[i].remain,equipment[i].jobname,equipment[i].lnumber);}}}执行结果截图中文注释device003.c文件#includestdio.h#includesys/types.h#includeunistd.h#includestdlib.h#includestring.h#definefalse0#definetrue1#definen3//假设系统有3类设备#definem5//假设系统有5个设备struct{chartype[10];//设备类名intcount;//拥有设备数量intremain;//现存的可用设备数量intaddress;//该类设备在设备表中的起始地址}equip_type[n];//设备类表定义,假设系统有n个设备类型struct{intnumber;//设备绝对号intstatus;//设备状态可否使用intremain;//设备是否已分配charjobname[10];//占有设备的作业名intlnumber;//设备相对号}equipment[m];//设备表定义,假设系统有m个设备allocate(char*job,char*type,intmm){inti,t,j;//查询该类型设备i=0;while(in&&strcmp(equip_type[i].type,type)!=0)i++;//没有找到该类设备if(i=n){printf(无该类设备,设备分配请求失败);return(false);}//所需设备现在可用数量不足if(equip_type[i].remain1){printf(该类设备数量不足,设备分配请求失败);return(false);}t=equip_type[i].address;//得到该类设备在设备表中的起始地址while(!(equipment[t].status==1&&equipment[t].remain==0))t++;//填写作业名、相对号,状态更改为“已分配”equip_type[i].remain--;equipment[t].remain=1;strcpy(equipment[t].jobname,job);equipment[t].lnumber=mm;}//设备分配函数reclaim(char*job,char*type){inti,t,j,k,nn;i=0;while(in&&strcmp(equip_type[i].type,type)!=0)i++;//没有找到该类要回收的设备if(i=n){printf(无该类设备,设备回收失败);return(false);}t=equip_type[i].address;//得到该类型设备在设备表中的起始地址j=equip_type[i].count;//得到该设备的数量k=0;nn=t+j;for(;tnn;t++)if(strcmp(equipment[t].jobname,job)==0&&equipment[t].remain==1){equipment[t].remain=0;k++;}equip_type[i].remain=equip_type[i].remain+k;if(k==0)printf(作业没有使用该类设备);}//设备回收函数main(){charjob[10];inti,mm,a;chartype[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,disk);//设备类型:磁盘equip_type[2].count=4;equip_type[2].remain=4;equip_type[2].address=5;for(i=0;i10;i++){equipment[i].number=i;equipment[i].status=1;equipment[i].remain=0;}while(1){printf(\n0---退出,1---分配,2---回收,3---显示);printf(\n清选择功能项:);scanf(%d,&a);switch(a){case0://a=0程序结束exit(0);case1://a=1分配设备printf(请输入作业名、作业所需设备类型和设备相对号:\n);scanf(%s%s%d,job,type,&mm);allocate(job,type,mm);//分配设备break;case2://a=2回收设备printf(请输入作业名和作业要归还的设备类型:\n);scanf(%s%s,job,type);reclaim(job,type);break;case3://a=3显示设备类表和设备表的内容printf(\n输出设备类表:\n);printf(设备类型设备数量空闲设备数量\n);for(i=0;in;i++)printf(%8s%9d%8d\n,equip_type[i].type,equip_type[i].count,equip_type[i].remain);printf(-------------------------