版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實驗五模擬SPOOLING技術實驗目的通過設計一個SPOOLING假脫機輸出的模擬程序,更好地理解和掌握SPOOLING假脫機技術.。實驗原理設計一個SPOOLING輸出進程和兩個請求輸出的用戶進程。當用戶需要輸出時,調用請求輸出進程,將需要輸出的信息輸出到輸出井。SPOOLING輸出進程工作時,根據(jù)請求塊記錄的各進程要輸出的信息,將其實際輸出到顯示器。這里,SPOOLING進程與請求輸出的用戶進程可并發(fā)運行。進程調度采用隨機算法,這與進程輸出信息的隨機性相一致。兩個請求輸出的用戶進程的調度概率各為45%,SPOOLING輸出進程為10%,這由隨機數(shù)發(fā)生器產生的隨機數(shù)模擬決定。3.數(shù)據(jù)結構進程控制快PCBstructpcb//進程控制塊PCB{ intid; //進程標識 intstatus; //狀態(tài) intlength;//輸出長度 intbuf[BUFFERNUM];//輸出緩沖}其中狀態(tài)可用值為0:就緒狀態(tài)1:等待狀態(tài)1,表示輸出井滿,請求輸出的用戶進程必須等待2:等待狀態(tài)2,表示輸出井空,SPOOLING輸出進程必須等待3:等待狀態(tài)3,表示輸出請求塊使用完,請求輸出的用戶進程必須等待4:結束狀態(tài)請求輸出塊structreq{ intreqid;//要求輸出的進程 intlength;//輸出長度 intaddr;//輸出首地址}輸出井結構structoutbuf{ intbuf[OUTBUFFERNUM];//輸出井緩沖區(qū) intusedNum;//輸出井緩沖區(qū)已使用的數(shù)目 inthead;//指示輸出井空閑塊首地址 //inttail;//指示輸出井信息塊〔有信息的局部〕尾地址}5.程序流程圖1〕進程調度工作模擬流程2〕請求輸出進程流程開始開始將新的數(shù)據(jù)輸出到緩沖區(qū)上次緩沖區(qū)是否處理完填寫請求塊,并將數(shù)據(jù)輸出到輸出井輸入井是否滿修改良程狀態(tài)為1,進程等待是否有空閑的請求塊修改良程狀態(tài)為2,進程等待SPOOLING進程是否阻塞修改SPOOLING進程狀態(tài)為就緒要求輸出的文件是否輸出完修改良程狀態(tài)為結束YYYNNNNNNYYY返回2〕SPOOLING輸出進程流程開始開始是否有請求塊按照請求塊從輸出井中取數(shù)據(jù)輸出〔打印到屏幕〕是否所有輸出進程結束修改相應的數(shù)據(jù)結構和指示標志修改阻塞進程狀態(tài)為就緒是否有阻塞的輸出進程修改SPOOLING進程狀態(tài)為結束YYN返回修改SPOOLING進程狀態(tài)為2實驗內容根據(jù)給出程序框架,將spooling()函數(shù)補充完整。#include"stdio.h"#include"stdlib.h"#include"time.h"#include"iostream.h"#definePROCESSNUM2//輸出進程個數(shù)#defineBUFFERNUM100//內存緩沖字節(jié)個數(shù)#defineOUTBUFFERNUM200//輸出井存儲字節(jié)個數(shù)#defineREQBLOCKNUM10structpcb//進程控制塊PCB{ intid; //進程標識 intstatus; //狀態(tài) intlength;//輸出長度 intbuf[BUFFERNUM];//輸出緩沖}PCB[PROCESSNUM+1];structreq//請求輸出塊{ intreqid;//要求輸出的進程 intlength;//輸出長度 intaddr;//輸出首地址}ReqBlock[REQBLOCKNUM];structoutbuf//輸出井結構{ intbuf[OUTBUFFERNUM];//輸出井緩沖區(qū) intusedNum;//輸出井緩沖區(qū)已使用的數(shù)目 inthead;//指示輸出井空閑塊首地址 //inttail;//指示輸出井信息塊〔有信息的局部〕尾地址}OutBuffer[PROCESSNUM];intUsedReqBlockNum=0;//記錄當前已使用的請求塊數(shù)目inthead=0,tail=0;//指示當前使用的輸出請求塊,request從tail開始取,spooling從head開始取intFileNum[PROCESSNUM];voidinput()//輸入函數(shù){ for(inti=0;i<PROCESSNUM;i++) { cout<<"輸入第"<<i+1<<"個用戶需要輸出的文件數(shù)目:"; cin>>FileNum[i]; }}voidinit()//初始化函數(shù){ inti,j; for(i=0;i<PROCESSNUM;i++) { OutBuffer[i].head=0; OutBuffer[i].usedNum=0; for(j=0;j<OUTBUFFERNUM;j++) OutBuffer[i].buf[j]=0; } for(i=0;i<REQBLOCKNUM;i++) { ReqBlock[i].reqid=-1; ReqBlock[i].length=0; ReqBlock[i].addr=0; } for(i=0;i<PROCESSNUM+1;i++) { PCB[i].id=i; PCB[i].status=0; PCB[i].length=0; for(j=0;j<BUFFERNUM;j++) PCB[i].buf[j]=0; } PCB[PROCESSNUM].status=2;//spooling進程的狀態(tài)置2〔輸出井空〕}voidrequest(inti){ intj,length=0; if(PCB[i].length==0)//判斷上次的輸出是否處理完 { FileNum[i]=FileNum[i]-1; //srand((unsigned)time(NULL)); while(1) { j=rand()%10; if((j==0)&&(length!=0))//以0結束此次輸出 { PCB[i].length=length; break; } PCB[i].buf[length]=j; length++; } } if(OutBuffer[i].usedNum+length>OUTBUFFERNUM)//判斷輸出井是否滿 { PCB[i].status=1;//輸出井滿,進程狀態(tài)置1 return; } if(UsedReqBlockNum==REQBLOCKNUM)//判斷是否有空閑的請求塊 { PCB[i].status=3;//沒有空閑的請求塊,進程狀態(tài)置3 return; } //填寫請求塊 ReqBlock[tail].reqid=i; ReqBlock[tail].addr=OutBuffer[i].head; ReqBlock[tail].length=PCB[i].length; UsedReqBlockNum++; //將數(shù)據(jù)寫到輸出井 intk; for(k=0;k<PCB[i].length;k++) OutBuffer[i].buf[(OutBuffer[i].head+k)%OUTBUFFERNUM]=PCB[i].buf[k]; OutBuffer[i].head=(OutBuffer[i].head+PCB[i].length)%OUTBUFFERNUM; OutBuffer[i].usedNum+=PCB[i].length; PCB[i].length=0; if(PCB[PROCESSNUM].status==2)//假設spooling進程阻塞,那么修改其狀態(tài)為可執(zhí)行〔0〕 PCB[PROCESSNUM].status=0; tail=(tail+1)%REQBLOCKNUM; if(FileNum[i]==0) PCB[i].status=4;}voidspooling(){ //請補充該模塊。}voidwork()//模擬進程調度{ inti; boolisFinish; srand((unsigned)time(NULL)); while(1) { i=rand()%100; if(i<=45) { if(PCB[0].status==0) request(0); }elseif(i<=90) { if(PCB[1].status==0) request(1); }else spooling(); isFinish=true; for(i=0;i<PROCESSNUM+1;i++)//判斷是否所有進程都結束 if(PCB[i].s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國非那甾胺行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年中國老年保健品行業(yè)發(fā)展監(jiān)測及市場發(fā)展?jié)摿︻A測報告
- 2025年度水面承包權購置與漁業(yè)資源保護合同3篇
- 2025年社保代買及綜合保險服務協(xié)議書-企業(yè)員工全面保障4篇
- 2025-2031年中國毛毯行業(yè)發(fā)展全景監(jiān)測及投資方向研究報告
- 2025年中國變焦一體機市場全面調研及行業(yè)投資潛力預測報告
- 2025年中國水晶紅果(山楂)果凍行業(yè)市場運營趨勢分析及投資潛力研究報告
- 和環(huán)境保護2024年投資備選項目可行性研究報告編制要求
- 二零二五年度高校畢業(yè)生實習就業(yè)實習補貼及就業(yè)輔導合同4篇
- 2025年中國觸摸屏一體機行業(yè)市場發(fā)展監(jiān)測及投資潛力預測報告
- 河北省大學生調研河北社會調查活動項目申請書
- GB/T 20920-2007電子水平儀
- 如何提高教師的課程領導力
- 企業(yè)人員組織結構圖
- 日本疾病診斷分組(DPC)定額支付方式課件
- 兩段焙燒除砷技術簡介 - 文字版(1)(2)課件
- 實習證明模板免費下載【8篇】
- 復旦大學用經(jīng)濟學智慧解讀中國課件03用大歷史觀看中國社會轉型
- 案件受理登記表模版
- 2022年浙江省嘉興市中考數(shù)學試題(Word版)
- 最新焊接工藝評定表格
評論
0/150
提交評論