版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#includeusing namespace std;/typedef struct nodechar name10;char devname10;struct node *next;PCB;/进程PCB * run;/执行队列/typedef struct Nodechar identify10;/标识int state;/设备状态PCB *blocking;/阻塞队列指针CHCT;/通道控制表CHCT * CH1, * CH2;/typedef struct NOdechar identify10;/标识int state;/设备状态CHCT * chct;/CHCTPCB *block
2、ing;/阻塞队列指针struct NOde *next;COCT;/控制器控制表COCT * cohead;typedef struct NODechar identify10;/标识char type;/设备类型int state;/设备状态int times;/重复执行次数PCB *blocking;/阻塞队列指针COCT * coct;/COCTDCT;/设备控制表typedef struct NODEchar type;/类别char identify10;/标识DCT * dct;/DCT/驱动入口地址struct NODE *next;SDT;/系统设备表SDT * head;S
3、DT * checkdel;void Init()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);str
4、cpy(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
5、(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;c
6、o3block=(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(PC
7、B);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=(
8、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-nex
9、t=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-id
10、entify,M);s1-type=o;s2-type=o;s3-type=i;s4-type=i;/testSDT *temp=head-next;/=/添加设备时候,添加新控制器,把控制器加到最后void Addcotrol (COCT *temp)COCT *cotemp=cohead;while(cotemp-next!=NULL)cotemp=cotemp-next;cotemp-next=temp;temp-next=NULL;/查看所有控制器,选择所要连接的控制器void Showallco()COCT *temp=cohead-next;while(temp!=NULL)cou
11、tidentifynext;coutnext;while(temp!=NULL)if(!strcmp(temp-identify,a)return temp;temp=temp-next;return temp;/删除设备时候,判断是不是同时删除控制器,等于1删,0不删int sf_deleteco(char a,char b)SDT *temp;temp=head-next;while(temp!=NULL)if(strcmp(temp-identify,a)&(!strcmp(temp-dct-coct-identify,b)return 0;temp=temp-next;return 1
12、;/删除设备的时候同时删除控制器void Deletecotrol(COCT *te)COCT * temp=cohead;while(temp-next!=te)temp=temp-next;temp-next=te-next;delete(te);/添加设备,查找设备是不是已经存在int sf_exist(char a)SDT *temp;if(head-next=NULL)return 0;elsetemp=head-next;while(temp!=NULL)if(!strcmp(a,temp-identify)checkdel=temp;return 1;temp=temp-next
13、;return 0;/申请设备时候,如果忙,将设备挂到等待队列void Addwaitpcb(PCB * p1,PCB * p2)PCB *temp=p1;while(temp-next!=NULL)temp=temp-next;temp-next=p2;p2-next=NULL;/回收设备时候,对PCB的操作void Deletepcb(char a)PCB * temp2=run-next,* temp=run;while(temp2!=NULL)if(!strcmp(temp2-devname,a)temp-next=temp2-next;delete(temp2);break;temp
14、=temp2;temp2=temp-next;/判断等待队列是不是空int sf_pcbnull(PCB *temp)if(temp-next=NULL)return 0;else return 1;/查看所有设备状态void Showmenu()PCB * ptemp=run-next;SDT * temp=head-next;DCT * dtemp;COCT * cotemp;CHCT * chtemp;coutSDT i/o COCT CHCTdct;cotemp=dtemp-coct;chtemp=cotemp-chct;coutidentifystatettypetidentifys
15、tate tidentifystatenext;while(ptemp!=NULL)cout进程name申请了设备devnamenext;coutnext=NULL)return 0;elsetemp=head-next;while(temp!=NULL)if(temp-type=ch)return 1;else temp=temp-next;return 0;/增加设备void Adddevice()cout增加设备eqary;/此处查找SDT,看是否所要添加的设备已经存在if(sf_exist(eqary)=1)/设备已经存在cout设备已存在next=NULL;temp=(DCT *)m
16、alloc(sizeof(DCT);strcpy(temp-identify,eqary);temp-blocking=tempblock;temp-state=0;cout输入设备类型temptype;temp-type=temptype;stemp=(SDT *)malloc(sizeof(SDT);stemp-next=NULL;stemp-dct=temp;stemp-type=temptype;strcpy(stemp-identify,eqary);s2temp=head;while(s2temp-next!=NULL)s2temp=s2temp-next;s2temp-next=
17、stemp;stemp-next=NULL;cout是否添加控制器?(y/n)choice;if(choice=y)|(choice=Y)/添加新控制器cout输入控制器名称:coary;cotempblock=(PCB *)malloc(sizeof(PCB);cotempblock-next=NULL;cotemp=(COCT *)malloc(sizeof(COCT);cotemp-next=NULL;strcpy(cotemp-identify,coary);cotemp-state=0;cotemp-blocking=cotempblock;Addcotrol(cotemp);tem
18、p-coct=cotemp;cout请选择连接的通道:1/2i;if(i=1)cotemp-chct=CH1;elsecotemp-chct=CH2;else/不添加控制器Showallco();cout输入连接控制器的名称:coary;cotemp=Findco(coary);temp-coct=cotemp;cout设备eqary添加成功!endl;/删除设备void Deletedevice()/删除设备的时候同时删除pcb Deletepcbcout删除设备chary;if(sf_exist(chary)=0)cout删除设备不存在!dct-state=1)cout设备正在使用无法删除
19、dct-coct-identify);if(sf_deleteco(chary,tempary)/删除控制器temp=checkdel-dct-coct;Deletecotrol(temp);stemp=head;while(stemp-next!=checkdel)stemp=stemp-next;stemp-next=checkdel-next;delete(checkdel);cout设备chary删除成功!endl;/申请设备void Applydevice()cout申请设备pnameeqname;if(sf_exist(eqname)=0)cout设备不存在!name,pname)
20、;ptemp-next=NULL;dtemp=checkdel-dct;/=此处是否要考虑状态的改变=if(dtemp-state=1)/设备忙Addwaitpcb(dtemp-blocking,ptemp);cout进程name被挂在设备identify的等待队列上!coct;if(cotemp-state=1)/控制器忙Addwaitpcb(cotemp-blocking,ptemp);cout进程name被挂在控制器identify的等待队列上!chct;if(chtemp-state=1)/通道忙Addwaitpcb(chtemp-blocking,ptemp);cout进程name被
21、挂在通道identify的等待队列上!state=1;cotemp-state=1;chtemp-state=1;strcpy(ptemp-devname,eqname);cout进程pname申请设备eqname成功!endl;/回收设备void Recycledevice()cout回收设备eqname;if(sf_exist(eqname)=0)/设备不存在cout要回收的设备不存在!dct-state=0)/设备存在,但是不需要回收cout设备处于闲状态,不需要回收!dct;cotemp=dtemp-coct;chtemp=cotemp-chct;dtemp-state=0;cotem
22、p-state=0;chtemp-state=0;if(sf_pcbnull(chtemp-blocking)/如果通道等待队列不空pctemp1=chtemp-blocking;pctemp2=pctemp1-next;pctemp1-next=pctemp2-next;pctemp2-next=NULL;strcpy(pctemp2-devname,eqname);Addwaitpcb(run,pctemp2);dtemp-state=1;cotemp-state=1;chtemp-state=1;elseif(sf_pcbnull(cotemp-blocking)/如果控制器的等待队列不
23、空pctemp1=cotemp-blocking;pctemp2=pctemp1-next;pctemp1-next=pctemp2-next;pctemp2-next=NULL;strcpy(pctemp2-devname,eqname);Addwaitpcb(run,pctemp2);dtemp-state=1;cotemp-state=1;chtemp-state=1;elseif(sf_pcbnull(dtemp-blocking)/如果设备的等待队列不空pctemp1=dtemp-blocking;pctemp2=pctemp1-next;pctemp1-next=pctemp2-n
24、ext;pctemp2-next=NULL;strcpy(pctemp2-devname,eqname);Addwaitpcb(run,pctemp2);dtemp-state=1;cotemp-state=1;chtemp-state=1;cout设备eqname回收成功!endl;/设备独立性=void Independence()cout设备独立性-申请设备:endl;/cout申请设备pnametype;if(type=o)|(type=i)/=还得考虑要申请的类型是不是存在=if(sf_typeexist(type)=0)cout要申请的该类设备不存在!next;while(temp!=NULL)if(temp-type=type)&(temp-dct-state=0)/当设备类型相同,并且设备空闲temp2=temp;break;else if(temp-type=type)temp2=temp;temp=temp-next;sf_exist(temp2-identify);/=ptemp=(PCB *)malloc(sizeof(PCB);strcpy(ptemp-name,pname);ptemp-next=NULL;dtemp=checkdel-dct;/要用了这个函数才可以=if(temp2-dct-state=0)/当设备不忙时候cotemp=dtemp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 世纪佳缘招聘人事部高级职位的经验谈
- 电信行业的客户服务与市场拓展策略解析
- 网易游戏与游戏开发者的深度合作安排
- 物流规划师职位招聘面试全攻略
- 全力奔跑梦在彼岸演讲稿
- 2025年AI训练师行业政策解读会
- 2025年AI艺术生成工程师的行业政策解读与合规
- 2026年信息技术发展趋势预测与展望试卷
- 偶像与时代的演讲稿英语
- 美国女王伊丽莎白演讲稿
- 2026广东汕头市公安局招聘警务辅助人员152人考试参考试题及答案解析
- 2026年人工智能技术应用与发展试题
- xmind做培训课件教学课件
- 煤矿机电运输培训课件
- 校园宿管员培训课件
- 安全用电培训内容及要求课件
- 危险品全员安全培训方案课件
- 屋顶彩钢瓦施工流程
- (新教材)2026年人教版一年级下册数学 7.2 复习与关联 数与运算(2) 课件
- 询证函复函协议书
- 2026年江西应用技术职业学院单招职业技能测试题库带答案详解
评论
0/150
提交评论