資源描述:
《操作系統(tǒng)實(shí)驗(yàn)考試要點(diǎn)整理》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、創(chuàng)建線程過程(create函數(shù)的實(shí)現(xiàn))/*創(chuàng)建一對應(yīng)于函數(shù)name(外部標(biāo)識符)的線程*/TCB的結(jié)構(gòu):StructTCB{unsignedchar*stack;堆棧始址unsignedss;堆棧段針unsignedsp;堆棧指針charstate;進(jìn)程狀態(tài)charname[10];外部標(biāo)識}tcb[NTCB];首先是一些基本的定義和聲明intcreate(char*name,codeptrcode,intstacklen){inti;char*p;structint_regs*pt;/*第一步:尋找空白的T
2、CB*/for(i=1;i3、步:對線程的私有堆棧進(jìn)行初始化;用FP_SEG和FP_OFF分別獲得棧頂指針和棧頂指針的偏移量,此外系統(tǒng)對線程撤銷的工作,需要在該步驟完成:通過在堆棧初始化時(shí)原先將over()函數(shù)的入口地址壓入線程的私有堆棧中;那么當(dāng)線程所對應(yīng)的函數(shù)正常結(jié)束時(shí),over()函數(shù)的入口地址將作為函數(shù)的返回地址被彈出到CS,IP寄存器,控制自動(dòng)轉(zhuǎn)向over()函數(shù)執(zhí)行*/pt->flags=0x200;/*flags寄存器的允許中斷位*/pt->cs=FP_SEG(code);/*代碼段的段地址*/pt->ip=FP_OFF(c
4、ode);/*代碼段的段內(nèi)偏移地址*/pt->ds=_DS;/*數(shù)據(jù)段的段地址*/pt->es=_ES;/*附加數(shù)據(jù)段的段地址*/pt->off=FP_OFF(over);/*撤銷線程代碼的偏移地址*/pt->seg=FP_SEG(over);/*撤銷線程代碼的段址*//*第四步:初始化線程的控制塊TCB*/strcpy(tcb[i].name,name);/*填入線程的外部標(biāo)識符*/tcb[i].state=ready;/*將線程的狀態(tài)置成就緒態(tài)*/tcb[i].stack=p-stacklen;/*私有堆
5、棧的起始地址*/tcb[i].ss=FP_SEG(pt);/*當(dāng)前線程的段地址*/tcb[i].sp=FP_OFF(pt);/*當(dāng)前線程的棧頂指針*/returni;/*返回線程的內(nèi)部標(biāo)示符*/}終止線程的過程(over函數(shù)的實(shí)現(xiàn))/*撤銷線程,收回被撤銷線程的資源*/voidover(void){disable();/*通過disable()與enable()來實(shí)現(xiàn)在執(zhí)行該代碼段時(shí)防止中斷,確保原子性*//*撤銷當(dāng)前線程所申請的TCB內(nèi)存空空間,因?yàn)橐粋€(gè)線程在它執(zhí)行完畢之后就需要撤銷自己,所以是要用到cur
6、rent(當(dāng)前)線程*/free(tcb[current].stack);/*堆棧指針的釋放*/strcpy(tcb[current].name,'