操作系统课程设计之线程

操作系统课程设计之线程

ID:19583577

大小:95.00 KB

页数:16页

时间:2018-10-03

操作系统课程设计之线程_第1页
操作系统课程设计之线程_第2页
操作系统课程设计之线程_第3页
操作系统课程设计之线程_第4页
操作系统课程设计之线程_第5页
资源描述:

《操作系统课程设计之线程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。