case 'c': //申请 return 1; case 'C': return 1;
case 'd': //删除 return 2; case 'D': return 2;
case 'a': //添加 return 3; case 'A': return 3;
case 'f': //释放 free return 4; case 'F': return 4; case 'q': return -1; case 'Q': return -1; case 'p': return 5; case 'P': return 5;
default: return 0; } }
voidinit(vector
SDT_table[0].equipmentID=\
SDT_table[0].type='2'; //鼠标是第二类设备 SDT_table[0].dct=m; //设备的DCT表位置 SDT_table[1].equipmentID=\SDT_table[1].type='1'; SDT_table[1].dct=k;
SDT_table[2].equipmentID=\SDT_table[2].type='3'; SDT_table[2].dct=p;
SDT_table[3].equipmentID=\SDT_table[3].type='4'; SDT_table[3].dct=t;
h1->blockqueue=NULL; h1->channelID=\通道1\ h1->state=true; h1->use=NULL;
h2->blockqueue=NULL; h2->channelID=\通道2\ h2->state=true; h2->use=NULL;
c1->blockqueue=NULL;
c1->controllerID=\控制器1\ c1->state=true; c1->front=h1; c1->use=NULL;
c2->blockqueue=NULL; c2->controllerID=\控制器2\ c2->state=true; c2->front=h1; c2->use=NULL;
c3->blockqueue=NULL;
c3->controllerID=\控制器3\ c3->state=true; c3->front=h2; c3->use=NULL;
k->blockqueue=NULL; k->equipmentID=\
k->state=true; //可用 k->type='1'; k->front=c1; k->use=NULL;
m->blockqueue=NULL; m->equipmentID=\m->state=true; m->type='2'; m->front=c1; m->use=NULL;
p->blockqueue=NULL; p->equipmentID=\p->state=true; p->type='3'; p->front=c2; p->use=NULL;
t->blockqueue=NULL; t->equipmentID=\t->state=true; t->type='4'; t->front=c3; t->use=NULL; }
int main() {
charcmd;
DCT *temp_dct; COCT *temp_coct; CHCT *temp_chct; int l=0; string ID; string name;
vector
vector
// vector
DCT_table.push_back(u); u=*m;
DCT_table.push_back(u); u=*p;
DCT_table.push_back(u); u=*t;
DCT_table.push_back(u); COCT cu=*c1;
COCT_table.push_back(cu); cu=*c2;
COCT_table.push_back(cu); cu=*c3;
COCT_table.push_back(cu);
cout<<\目前设备:K:键盘(1) M:鼠标(2) P:打印机(3) cout<<\操作指令C 申请使用设备。\cout<<\操作指令D 删除设备。\cout<<\操作指令A 添加设备。\cout<<\操作指令F 释放设备。\while(l!=-1) {
cout<<\cin>>cmd;
T:显示器(4)\ l=check(cmd); if(l==0) {
cout<<\指令错误请重新输入。\continue; }
else if(l==1) //申请使用设备 {
cout<<\想要使用的设备名:\cin>>ID;
cout<<\申请设备的进程名:\cin>>name;
PCB *head=new PCB; //申请PCB的创建和链接 head->equipment=name; head->ID=ID;
head->next=NULL;
bool find=false;
vector
for(ator0=SDT_table.begin();ator0!=SDT_table.end();ator0++) {
if(ator0->equipmentID==ID) {
find=true; //有该设备 break; } } if(!find) {
cout<<\没有该设备,请重新输入操作指令。\continue; }
temp_dct=ator0->dct;
if(!temp_dct->state) //设备忙 {
cout<<\该设备目前处于忙状态,已经把请求加入等待队列。\if(!temp_dct->blockqueue) //阻塞的队列为空 {
temp_dct->blockqueue=head; }
else //阻塞队列已经有内容 {
PCB* t=temp_dct->blockqueue;
while(t)
t=t->next; if(!t) {
temp_dct->blockqueue=NULL; } else
t->next=head; } }
else //设备空闲 {
temp_coct=temp_dct->front; temp_dct->state=false;
temp_dct->use=head; //添加正在占用设备的进程 if(!temp_coct->state) //控制器不可用 {
cout<<\目前该设备连接的控制器忙,已经把请求加入等待队列.\if(!temp_coct->blockqueue) //阻塞的队列为空 {
temp_coct->blockqueue=head; }
else //阻塞队列不空 {
PCB* t=temp_coct->blockqueue; while(t)
t=t->next; if(!t) {
temp_dct->blockqueue=NULL; } else
t->next=head; } }
else //控制器可用 {
temp_coct->state=false; //控制器置忙 temp_chct=temp_coct->front; temp_coct->use=head;
if(!temp_chct->state) //通道不可用 {
cout<<\目前该设备连接的通道忙,已经把请求加入等待队列.\