您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 操作系统设备管理实验代码
#includeiostreamusingnamespacestd;//typedefstructnode{charname[10];chardevname[10];structnode*next;}PCB;//进程PCB*run;//执行队列//typedefstructNode{charidentify[10];//标识intstate;//设备状态PCB*blocking;//阻塞队列指针}CHCT;//通道控制表CHCT*CH1,*CH2;//typedefstructNOde{charidentify[10];//标识intstate;//设备状态CHCT*chct;//CHCTPCB*blocking;//阻塞队列指针structNOde*next;}COCT;//控制器控制表COCT*cohead;typedefstructNODe{charidentify[10];//标识chartype;//设备类型intstate;//设备状态inttimes;//重复执行次数PCB*blocking;//阻塞队列指针COCT*coct;//COCT}DCT;//设备控制表typedefstructNODE{chartype;//类别charidentify[10];//标识DCT*dct;//DCT//驱动入口地址structNODE*next;}SDT;//系统设备表SDT*head;SDT*checkdel;voidInit(){PCB*ch1block,*ch2block,*co1block,*co2block,*co3block,*d1block,*d2block,*d3block,*d4block;COCT*CO1,*CO2,*CO3;DCT*d1,*d2,*d3,*d4;SDT*s1,*s2,*s3,*s4;//=================================================run=(PCB*)malloc(sizeof(PCB));run-next=NULL;CH1=(CHCT*)malloc(sizeof(CHCT));CH2=(CHCT*)malloc(sizeof(CHCT));strcpy(CH1-identify,ch1);strcpy(CH2-identify,ch2);CH1-state=0;CH2-state=0;ch1block=(PCB*)malloc(sizeof(PCB));ch1block-next=NULL;ch2block=(PCB*)malloc(sizeof(PCB));ch2block-next=NULL;CH1-blocking=ch1block;CH2-blocking=ch2block;cohead=(COCT*)malloc(sizeof(COCT));cohead-next=NULL;CO1=(COCT*)malloc(sizeof(COCT));cohead-next=CO1;CO1-next=NULL;CO2=(COCT*)malloc(sizeof(COCT));CO1-next=CO2;CO2-next=NULL;CO3=(COCT*)malloc(sizeof(COCT));CO2-next=CO3;CO3-next=NULL;CO1-state=0;CO2-state=0;CO3-state=0;co1block=(PCB*)malloc(sizeof(PCB));co1block-next=NULL;co2block=(PCB*)malloc(sizeof(PCB));co2block-next=NULL;co3block=(PCB*)malloc(sizeof(PCB));co3block-next=NULL;strcpy(CO1-identify,co1);strcpy(CO2-identify,co2);strcpy(CO3-identify,co3);CO1-chct=CH1;CO2-chct=CH1;CO3-chct=CH2;CO1-blocking=co1block;CO2-blocking=co2block;CO3-blocking=co3block;//=====================================================d1block=(PCB*)malloc(sizeof(PCB));d2block=(PCB*)malloc(sizeof(PCB));d3block=(PCB*)malloc(sizeof(PCB));d4block=(PCB*)malloc(sizeof(PCB));d1block-next=NULL;d2block-next=NULL;d3block-next=NULL;d4block-next=NULL;d1=(DCT*)malloc(sizeof(DCT));strcpy(d1-identify,P);d2=(DCT*)malloc(sizeof(DCT));strcpy(d2-identify,T);d3=(DCT*)malloc(sizeof(DCT));strcpy(d3-identify,K);d4=(DCT*)malloc(sizeof(DCT));strcpy(d4-identify,M);d1-coct=CO1;d2-coct=CO2;d3-coct=CO3;d4-coct=CO3;d1-state=0;d2-state=0;d3-state=0;d4-state=0;d1-type='o';d2-type='o';d3-type='i';d4-type='i';d1-blocking=d1block;d2-blocking=d2block;d3-blocking=d3block;d4-blocking=d4block;//================================head=(SDT*)malloc(sizeof(SDT));head-next=NULL;s1=(SDT*)malloc(sizeof(SDT));s2=(SDT*)malloc(sizeof(SDT));s3=(SDT*)malloc(sizeof(SDT));s4=(SDT*)malloc(sizeof(SDT));head-next=s1;s1-next=s2;s2-next=s3;s3-next=s4;s4-next=NULL;s1-dct=d1;s2-dct=d2;s3-dct=d3;s4-dct=d4;strcpy(s1-identify,P);strcpy(s2-identify,T);strcpy(s3-identify,K);strcpy(s4-identify,M);s1-type='o';s2-type='o';s3-type='i';s4-type='i';//testSDT*temp=head-next;}//============================================//添加设备时候,添加新控制器,把控制器加到最后voidAddcotrol(COCT*temp){COCT*cotemp=cohead;while(cotemp-next!=NULL){cotemp=cotemp-next;}cotemp-next=temp;temp-next=NULL;}//查看所有控制器,选择所要连接的控制器voidShowallco(){COCT*temp=cohead-next;while(temp!=NULL){couttemp-identify;temp=temp-next;}coutendl;}//查找要连接的控制器COCT*Findco(chara[]){COCT*temp=cohead-next;while(temp!=NULL){if(!strcmp(temp-identify,a)){returntemp;}temp=temp-next;}returntemp;}//删除设备时候,判断是不是同时删除控制器,等于1删,0不删intsf_deleteco(chara[],charb[]){SDT*temp;temp=head-next;while(temp!=NULL){if((strcmp(temp-identify,a))&&((!strcmp(temp-dct-coct-identify,b)))){return0;}temp=temp-next;}return1;}//删除设备的时候同时删除控制器voidDeletecotrol(COCT*te){COCT*temp=cohead;while(temp-next!=te){temp=temp-next;}temp-next=te-next;delete(te);}//添加设备,查找设备是不是已经存在intsf_exist(chara[]){SDT*temp;if(head-next==NULL){return0;}else{temp=head-next;while(temp!=NULL){if(!strcmp(a,temp-identify)){checkdel=temp;return1;}temp=temp-next;}return0;}}//申请设备时候,如果忙,将设备挂到等待队列voidAddwaitpcb(PCB*p1,PCB*p2){PCB*temp=p1;while(temp-next!=NULL){temp=temp-next;}temp-next=p2;p2-next=NULL;}//回收设备时候,对PCB的操作voidDeletepcb(chara[]){PCB*temp2=run-next,*temp=run;while(temp2!=NULL){if(!strcmp(temp2-devname,a)){temp-next=temp2-next;delete(temp2);break;}temp=temp2;temp2=temp-next;}}//判断等待队列是不是空intsf_pcbnull(PCB*temp){if(temp-next==NULL){return0;}elsereturn1;}//查看所有设备状态voidShowmenu(){PCB*ptemp=run-next;SDT*temp=head-next;DCT*dtemp;COCT*cotemp;CHCT*chtemp;coutSDTi/oCOCTCHCTendl;while(temp!=NULL){dtemp=temp-dct;cotemp=dtemp-coct;chtemp=cotemp-chct;coutdtemp-identify[dtemp-state]\tdtemp-type\tcotemp-identify[cotemp-state]\tchtemp-identify[chtemp-state]endl;temp=temp-next;}while(ptemp!=NULL){cout进程ptemp-name申请了设备ptemp-devnameendl;ptemp=ptemp-next;}coutendl;}//设备独立性时候查找要查找的类型是不是存在intsf_typeexist(charch){SDT*temp;if(head-next==NULL){return0;}else{temp=head-next;while(temp!=NUL
本文标题:操作系统设备管理实验代码
链接地址:https://www.777doc.com/doc-3402629 .html