資源描述:
《時間片輪轉操作系統(tǒng)課程設計my》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在學術論文-天天文庫。
1、#include#include#include#include/*狀態(tài)碼*/#defineNTCB5/*TCB的數(shù)量*/#defineNTEXT60/*線程通信緩沖區(qū)文本內(nèi)容的大小*/#defineNBUF10/*緩沖區(qū)的個數(shù)*//****線程的五種狀態(tài)****/#defineSTART-1#defineFINISHED0#defineRUNNING1#defineREADY2#defineBLOCKED3#defineti
2、meout1/*線程時間片輪轉的時間*/typedefint(far*codeptr)(void);/*函數(shù)指針定義*//*DOS的初始化狀態(tài)碼*/#defineGET_INDOS0x34#defineGET_CRIT_ERR0x5d06structbuffer{intsender;intsize;chartext[NTEXT];structbuffer*next;}*freebuff;/*消息緩沖區(qū)的定義*/typedefstruct{intvalue;structTCB*wq;}semapho
3、re;/*記錄型信號量定義*/structTCB{unsignedchar*stack;unsignedss;unsignedsp;charstate;charname[10];structbuffer*mq;/*消息隊列排隊使用*/semaphoremutex;/*互斥信號量,用于對TCB消息隊列處理時互斥*/semaphoresm;/*消息隊列的計數(shù)信號亮*/structTCB*next;}tcb[NTCB];/*線程控制塊定義*/structint_regs{unsignedbp;unsig
4、neddi;unsignedsi;unsignedds;unsignedes;unsigneddx;unsignedcx;unsignedbx;unsignedax;unsignedip;unsignedcs;unsignedflags;unsignedoff;unsignedseg;};/*線程私有堆棧的數(shù)據(jù)結構的定義*/charfar*indos_ptr=0;charfar*crit_err_ptr=0;unionREGSregs;structSREGSsegregs;intcurrenttc
5、b=-1;/*初始化TCB的值*/inttimecount=0;/*時間計數(shù)初始為0*/semaphoresfb={NBUF,NULL};/*空閑緩沖區(qū)的同步信號量*/semaphoremutexfb={1,NULL};/*對空閑緩沖區(qū)處理的互斥信號量*/semaphorefmutex={0,NULL};/*F1和F2的同步信號量*/voidInitBuff(void);/*初始化消息緩沖區(qū)*/intDosBusy(void);/*DosBusyFunctionreturnnon_zeroifDO
6、Sisbusy*/voidInitInDos(void);/*InitInDosFuntiontogettheaddressesofINDOSandCRIT_ERRflags*/voidInitTcb(void);/*初始化TCB*/voidinterrupt(*old_int8)(void);/*舊的時鐘中斷處理程序*/voidinterruptnew_int8(void);/*新的時鐘中斷處理程序*/intcreate(char*name,codeptrcode,intstacklen);/*
7、創(chuàng)建線程*/voidtcb_state(void);/*線程狀態(tài)函數(shù)*/intSeeknext(void);/*尋找下一個就緒線程*/voidinterruptcpu_switch(void);/*CPU調(diào)度函數(shù)*/intall_finished();/*判斷所有線程是否完成*/voidDestroy(inti);/*銷毀一個線程*/voidover(void);/*結束一個線程*/voidwait(semaphore*sem);/*P操作*/voidsignal(semaphore*sem);/
8、*v操作*/voidblock(structTCB**qp);/*阻塞函數(shù)*/voidwakeup(structTCB**qp);/*喚醒函數(shù)*/voidf1(void);/*函數(shù)F1*/voidf2(void);/*函數(shù)F2*/voidinsert(structbuffer**mq,structbuffer*buff);/*將buff所指的緩沖區(qū)插到*mq所指的緩沖隊列末尾*/voidsend(char*receiver,char*a,intsize);/*發(fā)送一個消息給rece