设备管理Word格式.docx
- 文档编号:309155
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:20
- 大小:87.90KB
设备管理Word格式.docx
《设备管理Word格式.docx》由会员分享,可在线阅读,更多相关《设备管理Word格式.docx(20页珍藏版)》请在冰点文库上搜索。
boolstate;
//通道状态
PCB*use;
//正在使用该通道的进程
PCB*blockqueue;
//阻塞队首
}CHCT;
stringcontrollerID;
//控制器标示
//控制器状态
CHCT*front;
//通道表指针
//正在使用该控制器的进程
}COCT;
chartype;
//设备类型
stringequipmentID;
//设备名
//设备状态
COCT*front;
//控制器指针
//正在使用该设备的进程
}DCT;
DCT*dct;
//设备的DCT
}SDT;
DCT*k=newDCT;
//键盘的DCT
DCT*m=newDCT;
DCT*p=newDCT;
DCT*t=newDCT;
COCT*c1=newCOCT;
COCT*c2=newCOCT;
COCT*c3=newCOCT;
CHCT*h1=newCHCT;
CHCT*h2=newCHCT;
CHCT*h3=newCHCT;
intcheck(charcmd)
{
switch(cmd)
{
case'
c'
:
//申请
return1;
C'
d'
//删除
return2;
D'
a'
//添加
return3;
A'
f'
//释放
return4;
F'
q'
return-1;
Q'
p'
return5;
P'
default:
return0;
}
}
voidinit(vector<
SDT>
&
SDT_table)
SDT_table[0].equipmentID="
M"
;
SDT_table[0].type='
2'
//鼠标是第二类设备
SDT_table[0].dct=m;
//设备的DCT表位置
SDT_table[1].equipmentID="
K"
SDT_table[1].type='
1'
SDT_table[1].dct=k;
SDT_table[2].equipmentID="
P"
SDT_table[2].type='
3'
SDT_table[2].dct=p;
SDT_table[3].equipmentID="
T"
SDT_table[3].type='
4'
SDT_table[3].dct=t;
h1->
blockqueue=NULL;
channelID="
通道1"
state=true;
use=NULL;
h2->
通道2"
c1->
controllerID="
控制器1"
front=h1;
c2->
控制器2"
c3->
控制器3"
front=h2;
k->
equipmentID="
//可用
type='
front=c1;
m->
p->
front=c2;
t->
front=c3;
intmain()
charcmd;
DCT*temp_dct;
COCT*temp_coct;
CHCT*temp_chct;
intl=0;
stringname;
vector<
SDT_table(4);
//设备表
DCT>
DCT_table(4);
//设备
COCT>
COCT_table(3);
//控制器表
//vector<
size_typesize_SDT_table;
//设备表长度
init(SDT_table);
//设备表的初始化
DCTu=*k;
DCT_table.push_back(u);
u=*m;
u=*p;
u=*t;
COCTcu=*c1;
COCT_table.push_back(cu);
cu=*c2;
cu=*c3;
cout<
<
"
目前设备:
K:
键盘
(1)M:
鼠标
(2)P:
打印机(3)T:
显示器(4)"
endl;
c申请使用设备。
d删除设备。
f释放设备。
a添加设备。
while(l!
=-1)
{
>
cin>
cmd;
l=check(cmd);
if(l==0)
指令错误重新输入。
continue;
elseif(l==1)//申请使用设备
想要使用的设备名:
ID;
申请设备的进程名:
name;
PCB*head=newPCB;
//申请PCB的创建和链接
head->
equipment=name;
ID=ID;
next=NULL;
boolfind=false;
iteratorator0;
for(ator0=SDT_table.begin();
ator0!
=SDT_table.end();
ator0++)
if(ator0->
equipmentID==ID)
find=true;
//有该设备
break;
if(!
find)
没有该设备。
temp_dct=ator0->
dct;
temp_dct->
state)//设备忙
该设备目前处于忙状态,已经把请求加入等待队列。
blockqueue)//阻塞的队列为空
temp_dct->
blockqueue=head;
else//阻塞队列已经有内容
PCB*t=temp_dct->
blockqueue;
while(t)
t=t->
next;
t)
else
next=head;
else//设备空闲
temp_coct=temp_dct->
front;
state=false;
use=head;
//添加正在占用设备的进程
temp_coct->
state)//控制器不可用
目前该设备连接的控制器忙,已经把请求加入等待队列."
temp_coct->
else//阻塞队列不空
PCB*t=temp_coct->
else//控制器可用
//控制器置忙
temp_chct=temp_coct->
temp_chct->
state)//通道不可用
目前该设备连接的通道忙,已经把请求加入等待队列."
blockqueue)//阻塞队列为空
temp_chct->
else//阻塞队列不为空
else//通道可用
//通道状态置忙
该设备已经成功申请."
elseif(l==2)//删除设备
iteratorator;
iteratorator1;
现在系统拥有的设备如下:
for(ator=SDT_table.begin();
ator!
ator++)
ator->
equipmentID<
"
想要删除名:
if(ator->
equipmentID==name)//查找到了该设备
ator1=ator->
COCT*temp=ator1->
ator->
dct=NULL;
SDT_table.erase(ator);
//从设备表中删除
ator=SDT_table.begin();
/*
*/
if(temp->
use)
use->
equipment==name)//该设备正在占用控制器
temp->
blockqueue)//控制器的等待队列为空
temp->
else//控制器的等待队列有内容
PCB*tt=temp->
blockqueue->
next=tt->
use=tt;
tt->
else//该设备没有占用控制器
ator1->
front=NULL;
iteratorator2;
D;
for(ator2=DCT_table.begin();
ator2!
=DCT_table.end();
ator2++)
if(ator2!
=ator1)
D.push_back(*ator2);
DCT_table=D;
//ator1=DCT_table.erase(ator1);
//删除该设备
if(ator==SDT_table.end())//判断是否查找到设备
没有该设备"
成功删除该设备。
elseif(l==3)//添加设备
SDTSDT_add;
DCTDCT_add;
intselect;
要添加的设备名:
DCT_add.equipmentID;
SDT_add.equipmentID=DCT_add.equipmentID;
输入设备的类型:
DCT_add.type;
SDT_add.type=DCT_add.type;
SDT_add.dct=&
DCT_add;
DCT_add.blockqueue=NULL;
DCT_add.use=NULL;
DCT_add.state=true;
SDT_table.push_back(SDT_add);
DCT_table.push_back(DCT_add);
是否需要新增控制器:
1.新增2.利用以前的"
select;
if(select==1)//新增
COCTc;
c.blockqueue=NULL;
c.state=true;
控制器的名称:
c.controllerID;
c.use=NULL;
DCT_add.front=&
c;
1."
h1->
channelID<
'
\t'
2."
h2->
链接到哪个通道:
if(select==1)//链接到两个不同的通道
c.front=h1;
c.front=h2;
连接成功."
COCT_table.push_back(c);
else//利用以前的控制器
for(vector<
iteratorator=COCT_table.begin();
=COCT_table.end();
ator++)//输出现有控制器名称
controllerID<
}
选择的控制器名是(按名选择):
for(ator=COCT_table.begin();
ator++)//按名字进行选择
controllerID==name)
DCT_add.front=ator;
链接成功."
elseif(l==4)//释放设备资源
想要释放的设备名:
DCT*DCT_temp;
//暂存DCT
COCT*COCT_temp;
//暂存COCT
CHCT*CHCT_temp;
//暂存CHCT
size_typei=0;
i<
SDT_table.size();
i++)
if(SDT_table[i].equipmentID==name)
DCT_temp=SDT_table[i].dct;
COCT_temp=DCT_temp->
CHCT_temp=COCT_temp->
DCT_temp->
use)//如果该设备没有被使用
该设备未被占用,无需释放。
else//设备现在被占用
if(CHCT_temp->
ID==name)//该设备目前占用通道时
CHCT_temp->
blockqueue)//通道的等待队列无内容
CHCT_temp->
else//通道的等待队列不为空
use=CHCT_temp->
blockqueue=CHCT_temp->
if(COCT_temp->
ID==name)//设备占用控制器
COCT_temp->
COCT_temp->
else//控制器等待队列有内容
use=COCT_temp->
blockqueue=COCT_temp->
blockqueue)//设备自身的等待队列
{//为空
DCT_temp->
else//该设备目前被其他进程申请(队列不空)
use=DCT_temp->
blockqueue=DCT_temp->
use;
if(i==SDT_table.size())
该设备不存在。
成功释放该设备。
return0;
实验结果及分析:
运行结果:
实验心得:
做这个实验之前先复习了课本中的理论知识和算法,对课堂上学习的设备管理中的概念作了进一步的理解。
明白设备管理的主要任务,并了解了实验任务的主要实现方法。
通过本次的实验,学会了独占设备的分配、回收等主要算法的原理。
更加深了对理论课上的内容的理解。
本次仅供参考,下次预告,敬请期待!
:
实验6SPOOLING技术(2学时)
理解和掌握SPOOLING技术。
编写程序实现SPOOLING技术的模拟。
1、
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设备管理
![提示](https://static.bingdoc.com/images/bang_tan.gif)