版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 操作系統(tǒng)課程設(shè)計(jì)</b></p><p><b> ——進(jìn)程調(diào)度模擬</b></p><p> 班級(jí): 計(jì)算機(jī)科學(xué)與技術(shù)三班</p><p> 學(xué)號(hào): </p><p><b> 實(shí)驗(yàn)要求</b></p><
2、;p> 編寫一個(gè)進(jìn)程調(diào)度程序,允許多個(gè)進(jìn)程共行的進(jìn)程調(diào)度程序。 </p><p> 采用最高優(yōu)先級(jí)數(shù)優(yōu)先的調(diào)度算法(即把處理機(jī)分配給優(yōu)先數(shù)最高的進(jìn)程)和先來(lái)先服務(wù)算法。 </p><p> 每個(gè)進(jìn)程用一個(gè)進(jìn)程控制塊( PCB)表示。進(jìn)程控制塊可以包含如下信息:進(jìn)程名、優(yōu)先數(shù)、到達(dá)時(shí)間、需要運(yùn)行時(shí)間、已用CPU時(shí)間、進(jìn)程狀態(tài)等等。 </p><p&
3、gt; 進(jìn)程的優(yōu)先數(shù)及需要的運(yùn)行時(shí)間可以事先人為地指定(也可以由隨機(jī)數(shù)產(chǎn)生)。進(jìn)程的到達(dá)時(shí)間為輸入進(jìn)程的時(shí)間。 </p><p> 進(jìn)程的運(yùn)行時(shí)間以時(shí)間片為單位進(jìn)行計(jì)算。 </p><p> 每個(gè)進(jìn)程的狀態(tài)可以是就緒 W(Wait)、運(yùn)行R(Run)、或完成F(Finish)三種狀態(tài)之一。 </p><p> 就緒進(jìn)程獲得 CPU后都只能運(yùn)行一個(gè)時(shí)間片。用已
4、占用CPU時(shí)間加1來(lái)表示。 如果運(yùn)行一個(gè)時(shí)間片后,進(jìn)程的已占用 CPU時(shí)間已達(dá)到所需要的運(yùn)行時(shí)間,則撤消該進(jìn)程,如果運(yùn)行一個(gè)時(shí)間片后進(jìn)程的已占用CPU時(shí)間還未達(dá)所需要的運(yùn)行時(shí)間,也就是進(jìn)程還需要繼續(xù)運(yùn)行,此時(shí)應(yīng)將進(jìn)程的優(yōu)先數(shù)減1(即降低一級(jí)),然后把它插入就緒隊(duì)列等待CPU。 </p><p> 每進(jìn)行一次調(diào)度程序都打印一次運(yùn)行進(jìn)程、就緒隊(duì)列、以及各個(gè)進(jìn)程的 PCB,以便進(jìn)行檢查。 </p>
5、<p> 重復(fù)以上過(guò)程,直到所有進(jìn)程都完成為止。</p><p><b> 設(shè)計(jì)思路</b></p><p> 本程序用兩種算法(最高優(yōu)先級(jí)數(shù)優(yōu)先的調(diào)度算法和先來(lái)先服務(wù)算法)對(duì)多個(gè)進(jìn)程進(jìn)行調(diào)度,每個(gè)進(jìn)程有三個(gè)狀態(tài),初始狀態(tài)為就緒狀態(tài)。</p><p> 最高優(yōu)先級(jí)數(shù)優(yōu)先的調(diào)度算法中,程序的某進(jìn)程運(yùn)行時(shí)間以時(shí)間片為單位計(jì)算。各
6、進(jìn)程的優(yōu)先數(shù)或輪轉(zhuǎn)時(shí)間數(shù)以及進(jìn)程需運(yùn)行的時(shí)間片數(shù)的初始值均由用戶給定。在優(yōu)先級(jí)數(shù)優(yōu)先的調(diào)度算法中,優(yōu)先級(jí)數(shù)的值設(shè)計(jì)為100與運(yùn)行時(shí)間的差值,即Pro_time-process->needtime。進(jìn)程每執(zhí)行一次,優(yōu)先數(shù)減3,CPU時(shí)間片數(shù)加1,進(jìn)程還需要的時(shí)間片數(shù)減1。對(duì)于遇到優(yōu)先數(shù)一致的情況,采用先來(lái)先服務(wù)策略解決。</p><p><b> 三、詳細(xì)設(shè)計(jì)</b></p>
7、;<p> 設(shè)計(jì)創(chuàng)建進(jìn)程的結(jié)構(gòu)類型定義和結(jié)構(gòu)變量說(shuō)明struct ProcessPcb,定義PCB相關(guān)變量:</p><p> ProcessPcb(){next=NULL;}</p><p> char pro_name[20]; //進(jìn)程的名字</p><p> int time_submit ; //提交時(shí)間,從時(shí)間的1開始
8、計(jì)時(shí)</p><p> int time_exe ; //進(jìn)程所需的運(yùn)行時(shí)間 </p><p> int pro_id ; //進(jìn)程ID(系統(tǒng)生成)</p><p> int pro_priority ; //進(jìn)程優(yōu)先級(jí)</p><p> int time_start ; //開始執(zhí)行的
9、時(shí)間</p><p> int time_end ; //結(jié)束的時(shí)間</p><p> int time_wait ; //等待的時(shí)間</p><p> int pro_state ; //進(jìn)程的狀態(tài) (就緒,執(zhí)行,完成)</p><p> int time_left ; //還需多少
10、時(shí)間單位,初始化為所需的執(zhí)行時(shí)間</p><p> int time_turn ; //周轉(zhuǎn)時(shí)間</p><p> double time_aver ; //帶權(quán)周轉(zhuǎn)時(shí)間</p><p> 創(chuàng)建PCB類class CpuModel,定義程序中使用的各函數(shù):</p><p> CpuModel(){pcbnum=0;}<
11、;/p><p> void cpurun(); //cpu模擬運(yùn)行函數(shù)</p><p> bool GetPcb(); //進(jìn)程輸入函數(shù)</p><p> void ShowPcb(); //將輸入的進(jìn)程展示出來(lái)</p><p> void PriModel(); //可強(qiáng)占的優(yōu)先
12、進(jìn)程調(diào)度模式</p><p> void FcfsModel(); //先到先服務(wù)調(diào)度模式</p><p> ProcessPcb PcbList[100];//按提交時(shí)間排的未就緒進(jìn)程隊(duì)列()</p><p> 主函數(shù)調(diào)用已定義的各函數(shù),完成進(jìn)程模擬。</p><p><b> 結(jié)構(gòu)框圖:</b>&
13、lt;/p><p> 優(yōu)先級(jí)數(shù)調(diào)度 先來(lái)先服務(wù)</p><p><b> 退出程序</b></p><p><b> 流程圖:</b></p><p> 1.可強(qiáng)占優(yōu)先調(diào)度算法實(shí)現(xiàn)過(guò)程流程圖:</p><p> FCFS
14、算法實(shí)現(xiàn)過(guò)程流程圖:</p><p><b> 測(cè)試結(jié)果及分析</b></p><p> 1.開始運(yùn)行,顯示:</p><p> 2.輸入進(jìn)程數(shù),各進(jìn)程屬性:</p><p> 關(guān)于提交時(shí)間執(zhí)行時(shí)間等,將檢測(cè)輸入是否數(shù)字,不是數(shù)字即退出程序。</p><p> 3.顯示各進(jìn)程屬性,以及關(guān)
15、于調(diào)度算法的選擇項(xiàng):</p><p> 此處的優(yōu)先級(jí)數(shù),是用100減去執(zhí)行時(shí)間。對(duì)于優(yōu)先級(jí)數(shù)相同,則默認(rèn)FIFO。</p><p> 4.測(cè)試可強(qiáng)占的優(yōu)先進(jìn)程調(diào)度:</p><p> 一次調(diào)度完成,將計(jì)算此次運(yùn)行中CPU的利用率。</p><p> 可強(qiáng)占的優(yōu)先進(jìn)程調(diào)度算法結(jié)束,回到算法選擇界面:</p><p&g
16、t; 先到先服務(wù)調(diào)度算法運(yùn)行情況:</p><p> 選擇3,回車,退出程序。</p><p><b> 設(shè)計(jì)心得</b></p><p> 類與結(jié)構(gòu)體的設(shè)計(jì)創(chuàng)建遇到盲點(diǎn),一部分知識(shí)很少用到,忘記了,經(jīng)過(guò)查閱,復(fù)習(xí)了遺忘的知識(shí)點(diǎn)。</p><p> 循環(huán)的嵌套,通過(guò)查閱,編程,重新熟悉溫習(xí)了關(guān)于各種循環(huán)的嵌套實(shí)
17、現(xiàn)。能較好的運(yùn)用嵌套。</p><p> 通過(guò)使用幾種算法模擬進(jìn)程的調(diào)度,更好理解了計(jì)算機(jī)中各進(jìn)程間的協(xié)調(diào)正常運(yùn)行,也一定程度上鞏固了操作系統(tǒng)知識(shí),融匯了一些以前不甚理解的操作系統(tǒng)知識(shí)。</p><p> 附錄: 程序源代碼以及注釋</p><p> //進(jìn)程PCB類
18、和模擬cpu的進(jìn)程類的聲明</p><p> #include <iostream.h></p><p> #include <queue></p><p> #include <string></p><p> #include <windows.h> </p><
19、p> #include <malloc.h></p><p> using namespace std ;</p><p><b> //進(jìn)程的狀態(tài)</b></p><p> #define UNREADY 0 //未就緒</p><p> #define READY 1
20、 //就緒</p><p> #define EXECUTE 2 //執(zhí)行</p><p> #define END 3 //完成</p><p> //進(jìn)程的PCB結(jié)構(gòu)類型定義和結(jié)構(gòu)變量說(shuō)明</p><p> struct ProcessPcb</p><p>&
21、lt;b> {</b></p><p> ProcessPcb(){next=NULL;}</p><p> char pro_name[20]; //進(jìn)程的名字</p><p> int time_submit ; //提交時(shí)間,從時(shí)間的1開始計(jì)時(shí)</p><p> int time_exe ;
22、 //進(jìn)程所需的運(yùn)行時(shí)間 </p><p> int pro_id ; //進(jìn)程ID(系統(tǒng)生成)</p><p> int pro_priority ; //進(jìn)程優(yōu)先級(jí)</p><p> int time_start ; //開始執(zhí)行的時(shí)間</p><p> int time_end ;
23、 //結(jié)束的時(shí)間</p><p> int time_wait ; //等待的時(shí)間</p><p> int pro_state ; //進(jìn)程的狀態(tài) (就緒,執(zhí)行,完成)</p><p> int time_left ; //還需多少時(shí)間單位,初始化為所需的執(zhí)行時(shí)間</p><p> in
24、t time_turn ; //周轉(zhuǎn)時(shí)間</p><p> double time_aver ; //帶權(quán)周轉(zhuǎn)時(shí)間</p><p> ProcessPcb *next;</p><p><b> };</b></p><p> //封裝CPU調(diào)度與分配程序模塊。進(jìn)程類</p><p
25、> class CpuModel</p><p><b> {</b></p><p><b> public:</b></p><p> CpuModel(){pcbnum=0;}</p><p> void cpurun(); //cpu模擬運(yùn)行函數(shù)</p&
26、gt;<p> bool GetPcb(); //進(jìn)程輸入函數(shù)</p><p> void ShowPcb(); //將輸入的進(jìn)程展示出來(lái)</p><p> void PriModel(); //可強(qiáng)占的優(yōu)先進(jìn)程調(diào)度模式</p><p> void FcfsModel(); //先到先服務(wù)調(diào)度
27、模式</p><p><b> private:</b></p><p> ProcessPcb PcbList[100]; //按提交時(shí)間排的未就緒進(jìn)程隊(duì)列</p><p> int pcbnum ; //進(jìn)程數(shù)量</p><p> int freetime ;
28、 //cpu空閑時(shí)間</p><p> int allturn ; //總周轉(zhuǎn)時(shí)間</p><p> float allaver ; //總帶權(quán)周轉(zhuǎn)時(shí)間</p><p><b> };</b></p><p> #include<algor
29、ithm></p><p> //cpu模擬運(yùn)行函數(shù)</p><p> void CpuModel::cpurun()</p><p><b> {</b></p><p> if(!GetPcb()) //進(jìn)程輸入函數(shù)</p><p><b>
30、return ;</b></p><p> ShowPcb(); //展示所需執(zhí)行進(jìn)程信息</p><p> int choose = 0 ;</p><p><b> while(1)</b></p><p><b> {</b></p>
31、;<p> cout<<"***請(qǐng)選擇需要模擬的CPU調(diào)度算法!***"<<endl ;</p><p> cout<<"*** 1: 可強(qiáng)占的優(yōu)先進(jìn)程調(diào)度 ***"<<endl ;</p><p> cout<<"*** 2: 先到先調(diào)度
32、 ***"<<endl;</p><p> cout<<"*** 3: 退出系統(tǒng) ***"<<endl ;</p><p> cout<<"\n*** 請(qǐng)選擇 : " ;</p><p> cin>>cho
33、ose ;</p><p> cout<<endl ;</p><p> switch(choose)</p><p><b> {</b></p><p> case 1: </p><p> PriModel(); //可強(qiáng)占的優(yōu)先進(jìn)程方式
34、</p><p> break; </p><p><b> case 2:</b></p><p> FcfsModel(); //先到先服務(wù)調(diào)度方式</p><p><b> break;</b></p><p> default:ret
35、urn; //結(jié)束程序</p><p><b> }</b></p><p> cout<<endl;</p><p><b> }</b></p><p><b> }</b></p><p> //按進(jìn)程提交時(shí)
36、間排序的比較函數(shù)</p><p> bool cmp(ProcessPcb a,ProcessPcb b)</p><p><b> {</b></p><p> if(a.time_submit<b.time_submit)</p><p> return true;</p><p&g
37、t; return false;</p><p><b> }</b></p><p><b> //判斷是否數(shù)字</b></p><p> int isnumber(char a[])</p><p><b> {</b></p><p>
38、 int len=strlen(a);</p><p> int i,num=0;</p><p> if(a[0]>'0'&&a[0]<='9')</p><p> num=a[0]-'0';</p><p> else return -1;</p&g
39、t;<p> for(i=1;i<len;i++)</p><p><b> {</b></p><p> if(a[i]>='0'&&a[i]<='9')</p><p> num=num*10+a[i]-'0';</p>&
40、lt;p> else return -1;</p><p><b> }</b></p><p> return num;</p><p><b> }</b></p><p><b> //進(jìn)程輸入函數(shù)</b></p><p> bo
41、ol CpuModel::GetPcb()</p><p><b> {</b></p><p> char num[10];</p><p> cout<<" *** 進(jìn)程調(diào)度模擬程序 ***\n";</p><p> cout<<"
42、; *** 計(jì)算機(jī)科學(xué)與技術(shù)三班 ***\n";</p><p> cout<<" *** 孫清茂 ***\n";</p><p> cout<<"\n***請(qǐng)輸入你想建立的進(jìn)程個(gè)數(shù): ";</p><p> cin>
43、>num; //輸入進(jìn)程個(gè)數(shù)</p><p> pcbnum=isnumber(num);</p><p> if(pcbnum<=0) {cout<<"***輸入有錯(cuò)***\n";return 0;} </p><p><b> int i;</b></p>&l
44、t;p> for(i=0;i<pcbnum;i++)//輸入進(jìn)程信息</p><p><b> {</b></p><p> cout<<"***請(qǐng)依次輸入第"<<i+1<<"個(gè)進(jìn)程的信息***"<<endl ;</p><p> cou
45、t<<"*******名字:" ;</p><p> cin>>PcbList[i].pro_name ;</p><p> cout<<"***提交時(shí)間:";</p><p><b> cin>>num;</b></p><p&
46、gt; PcbList[i].time_submit=isnumber(num);</p><p> if(PcbList[i].time_submit<=0){cout<<"***輸入有錯(cuò)***\n"; return 0;}</p><p> cout<<"***執(zhí)行時(shí)間:";</p><p&
47、gt;<b> cin>>num;</b></p><p> PcbList[i].time_exe=isnumber(num);</p><p> if(PcbList[i].time_exe<=0) {cout<<"***輸入有錯(cuò)***\n"; return 0;}</p><p>
48、; PcbList[i].time_left=PcbList[i].time_exe; //設(shè)置剩余執(zhí)行時(shí)間</p><p> PcbList[i].pro_state=UNREADY; //設(shè)置狀態(tài)為未就緒</p><p> PcbList[i].pro_priority=100-PcbList[i].time_exe; //設(shè)置優(yōu)先級(jí),&
49、lt;/p><p> 優(yōu)先級(jí)=100-執(zhí)行時(shí)間</p><p> cout<<endl ;</p><p><b> }</b></p><p> sort(PcbList,PcbList+pcbnum,cmp); //按提交時(shí)間排序</p><p> for(i=
50、0;i<pcbnum;i++)</p><p> PcbList[i].pro_id=i+1; //設(shè)置Id,根據(jù)提交時(shí)間</p><p><b> return 1;</b></p><p><b> }</b></p><p> //展示所需執(zhí)行進(jìn)程信息
51、</p><p> void CpuModel::ShowPcb()</p><p><b> {</b></p><p><b> int i;</b></p><p> cout<<"\n***所需執(zhí)行的進(jìn)程信息如下***\n";</p>&
52、lt;p> for(i=0;i<pcbnum;i++)</p><p> cout<<" 進(jìn)程編號(hào): "<<PcbList[i].pro_id<<" 進(jìn)程名字: "</p><p> <<PcbList[i].pro_name<<" 提交時(shí)間: "
53、;<<PcbList[i].time_submit</p><p> <<" 執(zhí)行時(shí)間: "<<PcbList[i].time_exe<<" 優(yōu)先級(jí)數(shù):"</p><p> <<PcbList[i].pro_priority<<endl ;</p><
54、;p> cout<<endl;</p><p><b> }</b></p><p> //可強(qiáng)占的優(yōu)先進(jìn)程調(diào)度模式</p><p> void CpuModel::PriModel()</p><p><b> {</b></p><p> c
55、out<<"********可強(qiáng)占的優(yōu)先進(jìn)程調(diào)度過(guò)程如下********\n";</p><p> freetime=0; //初始化系統(tǒng)空閑時(shí)間為0</p><p> int time=0; //時(shí)間</p><p> int nextid=0;</p>&l
56、t;p> int pnum=0; //已就緒進(jìn)程數(shù)目</p><p> ProcessPcb *head; //就緒隊(duì)列</p><p> ProcessPcb *pcb,*pcb1,*pcb2;</p><p> head=(ProcessPcb*)malloc(sizeof(ProcessPcb));&l
57、t;/p><p> head->next=NULL; //head 指針不用,head->next開始為就緒隊(duì)列</p><p> //模擬cpu開始工作</p><p> while(head->next!=NULL||pnum<pcbnum)</p><p><b> {</b
58、></p><p> Sleep(1000);</p><p> time++; //時(shí)間片為1</p><p> cout<<"*Time: 第"<<time<<"秒"<<endl; //打印
59、</p><p> // 進(jìn)程就緒(查看未就緒的進(jìn)程中在該時(shí)間片是否可以進(jìn)入就緒隊(duì)列)</p><p> while(pnum<pcbnum && PcbList[pnum].time_submit<=time) </p><p><b> {</b></p><p> pcb=(P
60、rocessPcb*)malloc(sizeof(ProcessPcb));</p><p> *pcb=PcbList[pnum++];</p><p><b> //進(jìn)入就緒隊(duì)列</b></p><p> pcb->next=head->next; //插在head之后</p><p
61、> head->next=pcb;</p><p><b> } </b></p><p> //查找在time時(shí)間片應(yīng)該運(yùn)行的進(jìn)程</p><p> if(head->next==NULL)</p><p><b> {</b></p><p>
62、 cout<<" 沒有可運(yùn)行的進(jìn)程"<<endl;</p><p> freetime++;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b>
63、;</p><p> pcb2=head;</p><p> pcb=head->next;</p><p> pcb1=head->next;</p><p> //查找當(dāng)前優(yōu)先級(jí)最高的就緒進(jìn)程</p><p> while(pcb1->next!=NULL)</p><
64、;p><b> {</b></p><p> if(pcb->pro_priority<=pcb1->next->pro_priority)</p><p><b> {</b></p><p> pcb2=pcb1;</p><p> pcb=pcb1-&g
65、t;next;</p><p><b> }</b></p><p> pcb1=pcb1->next;</p><p><b> }</b></p><p> //運(yùn)行優(yōu)先級(jí)最高的進(jìn)程</p><p> if(pcb->time_left==pcb-&
66、gt;time_exe) //該進(jìn)程是否已開始</p><p><b> {</b></p><p> pcb->time_start=time; //設(shè)置開始時(shí)間</p><p> pcb->pro_state=EXECUTE; //設(shè)置狀態(tài)為執(zhí)行</p><p&
67、gt;<b> }</b></p><p> pcb->pro_priority=pcb->pro_priority-3; //優(yōu)先級(jí)數(shù)減3</p><p> pcb->time_left--; //剩余執(zhí)行時(shí)間減去時(shí)間片1</p><p><b> //打印該進(jìn)程信息</b>
68、;</p><p> cout<<" 進(jìn)程編號(hào): "<<pcb->pro_id<<" 進(jìn)程名字:"</p><p> <<pcb->pro_name<<" 提交時(shí)間: "</p><p> <<p
69、cb->time_submit<<" 執(zhí)行時(shí)間: "<<pcb->time_exe</p><p> <<"\n開始時(shí)間: "<<pcb->time_start</p><p> <<" 還剩時(shí)間: "<<pcb->ti
70、me_left<<" 優(yōu)先級(jí)數(shù):"</p><p> <<pcb->pro_priority<<endl ;</p><p> //該進(jìn)程是否執(zhí)行結(jié)束 </p><p> if(pcb->time_left==0) </p><p><b&
71、gt; {</b></p><p> pcb2->next=pcb2->next->next;//將其在就緒隊(duì)列中出列</p><p> pcb->time_end=time; //設(shè)置結(jié)束時(shí)間</p><p> pcb->time_turn=pcb->time_end-pcb-&
72、gt;time_submit+1; </p><p><b> //計(jì)算周轉(zhuǎn)時(shí)間</b></p><p> pcb->time_aver=pcb->time_turn/(double)pcb-></p><p> time_exe; //計(jì)算帶權(quán)周轉(zhuǎn)時(shí)間</p><p> pcb->pr
73、o_state=END;</p><p> cout<<"\n進(jìn)程"<<pcb->pro_id<<"運(yùn)行結(jié)束:"<<"\n進(jìn)程名字: "</p><p> <<pcb->pro_name<<" 提交時(shí)間: "</p
74、><p> <<pcb->time_submit<<" 執(zhí)行時(shí)間: "</p><p> <<pcb->time_exe<<" 開始時(shí)間: "</p><p> <<pcb->time_start</p><p>
75、<<" 結(jié)束時(shí)間: "<<pcb->time_end<<"\n周轉(zhuǎn)時(shí)間: "</p><p> <<pcb->time_turn<<" 帶權(quán)周轉(zhuǎn)時(shí)間:</p><p> <<pcb->time_aver<<endl ; &
76、lt;/p><p><b> }</b></p><p><b> } </b></p><p> } //模擬CPU工作結(jié)束</p><p> cout<<"\n 所有進(jìn)程運(yùn)行完畢!"<&l
77、t;endl;</p><p> double c=(time-freetime)/(double)time*100;</p><p> cout<<"\n cpu利用率:"<<c<<"%"<<endl;</p><p> }
78、 //可強(qiáng)占的優(yōu)先進(jìn)程調(diào)度模式結(jié)束</p><p> //先到先服務(wù)調(diào)度模式</p><p> void CpuModel::FcfsModel()</p><p><b> {</b></p><p> cout<<"********先到先服務(wù)進(jìn)程調(diào)度過(guò)程如下********\
79、n";</p><p> freetime=0; //初始化系統(tǒng)空閑時(shí)間為0</p><p> int time=0; //時(shí)間</p><p> int pnum=0; //已就緒進(jìn)程數(shù)目</p><p> ProcessPcb que[100];
80、 //就緒隊(duì)列</p><p> int quef=0,quee=0; //就緒隊(duì)列的頭指針和尾指針</p><p> //模擬cpu開始工作</p><p> while(quef<quee||pnum<pcbnum)</p><p><b> {</b></p&g
81、t;<p> Sleep(1000);</p><p> time++; //時(shí)間片為1</p><p> cout<<"*Time: 第"<<time<<"秒"<<endl; //打印</p><p> //進(jìn)程就緒(查看未
82、就緒的進(jìn)程中在該時(shí)間片是否可以進(jìn)入就緒隊(duì)列)</p><p> while(pnum<pcbnum && PcbList[pnum].time_submit<=time) </p><p> que[quee++]=PcbList[pnum++];</p><p> //查找time時(shí)間片的運(yùn)行進(jìn)程</p><p
83、> if(quef==quee)</p><p><b> {</b></p><p> cout<<" 沒有可運(yùn)行的進(jìn)程"<<endl;</p><p> freetime++;</p><p><b> }</b><
84、/p><p><b> else</b></p><p> { //運(yùn)行進(jìn)程</p><p> if(que[quef].time_left==que[quef].time_exe) //該進(jìn)程是否已開始</p><p><b> {</b></p>
85、<p> que[quef].time_start=time; //設(shè)置開始時(shí)間</p><p> que[quef].pro_state=EXECUTE; //設(shè)置狀態(tài)為執(zhí)行</p><p><b> }</b></p><p> que[quef].time_lef
86、t--; //剩余執(zhí)行時(shí)間減去時(shí)間片1</p><p><b> //打印進(jìn)程信息</b></p><p> cout<<"進(jìn)程編號(hào): "<<que[quef].pro_id<<" 進(jìn)程名字: "</p><p> <<
87、que[quef].pro_name<<" 提交時(shí)間: "</p><p> <<que[quef].time_submit<<" 執(zhí)行時(shí)間: "<<que[quef].time_exe</p><p> <<"\n開始時(shí)間: "<<que[quef
88、].time_start<<" 還剩時(shí)間: "</p><p> <<que[quef].time_left<<endl ;</p><p> //該進(jìn)程是否執(zhí)行結(jié)束</p><p> if(que[quef].time_left==0) </p><p&
89、gt;<b> {</b></p><p> que[quef].time_end=time;</p><p> que[quef].time_turn=</p><p> que[quef].time_end-que[quef].time_submit+1;</p><p> que[quef].time_a
90、ver=</p><p> que[quef].time_turn/(double)que[quef].time_exe;</p><p> que[quef].pro_state=END;</p><p> cout<<"\n進(jìn)程"<<que[quef].pro_id<<"運(yùn)行結(jié)束:"
91、;<<"\n進(jìn)程名字: "</p><p> <<que[quef].pro_name<<" 提交時(shí)間: "</p><p> <<que[quef].time_submit<<" 執(zhí)行時(shí)間: "</p><p> <<qu
92、e[quef].time_exe<<" 開始時(shí)間: "</p><p> <<que[quef].time_start<<" 結(jié)束時(shí)間: "</p><p> <<que[quef].time_end<<"\n周轉(zhuǎn)時(shí)間: "<<que[quef]
93、.time_turn</p><p> <<" 帶權(quán)周轉(zhuǎn): "<<que[quef].time_aver<<endl ;</p><p> quef++; //pcb出隊(duì)列 </p><p><b> }</b></p>&l
94、t;p><b> }</b></p><p> } // CPU模擬結(jié)束</p><p> cout<<"\n所有進(jìn)程運(yùn)行完畢!"<<endl;</p><p> double c=(time-freetim
95、e)/(double)time*100;</p><p> cout<<"\ncpu利用率:"<<c<<"%"<<endl;</p><p><b> }</b></p><p> int main()</p><p><
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計(jì)——進(jìn)程調(diào)度模擬算法
- 操作系統(tǒng)課程設(shè)計(jì)——進(jìn)程調(diào)度模擬算法
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程調(diào)度模擬設(shè)計(jì)
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程調(diào)度子系統(tǒng)模擬實(shí)現(xiàn)
- 進(jìn)程調(diào)度算法 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程調(diào)度算法
- 進(jìn)程調(diào)度算法操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程調(diào)度算法
- 操作系統(tǒng)模擬進(jìn)程課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告---進(jìn)程調(diào)度的模擬實(shí)現(xiàn)
- 進(jìn)程調(diào)度算法操作系統(tǒng)課程設(shè)計(jì) (2)
- 操作系統(tǒng)_進(jìn)程調(diào)度算法課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程調(diào)度程序設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)---作業(yè)調(diào)度模擬
- 操作系統(tǒng)課程設(shè)計(jì)——操作系統(tǒng)課程設(shè)計(jì)模擬操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)-磁盤調(diào)度模擬法
評(píng)論
0/150
提交評(píng)論