实验五独占设备的分配和回收模拟Word格式文档下载.docx

上传人:b****5 文档编号:19509244 上传时间:2023-01-07 格式:DOCX 页数:13 大小:19.02KB
下载 相关 举报
实验五独占设备的分配和回收模拟Word格式文档下载.docx_第1页
第1页 / 共13页
实验五独占设备的分配和回收模拟Word格式文档下载.docx_第2页
第2页 / 共13页
实验五独占设备的分配和回收模拟Word格式文档下载.docx_第3页
第3页 / 共13页
实验五独占设备的分配和回收模拟Word格式文档下载.docx_第4页
第4页 / 共13页
实验五独占设备的分配和回收模拟Word格式文档下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

实验五独占设备的分配和回收模拟Word格式文档下载.docx

《实验五独占设备的分配和回收模拟Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验五独占设备的分配和回收模拟Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。

实验五独占设备的分配和回收模拟Word格式文档下载.docx

已/未分配

占用作业名

相对号

未分配

6

7

8

10

在设备表中,用“1”表示设备好,用“0”表示设备坏;

用“1"

表示设备已分配,用“0”表示设备末分配.

设备类表的数据结构定义如下:

#definen4

struct

{chartype[4];

/*设备类名*/

intcount;

/*拥有设备台数*/

intremain;

/*某类设备现存可用的台数*/

intaddress;

/*该类设备在设备表中的起始地址*/

}equiptype[n]/*设备类表定义,假定系统有n个设备类型*/

设备表的数据结构定义如下:

#definem10

{Intnumber;

/*设备绝对号*/

intstatus;

/*设备好环状态,“o”表示设备坏;

用“l”表示设备好*/

/*设备是否已分配,用“l"

介表示已分配,用“o"

表示末分配*/

charjobname[4];

/*占有设备的作业名*/

intinumber;

/*设备相对号*/

}equipment[m]/*设备表定义,假定系统有m个设备*/

当作业申请某类设备时,系统先查“设备类表”,如果该设备的现存台数可以满足申请要求,则从“设各类表”中得到该类设备的设备表起始地址,然后找到“设备表”中该类设备的起始地址,依次查询该类设备的每一个登记项,找出“好的且末分配”的设备分配给该作业.分配后要修改设备类表中的现存台数,把分配给该作业的设备状态改为“已分配"

且填上占用该设备的作业的作业名和程序中定义的相对号,最后,把设备的绝对号与相对号的对应关系通知用户.

当作业运行完回收设备时,首先要查设备表,比较每一项,找到占用作业名与运行完作业的作业名的一栏,将这一栏的“已/未分配”置为“未分配"

然后将设备表中对应设备类的“现存台数”增1。

实验中,首先要建立“设备类表”和“设备表”,假设系统的模拟设备如下表:

分配设备要求输入作业名、设备类名和相对号,回收设备要求输入作业名和设备类名。

五.实验源代码

#include<

stdio。

h>

#include〈string.h〉

#include<

stdlib.h>

#definefalse0

#definetrue1

#definen4

#definem10

struct

{chartype[10];

/*设备类名*/

/*拥有设备台数*/

intremain;

/*现存的可用设备台数*/

intaddress;

/*该类设备在设备表中的起始地址*/

equiptype[n];

/*设备类表定义,假定系统有n个设备类型*/

{

intnumber;

/*设备绝对号*/

/*设备好坏状态*/

/*设备是否已分配*/

charjobname[4];

/*占有设备的作业名*/

intlnumber;

/*设备相对号*/

equipment[m];

/*设备表定义,假定系统有m个设备*/

 

allocate(char*J,char*type,intcc)

{

inti,t,j;

/*查询该类设备*/

i=0;

while(i〈n&&

strcmp(equiptype[i].type,type)!

=0)

i++;

if(i〉=n)/*没有找到该类设备*/

{

printf(”无该类设备,设备分配失败!

"

);

return(false);

if(equiptype[i].remain〈1)/*所需设备现存可用台数不足*/

printf(”该类设备不足,分配失败!

return(false);

t=equiptype[i].address;

/*取出该类设备在设备表中的起始地址*/

while(!

(equipment[t].status==1&

&

equipment[t].remain==0))

t++;

/*填写作业名、相对号,状态改为已分配*/

equiptype[i]。

remain-—;

equipment[t].remain=1;

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

equipment[t]。

lnumber=cc;

}

/*设备分配函数结束*/

reclaim(char*J,char*type)

inti,t,j,k,nn;

while(i〈n&

&strcmp(equiptype[i]。

type,type)!

i++;

if(i〉=n)/*没有找到该类设备*/

printf("

无该类设备,设备回收失败!

return(false);

t=equiptype[i].address;

/*取出该类设备在设备表中的起始地址*/

j=equiptype[i].count;

/*取出该类设备的数量*/

k=0;

nn=t+j;

for(;

t〈nn;

t++)

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

equipment[t].remain=0;

k++;

equiptype[i]。

remain=equiptype[i]。

remain+k;

if(k==0)

printf("

Thejophaven'

tusethiskindofequitmenttype!

/n”);

}

/*设备回收函数结束*/

voidmain()

charJ[4];

inti,mm,a;

chartype[10];

printf(”设备类初始化:

(请输入相应设备的数量,当前空闲设备数量,设备表起始地址)\n"

);

for(i=0;

i〈4;

i++)/*设备类表初始化:

*/

{

printf(”请输入相应设备类名称:

”);

scanf("

%s”,&equiptype[i]。

type);

printf("

请输入相应设备的数量:

scanf(”%d”,&

equiptype[i].count);

printf(”请输入当前空闲设备数量:

scanf(”%d”,&equiptype[i]。

remain);

请输入设备表起始地址:

”);

scanf(”%d"

,&

equiptype[i]。

address);

for(i=0;

i<

10;

i++)/*设备表初始化:

equipment[i].number=i;

equipment[i].status=1;

equipment[i].remain=0;

while

(1)

\n0-退出,1-分配,2—回收,3—显示”);

\n选择功能项(0—3):

%d”,&a);

switch(a)

case0:

/*a=0程序结束*/

exit(0);

case1:

/*a=1分配设备*/

printf("

输入作业名、作业所需设备类和设备相对号\n"

scanf(”%s%s%d"

,J,type,&mm);

allocate(J,type,mm);

/*分配设备*/

break;

case2:

/*a=2回收设备*/

输入作业名和作业归还的设备类\n"

scanf(”%s%s”,J,type);

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

reclaim(J,type);

/*回收设备*/

case3:

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

printf(”输出设备类表!

\n”);

/*输出设备类表内容*/

设备类型设备总量空闲好设备\n"

for(i=0;

n;

i++)

printf(”%9s%16d%22d%14d\n”,equiptype[i].type,equiptype[i].count,equiptype[i].remain,equiptype[i]。

输出设备表:

\n"

/*输出设备表内容*/

printf(”绝对号好/坏已/未分配占用作业名相对号\n”);

i〈m;

printf(”%3d%11d%15d%15s%9d\n"

equipment[i].number,equipment[i].status,equipment[i].remain,equipment[i].jobname,equipment[i]。

lnumber);

}

测试(运行时屏幕显示,红色字表示从键盘输入)

0一退出,l一分配,2一回收,3一显示

选择功能项(0一3):

输出设备类表:

设备类型设备总量空闲好设备

input22

printer33

disk44

tape11

输出设备表:

绝对号好/坏已/未分配占用作业名相对号

0100

1100

2100

3100

4100

5100

6100

7100

8100

9100

0一退出,l一分配,2一回收,3一显示

选择功能项(0—3):

l

输人作业名、作业所需设备类和设备相对号J1ddd2

无该类设备,设备分配失败

0一退出,l一分配,2一回收,3一显示

选择功能项(0—3):

输人作业名、作业所需设各类和设备相对号J1input1

分配成功

0—退出,l一分配,2一回收,3一显示

选择功能项(0-3):

输入作业名、作业所需设备类和设备相对号J2input3

0一退出,l一分配,2一回收,3一显示

输人作业名、作业所需设各类和设备相对号J1input2

该类设备不足,分配失败

0一退出,l一分配,2一回收,3一显示

选择功能项(0-3):

输入作业名、作业所需设备类和设备相对号J1Printerl

选择功能项(0一3):

输入作业名、作业所需设备类和设备相对号J1Printer2

输入作业名、作业所需设备类和设备相对号J4disk1

0一退出,l一分配,2一回收,3一显示

选择功能项(0一3):

输出设备类表:

input20

printer31

disk43

tape11

输出设备表:

绝对号好/坏已/未分配占用作业名相对号

011J11

111J23

211J11

311J12

4100

511J41

7100

9100

输入作业名和作业归还的设备类J1disk

该作业没有使用该类设备

输入作业名和作业归还的设备类J1ddf

无该类设备,设备回收失败

0一退出,l一分配,2一回收,3一显示

输人作业名和作业归还的设备类J1printer

回收成功

输人作业名和作业归还的设备类J1input

0一退出,回一分配,2一回收,3一显示

输人作业名和作业归还的设备类J4disk

0一退出,l一分配,2一回收,3一显示

input21

printer32

tape11

010J11

210J11

510J41

8100

9100

0一退出,1一分配,2一回收,3一显示

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1