資源描述:
《操作系統(tǒng)模擬實(shí)驗(yàn):?jiǎn)翁幚頇C(jī)系統(tǒng)的進(jìn)程調(diào)度實(shí)驗(yàn)報(bào)告.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、數(shù)學(xué)與計(jì)算機(jī)學(xué)院?jiǎn)翁幚頇C(jī)系統(tǒng)的進(jìn)程調(diào)度實(shí)驗(yàn)報(bào)告年級(jí)07學(xué)號(hào)2007429023姓名王陽(yáng)成績(jī)專業(yè)信計(jì)實(shí)驗(yàn)地點(diǎn)主樓402指導(dǎo)教師王碩實(shí)驗(yàn)項(xiàng)目單處理機(jī)系統(tǒng)的進(jìn)程調(diào)度實(shí)驗(yàn)日期實(shí)驗(yàn)報(bào)告要求:一、實(shí)驗(yàn)?zāi)康?、加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別。2、深入了解系統(tǒng)如何組織進(jìn)程、創(chuàng)建進(jìn)程。3、進(jìn)一步認(rèn)識(shí)如何實(shí)現(xiàn)處理機(jī)調(diào)度。二、實(shí)驗(yàn)原理三、實(shí)驗(yàn)要求1、采用時(shí)間片輪轉(zhuǎn)調(diào)度算法實(shí)現(xiàn)進(jìn)程調(diào)度。2、確定進(jìn)程控制塊的內(nèi)容,進(jìn)程控制塊的組織方式。3、完成進(jìn)程創(chuàng)建原語(yǔ)和進(jìn)程調(diào)度原語(yǔ)。4、編寫主函數(shù)對(duì)所做工作進(jìn)行測(cè)試。四、實(shí)驗(yàn)結(jié)果(程序)及分析#include#defineN10//系統(tǒng)中所允許的最
2、大進(jìn)程數(shù)量#defineSLOT5//時(shí)間片大小//進(jìn)程狀態(tài)枚舉typedefenum{Running,//運(yùn)行狀態(tài)Aready,//就緒狀態(tài)Blocking//阻塞狀態(tài)}ProStatus;//進(jìn)程控制塊typedefstruct{intname;//進(jìn)程標(biāo)識(shí)符ProStatusstatus;//進(jìn)程狀態(tài)intax,bx,cx,dx;//通用寄存器intpc;//程序計(jì)數(shù)器寄存器intpsw;//程序狀態(tài)字寄存器intnext;//指向下一個(gè)進(jìn)程的指針}PCB;//就緒隊(duì)列指針typedefstruct{inthead;//頭指針inttail;//尾指針}Ready;//模擬寄存器in
3、tPSW,AX,BX,CX,DX,PC,TIME;//PCB的靜態(tài)鏈表PCBpcbArea[N];//模擬PCB區(qū)域的數(shù)組intrun;//運(yùn)行狀態(tài)程序的指針Readyready;//就緒隊(duì)列指針intpfree;//空閑隊(duì)列的指針//初始化運(yùn)行狀態(tài)進(jìn)程指針voidInitRun(){run=-1;}//初始化就緒狀態(tài)隊(duì)列voidInitReady(){ready.head=ready.tail=-1;}//初始化空閑隊(duì)列voidInitFree(){inttemp;for(temp=0;temp4、[temp].next=-1;pfree=0;}//就緒隊(duì)列出隊(duì)intPopReady()//返回結(jié)點(diǎn)在PCB區(qū)域數(shù)組的編號(hào){inttemp;if(ready.head==-1){printf("就緒隊(duì)列為空,不能出隊(duì)。");return-1;}temp=ready.head;ready.head=pcbArea[temp].next;if(ready.head==-1)ready.tail=-1;pcbArea[temp].next=-1;returntemp;}//空閑隊(duì)列出隊(duì)intPopFree()//返回結(jié)點(diǎn)在PCB區(qū)域數(shù)組的編號(hào){inttemp;if(pfree==-1){p
5、rintf("空閑隊(duì)列為空,不能出隊(duì)。");return-1;}temp=pfree;pfree=pcbArea[temp].next;pcbArea[temp].next=-1;returntemp;}//就緒隊(duì)列入隊(duì)voidPushReady(intx)//x為入隊(duì)結(jié)點(diǎn)的編號(hào){inttemp;if(ready.head==-1){ready.head=x;ready.tail=x;}else{temp=ready.tail;ready.tail=x;}pcbArea[ready.tail].next=-1;}//創(chuàng)建PCBvoidCreatePCB(intx,PCBpcb)//x為
6、要?jiǎng)?chuàng)建PCB在PCB區(qū)域數(shù)組的編號(hào){pcbArea[x].ax=pcb.ax;pcbArea[x].bx=pcb.bx;pcbArea[x].cx=pcb.cx;pcbArea[x].dx=pcb.dx;pcbArea[x].name=pcb.name;pcbArea[x].next=-1;pcbArea[x].pc=pcb.pc;pcbArea[x].psw=pcb.psw;pcbArea[x].status=pcb.status;}//創(chuàng)建進(jìn)程函數(shù)voidCreate(PCBpcb){inttemp;if(pfree==-1){printf("空閑隊(duì)列為空,不能創(chuàng)建進(jìn)程。");re
7、turn;}temp=PopFree();pcb.status=Aready;CreatePCB(temp,pcb);PushReady(temp);}//進(jìn)程調(diào)度函數(shù)voidSchedule(){inttemp;if(ready.head==-1){printf("系統(tǒng)內(nèi)沒(méi)有進(jìn)程可以調(diào)度。");return;}temp=PopReady();pcbArea[temp].status=Running;TIME=SLOT;