欢迎来到天天文库
浏览记录
ID:19583577
大小:95.00 KB
页数:16页
时间:2018-10-03
《操作系统课程设计之线程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、/*说明:本程序中,默认以tcb下标为就绪队列,即从tcb[0]~tcb[NTCB-1]为轮转执行,程序中出现的id均为线程内部标识,即tcb的下标*/#include#include/*包含malloc()的头文件*/#include#include/*包含strcmp(),strcpy()的头文件*/#defineGET_INDOS0X34/*参见实验指导书*/#defineGET_CRIT_ERR0X5D06/*参见实验指导书*/#defineNTCB5/*NTCB是系统允许的最多线程数,也就是允
2、许的线程控制块最大数*/#defineNBUF5/*空闲缓冲区的数量*/#defineNTEXT20/*在线程间传送信息时,信息的上限*/#defineFINISHED0/*表示线程处于终止态或TCB是空闲状态*/#defineRUNNING1/*表示线程处于运行态*/#defineREADY2/*表示线程处于就绪态*/#defineBLOCKED3/*表示线程处于阻塞态*/intcurrent=0;/*当前TCB,初始=0*/inttimecount=0;/*时间计数*/intTL=1;/*时间片大小*/charfar*indos_ptr=0;/*该指针变量存放INDOS
3、标志的地址*/charfar*crit_err_ptr=0;/*该指针变量存放严重错误标志的地址*//*记录型信号量的定义,参见课本51页*/typedefstruct{intvalue;/*资源数目*/structTCB*wq;/*线程链表指针,链接所有等待线程*/}semaphore;structTCB{unsignedchar*stack;/*线程堆栈的起始地址*/unsignedss;/*堆栈段址*/unsignedsp;/*堆栈指针*/charstate;/*线程状态:执行、就绪、阻塞*/charname[10];/*线程的外部标识符*/structbuffer*
4、mq;/*消息队列队首指针*/semaphoremutex;/*消息队列互斥信号量*/semaphoresm;/*消息队列资源信号量,用于实现同步*/structTCB*next;/*阻塞时TCB排队*/}tcb[NTCB];/*buf[NBUF]消息缓冲区的定义,freebuf空闲缓冲队列,临界资源(需互斥访问,设置mutexfb信号量)。参见课本70页*/structbuffer{intsender;/*消息发送者的内部标识*/intsize;/*消息长度*/chartext[NTEXT];/*消息正文*/structbuffer*next;/*指向下一个消息缓冲区的指
5、针*/}buf[NBUF],*freebuf;semaphoremutexfb={1,NULL};/*对空闲消息缓冲队列处理的互斥信号量*/semaphoresfb={NBUF,NULL};/*计数用的资源信号量*/typedefint(far*codeptr)(void);/*函数指针,指向一个函数的起始地址*/voidinterrupt(*old_int8)(void);/*旧中断程序的函数指针*//*以下为函数的声明*/voidInitDos(void);intDosBusy(void);voidInitTcb(void);voidInitBuff(void);int
6、create(char*name,codeptrcode,intstacklen);/*Create()线程创建初始化*/voidinterruptnew_int8(void);voidinterruptswtch(void);/*swtch()线程调度*/voiddestroy(intid);/*destroy()线程撤销函数*/voidover(void);/*over()撤销线程并重新进行调度*/voidFind_TRRS(void);/*Round-RobinScheduling轮转调度*/voidsender(void);voidreceiver(void);vo
7、idtcb_state(void);/*输出所有线程的状态信息*/intfinished();/*检查系统中除0#线程外的其他线程是否执行完,是返回1,否返回0*/intreceive(char*sender,char*b);voidsend(char*receiver,char*a,intsize);voidinsert(structbuffer**mq,structbuffer*buff);structbuffer*getbuf(void);voidv(semaphore*sem);voidp(semaphor
此文档下载收益归作者所有