操作系统实验六_设备管理 下载本文

始地址赋给t*/

while(!(equipment[t].status==1 && equipment[t].remain==0))

t++; /*该设备类型起始地

址加一*/

equiptype[i].remain--;

/*剩余设备数减一*/ /*状态改为已分配*/ /*strcpy为字符串拷贝函

equipment[t].remain=1;

strcpy(equipment[t].jobname,J);

数,把J中的字符串拷贝到equipment[t].jobname中*/

/**********************子函数:作业设备回收*****************************/ reclaim(char *J,char *type) {

int i,t,j,k,nn; i=0;

while(i

/*查找欲申请

equipment[t].lnumber=cc;

}

/*设备相对号写入cc*/

归还的设备类型,strcmp函数用于比较equiptype[i].type与type的大小,若相等则返回0*/

i++;

if(i>=n)

/*若没有找到该类设备*/

{ }

精品文档,供参考!

printf(\无该类设备,设备回收失败!\return(false);

t=equiptype[i].address; /*取出该

类设备在设备表中的起始地址赋给t*/

j=equiptype[i].count; /*取出

该类设备的数量赋给j*/

k=0; nn=t+j;

for(;t

if(strcmp(equipment[t].jobname,J)==0&&equipment[t].remain==1) /*

若占用某个设备的作业与欲回收的作业相同且状态为已分配*/

{

equipment[t].remain=0;

/*

则将其状态改为未分配*/

k++;

/*回收

设备计数*/

}

equiptype[i].remain= equiptype[i].remain+k;

/*

该类设备剩余设备数加k*/

if(k==0)

/*若回

收设备计数值k为0,*/ }

/**********************主函数*****************************/ void main( )

{

char J[4]; int i,mm,a; char type[10];

printf(\本作业没有占用这类资源!/n\

精品文档,供参考!

printf(\设备类初始化\\n \

for(i=0;i<4;i++) /*输入设备

类表初始信息*/ {

printf(\请输入相应设备名称:\ scanf(\ printf(\请输入相应设备的数量:\ scanf(\ printf(\请输入当前空闲设备数量:\ scanf(\ printf(\请输入设备表起始地址:\ scanf(\

}

for(i=0;i<10;i++) 备表*/ { equipment[i].number=i; equipment[i].status=1; equipment[i].remain=0;

} while(1) {

printf(\退出,1-分配,2-回收,3-显示\

面*/ printf(\请选择功能(0-3):\ scanf(\ switch(a)

{

case

0

精品文档,供参考!

/*初始化设

/*功能选择界

:

/*a=0程序结束*/

exit(0); case

1

:

/*a=1分配设备*/

printf(\请输入作业名、作业所需设备类型和设备相对号\\n\ scanf(\

allocate(J,type,mm); /*

分配设备*/

break; case

2:

/*a=2回收设备*/

printf(\请输入作业名和作业归还的设备类\\n\

scanf(\ /*输

入要回收的作业名及对应的设备类*/

reclaim(J,type); /*回

收设备*/

break; case

3:

/*a=3 输出设备类表和设备表的内容*/

printf(\输出设备类表!\\n\ /*输出设备类

表内容*/

printf(\设备类型 设备总量 空

闲好设备 起始地址\\n\

printf(\

for(i=0;i

uiptype[i].remain,equiptype[i].address); */

printf(\输出设备表:\\n\ /*输出设备表内容

精品文档,供参考!