2023年编写单通路IO系统中的设备分配程序实验报告_第1页
2023年编写单通路IO系统中的设备分配程序实验报告_第2页
2023年编写单通路IO系统中的设备分配程序实验报告_第3页
2023年编写单通路IO系统中的设备分配程序实验报告_第4页
2023年编写单通路IO系统中的设备分配程序实验报告_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

合肥学院计算机科学与技术系实验报告2023~2023学年第1学期课程操作系统原理实验名称编写单通路I/O系统中的设备分派程序学生姓名冯阿雷毕秋平高健宁阳专业班级07计本(1)班指导教师屠菁2023年12月一、实验目的 纯熟掌握单通路I/O系统中的设备分派方法。二、实验内容本实验规定实现模拟单通路I/O系统中的设备分派程序,有如下规定:1、设计系统设备表SDT、设备控制表DCT、控制器表COCT、通道表CHCT和逻辑设备表LUT。2、提供应用户各表目的初态。3、回答信息:可以分派时,给出设备号、控制器号、通道号,否则,给出无法分派的回答,插入相应的等待队列。三、实验环节任务分析为单通路I/O系统设计系统设备表SDT、设备控制表DCT、控制器表COCT、通道表CHCT和逻辑设备表LUT五张表。用户可以查看各表目的内容,此外,程序为用户进程分派设备,并且输出分派结果,假如可以分派,则给出设备号、控制器号、通道号,否则,给出无法分派的回答,插入相应的等待队列。2、概要设计为实现本次实验任务规定,一方面,定义SDT、DCT、COCT、CHCT、LUT五张表,调用input()函数初始化各表内容;另一方面,调用print()函数,实现对上述四张表的输出显示;最后,调用add_process()函数,为用户进程申请设备,假如分派成功,给出设备号、控制器号、通道号,否则,给出无法分派的因素,并将该进程插入相应的等待队列中。本程序包含如下3个模块:主模块,由函数main()组成。显示表目模块,由函数print()组成。分派设备模块,由函数add_process()、process_run()等函数组成。绘制流程图如下:运营程序运营程序 `主函数运营进程申请设备显示SDT、COCT、DCT、CHCT、LUT五张表退出判断设备是否存在输出无法分派因素判断控制器是否忙输出无法分派因素输入所需设备名称(输入0退出申请)判断通道是否忙输出无法分派因素给予分派,输出分派信息YNYNYN输入0输入非0流程图3、具体设计和编码通过以上的分析和初步设计,已经对本程序作了初步了解。下面将对本程序的各个模块作具体的讲解。(1)主函数模块对各个表就行初始化,设立好各个表的状态,以及对各个环节进行函数调用来实现本实验的规定。(2)显示表目模块调用print()函数,显示出SDT系统设备表、DCT设备控制表、COCT控制器控制表、CHCT通道表和LUT逻辑设备表五张表目,直接显示各表中的设备类型、设备名称和设备状态等信息。(3)分派设备模块在此模块中,一方面调用add_process()函数,规定用户输入所要申请的逻辑设备名称,然后根据逻辑设备名称查看LUT表中的该设备是否存在,若不存在,则直接退出分派,输出分派失败因素,若存在,则继续如下分析:a.分派设备。根据LUT表找到设备表,然后根据SDT表中指向DCT表该设备的指针,检索到DCT设备控制表中该物理设备,检查该设备的状态信息Busy。若忙,则将规定I/O的进程插入到该设备的等待队列中档待;若不忙,则继续环节(b)。b.分派控制器。根据设备控制表DCT中的控制器表指针,可找到与此设备相连的控制器表COCT,通过检查该表中的状态信息Busy。若忙,则将规定I/O的进程插入到等待该控制器的队列中档待;若不忙,则把该控制器分派给进程,继续环节(c)。c.分派通道。一方面根据控制器表COCT中的通道表指针找到与此控制器相连的通道表CHCT,从中了解此通道的状态信息Busy。若为忙,则把该进程插入等待通道的队列CHL中;若通道空闲,则表白本次I/O请求所需之I/O设备和相应的控制器、通道都能得到,于是便可启动I/O设备开始数据传送。调用add_process()函数来实现上述环节。分派完毕后,将相应的设备、控制器和通道的状态信息Busy置1。结束分派程序。4、调试分析本次程序设计的核心内容在于设备的分派过程,一次分派只有在设备、控制器和通道三者都分派成功时,这次分派才算成功。该程序的核心逻辑关系是先分派设备再分派控制器最后分派通道。当三者都空闲并安全时,才可分派,最终启动该I/O设备进行数据传送。5、测试结果 运营程序后,运营结果如下图1。图1进行初始化,运营结果如下图2图2图3各表的初始化状态如图3。图3进程分派设备结果如图3四、实验总结通过本次实验,充足的理解了单通道I/O设备分派程序,知道了设备表,控制器表,通道表以及其他表的数据结构,加深了对课本知识的理解,明白了设备分派的过程:先分派设备,接下来分派控制器,然后再分派通道,若成功就可以启动该I/O设备进行数据传送了。同时,通过和同学一起做这个实验,从中学习到了合作的经验,为以后的工作打下基础。通过编写程序,复习了C语言程序。五、附录源程序:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#defineNAME_NUM10typedefstruct_COCT_list{ﻩcharname[NAME_NUM]; struct_COCT_list*next;}COCT_list;typedefstruct_CHCT{ﻩcharname[NAME_NUM];//ﻩintstate;// COCT_list*COCT_head; COCT_list*COCT_tail;ﻩstruct_CHCT*next;}CHCT;typedefstruct_DCT_list{ﻩcharname[NAME_NUM];//等待控制器队列的设备名字 struct_DCT_list*next;}DCT_list;typedefstruct_COCT{ﻩcharname[NAME_NUM];//ﻩintstate;// CHCT*CHCT;// DCT_list*DCT_head;//等待控制器队列的队首指针 DCT_list*DCT_tail;// struct_COCT*next;}COCT;//设备控制表typedefstruct_Process{ﻩchar*name[NAME_NUM];//进程名字//ﻩintnum;//进程标志号ﻩstruct_Process*next;}Process;typedefstruct_DCT{ charname[NAME_NUM];//设备名字 chartype[NAME_NUM];//设备类型 intadr;//设备地址 intstate;//设备状态ﻩCOCT*coct;//指向控制器表的指针ﻩProcess*process_head;//等待进程的队首指针ﻩProcess*process_tail;//等待进程的队尾指针ﻩintrepeat;//反复次数ﻩstruct_DCT*next;}DCT;//系统设备表SDTtypedefstruct_SDT{ﻩcharname[NAME_NUM];ﻩchartype[NAME_NUM];//设备类型ﻩDCT*DCT;//DCT指针 longadr;//驱动程序入口}SDT;typedefstruct_LUT{ charname[NAME_NUM];ﻩchardct_name[NAME_NUM]; intadr;ﻩstruct_LUT*next;}LUT;//默认状态下初始化书中p113的单通道I/ODCT*main_DCT;COCT*main_COCT;CHCT*main_CHCT;LUT*main_LUT;voidinit_1();voidinit(){ puts("-----------------------------------------------");ﻩputs("进行初始化工作,请您输入相关内容");ﻩ//puts("\n如:与"设备1"有关的控制器名为"控制器1",通道名为"通道1",您应如下输入:");ﻩputs("\n如:与\"设备1\"有关的控制器名为\"控制器1\",通道名为\"通道1\",您应如下输入:");ﻩputs("\n请输入设备号:(此处输入:设备1)");ﻩputs("请输入控制器号:(此处输入:控制器1)");ﻩputs("请输入通道号:(此处输入:通道1)"); puts("这样完毕一次输入"); puts("\n注意:当设备号为-1时,退出输入");ﻩputs("-----------------------------------------------"); init_1();}voidinit_1(){ﻩDCT*dct;ﻩCOCT*coct;ﻩCHCT*chct; LUT*lut; dct=(DCT*)malloc(sizeof(DCT)); main_DCT=dct; dct->next=NULL; coct=(COCT*)malloc(sizeof(COCT)); main_COCT=coct;ﻩcoct->next=NULL; chct=(CHCT*)malloc(sizeof(CHCT));ﻩmain_CHCT=chct;ﻩchct->next=NULL;ﻩlut=(LUT*)malloc(sizeof(LUT));ﻩmain_LUT=lut; lut->next=NULL;}voidinput(){ﻩDCT*dct; DCT*dct_1; DCT*dct_2;ﻩCOCT*coct;ﻩCOCT*coct_1; CHCT*chct; CHCT*chct_1; LUT*lut;ﻩLUT*lut_1;ﻩcharname[NAME_NUM]; inta; while(1)ﻩ{ﻩﻩa=0;ﻩ puts("\n++++++++++++++++++++++++++++++++++++++++++++++\n");ﻩ printf("请输入设备号:");ﻩﻩscanf("%s",name); if(!strcmp(name,"-1"))ﻩ ﻩbreak; ﻩdct_2=main_DCT; dct_1=main_DCT->next;ﻩﻩwhile(dct_1!=NULL)ﻩ { if(!strcmp(dct_1->name,name))ﻩ { ﻩﻩprintf("\n该设备已存在,请重新输入:"); ﻩﻩﻩscanf("%s",name);ﻩﻩ dct_1=main_DCT->next;ﻩ ﻩ dct_2=main_DCT;ﻩ ﻩcontinue; }//ﻩﻩﻩif(dct_1->next!=NULL) ﻩ ﻩdct_1=dct_1->next;ﻩ ﻩdct_2=dct_2->next;// ﻩ if(dct_1->next==NULL)//ﻩﻩ break; ﻩ ﻩﻩ ﻩ }ﻩﻩif(dct_1==NULL) ﻩ dct_1=dct_2; dct=(DCT*)malloc(sizeof(DCT)); ﻩif(dct_1==NULL)ﻩﻩ{ dct_1=main_DCT; } dct_1->next=dct; ﻩdct->next=NULL;ﻩﻩstrcpy(dct->name,name); ﻩdct->adr=(int)&dct;ﻩﻩdct->process_head=NULL; dct->process_tail=NULL; dct->repeat=5;ﻩ dct->state=0;ﻩ strcpy(dct->type,"输入设备"); printf("\n请输入控制器号:"); scanf("%s",name);ﻩﻩcoct_1=main_COCT->next; while(coct_1!=NULL)ﻩ {ﻩﻩﻩif(!strcmp(coct_1->name,name))ﻩﻩ { ﻩﻩ dct->coct=coct_1; ﻩ ﻩcoct=coct_1; ﻩ a=1; ﻩﻩ break;ﻩﻩﻩ}//ﻩﻩﻩif(coct_1->next!=NULL) ﻩﻩcoct_1=coct_1->next;// ﻩif(coct_1->next==NULL)//ﻩ ﻩbreak;ﻩﻩ} ﻩif(coct_1==NULL) ﻩ{ﻩﻩ coct=(COCT*)malloc(sizeof(COCT));ﻩﻩ dct->coct=coct;ﻩﻩ strcpy(coct->name,name); ﻩﻩcoct->DCT_head=NULL; ﻩ coct->DCT_tail=NULL; ﻩ coct->next=NULL;ﻩ ﻩcoct->state=0; ﻩﻩcoct_1=main_COCT; ﻩ while(coct_1->next!=NULL) ﻩ{ﻩﻩﻩ coct_1=coct_1->next;ﻩ ﻩ}ﻩﻩﻩcoct_1->next=coct; }ﻩﻩif(a==1) ﻩ{ puts("控制器存在,不能指定通道。输入任意键进行下一设备的设立!");ﻩ ﻩgetch(); ﻩﻩcontinue; ﻩ}ﻩﻩprintf("\n请输入通道号:");ﻩﻩscanf("%s",name); chct_1=main_CHCT->next; ﻩwhile(chct_1!=NULL)ﻩﻩ{ if(strcmp(chct_1->name,name))ﻩﻩ {ﻩ ﻩﻩcoct->CHCT=chct_1;ﻩﻩ chct=chct_1; ﻩ break; ﻩ}//ﻩﻩﻩif(chct_1->next!=NULL) ﻩchct_1=chct_1->next;// ﻩﻩif(chct_1->next==NULL)// ﻩ break;ﻩﻩ} if(chct_1==NULL)ﻩﻩ{ ﻩ chct=(CHCT*)malloc(sizeof(CHCT)); ﻩﻩcoct->CHCT=chct; strcpy(chct->name,name);ﻩ ﻩchct->COCT_tail=NULL; chct->next=NULL; ﻩ chct->COCT_head=NULL;ﻩﻩﻩchct->state=0; ﻩﻩchct_1=main_CHCT;ﻩ ﻩwhile(chct_1->next!=NULL) ﻩ{ chct_1=chct_1->next; } chct_1->next=chct;ﻩﻩ }ﻩ}ﻩputs("为各设备拟定逻辑设备名!\n");ﻩdct=main_DCT->next;ﻩwhile(dct!=NULL) {ﻩﻩprintf("请输入设备号为%s的逻辑设备名:",dct->name); scanf("%s",name); lut=main_LUT->next; ﻩlut_1=main_LUT;ﻩ while(lut!=NULL) ﻩ{ﻩ ﻩif(!strcmp(lut->name,name))ﻩﻩ { ﻩﻩﻩprintf("\n该设备名已近存在,请重新输入!\n");ﻩ ﻩprintf("请输入设备号为%s的逻辑设备名:",dct->name); ﻩ ﻩscanf("%s",name);ﻩ lut=main_LUT->next;ﻩ ﻩlut_1=main_LUT; break; ﻩﻩ}ﻩ ﻩlut=lut->next; ﻩ lut_1=lut_1->next;ﻩﻩ}ﻩ lut=lut_1;ﻩ lut_1=(LUT*)malloc(sizeof(LUT)); ﻩlut->next=lut_1; strcpy(lut_1->name,name); strcpy(lut_1->dct_name,dct->name);ﻩﻩlut_1->next=NULL; ﻩdct=dct->next; }}voidprint(){ﻩDCT*dct;ﻩCHCT*chct;ﻩCOCT*coct; Process*process;ﻩDCT_list*dct_list;ﻩCOCT_list*coct_list; LUT*lut; dct=main_DCT->next;ﻩputs("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");ﻩputs("---------------------------------------------------------------------------");ﻩputs("\nDCT表\n");ﻩputs("---------------------------------------------------------------------------");ﻩputs("|_设备标志符_||_设备类型_||_设备地址_||_控制表指针_||_反复次数_||_状态_|");ﻩwhile(dct!=NULL)ﻩ{ ﻩprintf("\n|%10s|%10s|%10d|%10s|%10d|%10d|",dct->name,dct->type,dct->adr,dct->coct->name,dct->repeat,dct->state); if(dct->process_tail==NULL) printf("\n\n设备%s等待队列为空\n",dct->name);ﻩ if(dct->process_tail!=NULL) { ﻩﻩ printf("\n\n设备%s的进程等待队列的进程号为:\n",dct->name); ﻩprocess=dct->process_head; ﻩ ﻩwhile(process!=NULL) ﻩﻩ ﻩﻩ ﻩ {// ﻩﻩ ﻩprintf("|_%10s_|_%10d_|",process->name,process->num); ﻩﻩﻩprintf("|_%10s_|",process->name); ﻩprocess=process->next; ﻩﻩ}ﻩﻩﻩ} ﻩdct=dct->next;ﻩ} puts("\n");ﻩputs("---------------------------------------------------------------------------"); puts("\nCOCT表\n");ﻩputs("---------------------------------------------------------------------------");ﻩputs("|_控制器名称_||_控制器状态_||_相应通道名称_|");ﻩcoct=main_COCT->next; while(coct!=NULL)ﻩ{ﻩ printf("\n|%10s|%10d|%10s|",coct->name,coct->state,coct->CHCT->name); ﻩif(coct->DCT_tail==NULL) ﻩprintf("\n\n控制器%s等待队列为空!\n",coct->name); if(coct->DCT_tail!=NULL)ﻩ { dct_list=coct->DCT_head;ﻩ ﻩprintf("\n\n控制器%s的等待队列的设备号是:\n",coct->name);ﻩ while(dct_list!=NULL) ﻩ {ﻩﻩ ﻩprintf("|_%10s_|",dct_list->name);ﻩﻩ ﻩﻩdct_list=dct_list->next; ﻩﻩ} ﻩﻩ}ﻩﻩcoct=coct->next;ﻩ} puts("\n");ﻩputs("---------------------------------------------------------------------------"); puts("\nCHCT表\n"); puts("---------------------------------------------------------------------------"); puts("|_通道名称_||_通道状态_|");ﻩchct=main_CHCT->next;ﻩwhile(chct!=NULL) { printf("\n|%10s|%10d|\n",chct->name,chct->state); if(chct->COCT_tail==NULL)ﻩ ﻩprintf("\n\n通道%s的等待队列为空!",chct->name);ﻩ if(chct->COCT_tail!=NULL)ﻩ { ﻩcoct_list=chct->COCT_head; ﻩﻩprintf("\n\n通道%s的等待队列是:\n",chct->name); ﻩ while(coct_list!=NULL) ﻩ{ﻩ ﻩ printf("|_%10s_|",coct_list->name);ﻩ ﻩ coct_list=coct_list->next; ﻩ} ﻩﻩ}ﻩﻩchct=chct->next;ﻩ}ﻩputs("\n"); puts("---------------------------------------------------------------------------");ﻩputs("\nLUT表\n"); ﻩputs("---------------------------------------------------------------------------");ﻩlut=main_LUT->next; printf("|_逻辑设备名_||_物理设备名_|"); while(lut!=NULL)ﻩ{ﻩ printf("\n|_%10s_||%10s_|",lut->name,lut->dct_name);ﻩﻩlut=lut->next;ﻩ}}voidfree_main(){ﻩDCT*dct; DCT*dct1; COCT*coct;ﻩCOCT*coct1;ﻩCHCT*chct;ﻩCHCT*chct1;ﻩLUT*lut;ﻩLUT*lut1; DCT_list*dct_list1; DCT_list*dct_list2; COCT_list*coct_list1; COCT_list*coct_list2; Process*process1; Process*process2;ﻩdct=main_DCT->next;ﻩwhile(dct!=NULL)ﻩ{ dct1=dct->next; process1=dct->process_head; ﻩwhile(process1!=NULL)ﻩﻩ{ ﻩﻩprocess2=process1->next;ﻩﻩﻩfree(process1); ﻩprocess1=process2; } free(dct); dct=dct1; }ﻩcoct=main_COCT->next; while(coct!=NULL)ﻩ{ coct1=coct->next; dct_list1=coct->DCT_head; while(dct_list1!=NULL)ﻩﻩ{ ﻩﻩdct_list2=dct_list1->next; free(dct_list1);ﻩﻩﻩdct_list1=dct_list2; }ﻩ free(coct);ﻩ coct=coct1;ﻩ}ﻩchct=main_CHCT->next; while(chct!=NULL) {ﻩ chct1=chct->next; coct_list1=chct->COCT_head; while(coct_list1!=NULL)ﻩﻩ{ ﻩ coct_list2=coct_list1->next;ﻩ free(coct_list1); ﻩﻩcoct_list1=coct_list2; ﻩ} free(chct); chct=chct1; }ﻩlut=main_LUT->next; while(lut!=NULL) { lut1=lut->next; free(lut); lut=lut1; }ﻩfree(main_DCT); free(main_COCT);ﻩfree(main_CHCT); free(main_LUT);}voidadd_DCT_list(COCT*coct1,char*dct_name);voidadd_COCT_list(CHCT*chct1,char*coct_name);voidadd_process(){ charprocess_name[NAME_NUM];ﻩcharlut_name[NAME_NUM]; charDCT_name[NAME_NUM]; LUT*lut;ﻩDCT*dct;ﻩCOCT*coct; CHCT*chct;ﻩProcess*process;ﻩﻩputs("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); puts("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");ﻩputs("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); puts("~~输入进程信息~~"); puts("\n\n\n"); puts("假如进程名为-1,将切换到进程运营状态!");while(1)ﻩ{ ﻩprintf("\n\n\n请输入进程名:"); ﻩscanf("%s",process_name); ﻩif(!strcmp(process_name,"-1"))ﻩ break; printf("请输入逻辑设备名:");ﻩﻩscanf("%s",lut_name);ﻩ puts("________________________________________________________"); lut=main_LUT->next;ﻩ while(lut!=NULL)ﻩﻩ{ﻩ ﻩif(!strcmp(lut->name,lut_name))ﻩ {ﻩ ﻩﻩstrcpy(DCT_name,lut->dct_name);ﻩ ﻩ break;ﻩﻩ } ﻩlut=lut->next; } if(lut==NULL)ﻩ printf("\n没有找到该设备,请确认该设备对的安装!\n");ﻩ if(lut!=NULL) {ﻩﻩﻩdct=main_DCT->next;ﻩﻩﻩwhile(dct!=NULL)ﻩ ﻩ{ if(!strcmp(dct->name,DCT_name)) ﻩ{ﻩ ﻩﻩif(dct->process_head!=NULL) ﻩ { ﻩﻩprocess=(Process*)malloc(sizeof(Process)); ﻩ ﻩﻩdct->process_tail->next=process;ﻩﻩ dct->process_tail=process;ﻩﻩ ﻩ ﻩif(dct->state==1) ﻩﻩ {ﻩ ﻩﻩ ﻩprintf("\n设备正占用着,进程进入等待队列!",dct->name);ﻩ ﻩﻩﻩﻩ add_DCT_list(dct->coct,dct->name); ﻩ}ﻩ ﻩﻩif(dct->state==0)ﻩﻩﻩﻩ ﻩ{ﻩﻩﻩﻩﻩﻩﻩprintf("\n设备%s空闲,能使用!-----------------设备成功分派",dct->name);ﻩ ﻩ ﻩﻩadd_DCT_list(dct->coct,dct->name);ﻩ dct->state=1; }ﻩﻩﻩ process->next=NULL;ﻩ ﻩﻩﻩ strcpy(process->name,process_name); ﻩﻩ ﻩ}ﻩ ﻩ ﻩif(dct->process_head==NULL) ﻩ ﻩ {ﻩ ﻩ process=(Process*)malloc(sizeof(Process));ﻩ ﻩﻩ dct->process_head=process;ﻩ ﻩﻩdct->process_tail=process; ﻩ ﻩif(dct->state==1)ﻩ ﻩﻩ ﻩ{ﻩﻩﻩ printf("\n%s设备正占用着,进程进入等待队列!",dct->name);ﻩ ﻩ ﻩﻩadd_DCT_list(dct->coct,dct->name);ﻩ ﻩﻩ } ﻩ if(dct->state==0)ﻩ ﻩ { ﻩprintf("\n设备%s空闲,能使用!----------------设备成功分派",dct->name); ﻩﻩ ﻩadd_DCT_list(dct->coct,dct->name);ﻩﻩﻩﻩﻩ ﻩdct->state=1;ﻩ ﻩ } ﻩﻩﻩﻩ process->next=NULL; ﻩﻩﻩstrcpy(process->name,process_name);ﻩ ﻩ } ﻩ ﻩ}ﻩﻩ ﻩdct=dct->next;ﻩ } } }ﻩ}voidadd_DCT_list(COCT*coct1,char*dct_name){ﻩCOCT*coct; DCT_list*dct_list; ﻩcoct=coct1; if(coct->state==1)ﻩ{ﻩﻩprintf("\n控制器%s被占用着不能分派!将进入等待队列中!",coct->name);ﻩﻩdct_list=(DCT_list*)malloc(sizeof(DCT_list)); ﻩcoct->DCT_tail->next=dct_list;ﻩ coct->DCT_tail=dct_list;ﻩ dct_list->next=NULL;ﻩﻩstrcpy(dct_list->name,dct_name); ﻩadd_COCT_list(coct->CHCT,coct->name);ﻩ} if(coct->state==0)ﻩ{ﻩ printf("\n控制器%s空闲,能分派使用!---------------------控制器成功分派",coct->name);ﻩﻩcoct->state=1;ﻩﻩdct_list=(DCT_list*)malloc(sizeof(DCT_list));ﻩﻩcoct->DCT_head=dct_list; coct->DCT_tail=dct_list;ﻩ dct_list->next=NULL; strcpy(dct_list->name,dct_name);ﻩﻩadd_COCT_list(coct->CHCT,coct->name); }}voidadd_COCT_list(CHCT*chct1,char*coct_name){ﻩCHCT*chct;ﻩCOCT_list*coct_list; chct=chct1;ﻩif(chct->state==1)ﻩ{ printf("\n通道%s正在使用,控制器进入等待对列中!",chct->name);ﻩ coct_list=(COCT_list*)malloc(sizeof(COCT_list)); chct->COCT_tail->next=coct_list;ﻩ chct->COCT_tail=coct_list;ﻩ coct_list->next=NULL; strcpy(coct_list->name,coct_name); }ﻩif(chct->state==0)ﻩ{ ﻩprintf("\n通道%s成功分派,开始运营该程序!------------------通道成功分派",chct->name);ﻩ chct->state=1;ﻩﻩcoct_list=(COCT_list*)malloc(sizeof(COCT_list));ﻩﻩchct->COCT_head=coct_list;ﻩ chct->COCT_tail=coct_list;ﻩ coct_list->next=NULL;ﻩﻩstrcpy(coct_list->name,coct_name); } }voidprocess_run_COCT(char*coct_name);voidprocess_run(char*chct_name){ CHCT*chct;ﻩCOCT_list*coct_list; COCT*coct; DCT_list*dct_list; DCT*dct;ﻩchct=main_CHCT->next; while(chct!=NULL)ﻩ{ﻩ if(!strcmp(chct->name,chct_name)) ﻩﻩbreak; chct=chct->next;ﻩ} if(chct==NULL) { ﻩprintf("\n\n没有通道!",chct->name);ﻩﻩreturn; }ﻩif(chct->COCT_head==NULL)ﻩ{ﻩ printf("\n通道%s处在空闲状态ﻩ",chct->name);ﻩﻩreturn;ﻩ} if(chct->COCT_head==chct->COCT_tail) { coct_list=chct->COCT_head;ﻩﻩcoct_list->next=NULL;ﻩ chct->COCT_head=NULL; chct->COCT_tail=NULL; ﻩchct->state=0;ﻩ} if(chct->COCT_head!=chct->COCT_tail)ﻩ{ ﻩcoct_list=chct->COCT_head;ﻩﻩchct->COCT_head=coct_list->next; coct_list->next=NULL;ﻩ}ﻩprocess_run_COCT(coct_list->name); free(coct_list);}voidprocess_run_process(char*dct_name);voidprocess_run_COCT(char*coct_name){ﻩCOCT*coct; DCT_list*dct_list; coct=main_COCT->next;ﻩwhile(coct!=NULL)ﻩ{ﻩﻩif(!strcmp(coct->name,coct_name))ﻩﻩﻩbreak;ﻩ coct=coct->next;ﻩ} if(coct==NULL) {ﻩﻩprintf("\n该进程不使用任何控制器");ﻩ return; } if(coct->DCT_head==NULL)ﻩ{ ﻩprintf("\n该控制器%s是空闲的"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论