操作系統(tǒng)課程設(shè)計(jì)-進(jìn)程調(diào)度模擬設(shè)計(jì)--先來(lái)先服務(wù)-優(yōu)先級(jí)法_第1頁(yè)
操作系統(tǒng)課程設(shè)計(jì)-進(jìn)程調(diào)度模擬設(shè)計(jì)--先來(lái)先服務(wù)-優(yōu)先級(jí)法_第2頁(yè)
操作系統(tǒng)課程設(shè)計(jì)-進(jìn)程調(diào)度模擬設(shè)計(jì)--先來(lái)先服務(wù)-優(yōu)先級(jí)法_第3頁(yè)
操作系統(tǒng)課程設(shè)計(jì)-進(jìn)程調(diào)度模擬設(shè)計(jì)--先來(lái)先服務(wù)-優(yōu)先級(jí)法_第4頁(yè)
操作系統(tǒng)課程設(shè)計(jì)-進(jìn)程調(diào)度模擬設(shè)計(jì)--先來(lái)先服務(wù)-優(yōu)先級(jí)法_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、武漢理工大學(xué)系統(tǒng)軟件開(kāi)發(fā)實(shí)訓(xùn)A課程設(shè)計(jì)說(shuō)明書(shū)學(xué) 號(hào): 課 程 設(shè) 計(jì)課程名字系統(tǒng)軟件開(kāi)發(fā)實(shí)訓(xùn)A題 目進(jìn)程調(diào)度模擬設(shè)計(jì)先來(lái)先服務(wù)、優(yōu)先級(jí)法學(xué) 院計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)班 級(jí)姓 名指導(dǎo)教師李玉強(qiáng)2014年01月13日課程設(shè)計(jì)任務(wù)書(shū)學(xué)生姓名: 專業(yè)班級(jí): 指導(dǎo)教師: 李玉強(qiáng) 工作單位: 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 題 目: 進(jìn)程調(diào)度模擬設(shè)計(jì)先來(lái)先服務(wù)、優(yōu)先級(jí)法 初始條件:1預(yù)備內(nèi)容:閱讀操作系統(tǒng)的處理機(jī)管理章節(jié)內(nèi)容,對(duì)進(jìn)程調(diào)度的功能以及進(jìn)程調(diào)度算法有深入的理解。2實(shí)踐準(zhǔn)備:掌握一種計(jì)算機(jī)高級(jí)語(yǔ)言的使用。要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說(shuō)明書(shū)撰寫(xiě)等具體要求

2、)1模擬進(jìn)程調(diào)度,能夠處理以下的情形: 能夠選擇不同的調(diào)度算法(要求中給出的調(diào)度算法); 能夠輸入進(jìn)程的基本信息,如進(jìn)程名、優(yōu)先級(jí)、到達(dá)時(shí)間和運(yùn)行時(shí)間等; 根據(jù)選擇的調(diào)度算法顯示進(jìn)程調(diào)度隊(duì)列; 根據(jù)選擇的調(diào)度算法計(jì)算平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間。2設(shè)計(jì)報(bào)告內(nèi)容應(yīng)說(shuō)明: 課程設(shè)計(jì)目的與功能; 需求分析,數(shù)據(jù)結(jié)構(gòu)或模塊說(shuō)明(功能與框圖); 源程序的主要部分; 測(cè)試用例,運(yùn)行結(jié)果與運(yùn)行情況分析; 自我評(píng)價(jià)與總結(jié)。時(shí)間安排:設(shè)計(jì)安排3周:查閱、分析資料 1天系統(tǒng)軟件的分析與建模 4天系統(tǒng)軟件的設(shè)計(jì) 5天系統(tǒng)軟件的實(shí)現(xiàn) 3天撰寫(xiě)文檔 1天課程設(shè)計(jì)驗(yàn)收答辯 1天設(shè)計(jì)驗(yàn)收安排:設(shè)計(jì)周的第三周的指定時(shí)間到實(shí)

3、驗(yàn)室進(jìn)行上機(jī)驗(yàn)收。設(shè)計(jì)報(bào)告書(shū)收取時(shí)間:課程設(shè)計(jì)驗(yàn)收答辯完結(jié)時(shí)。(注意事項(xiàng):嚴(yán)禁抄襲,一旦發(fā)現(xiàn),抄與被抄的一律按0分記)指導(dǎo)教師簽名: 2013 年 12 月 10日系主任(或責(zé)任教師)簽名: 2013 年 12 月 10日課程設(shè)計(jì)報(bào)告書(shū)1.需求分析 1.1設(shè)計(jì)目的(1)閱讀操作系統(tǒng)的處理機(jī)管理章節(jié)內(nèi)容,對(duì)進(jìn)程調(diào)度的功能以及進(jìn)程調(diào)度算法有深入的理解。(2)掌握一種計(jì)算機(jī)高級(jí)語(yǔ)言的使用。要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說(shuō)明書(shū)撰寫(xiě)等具體要求) 1.2程序流程圖開(kāi) 始選擇調(diào)度算法先來(lái)先服務(wù)法輸入進(jìn)程隊(duì)列信息優(yōu)先級(jí)法結(jié)束?Y/N結(jié) 束YN切 換 算 法1.3設(shè)計(jì)要求(1)能夠

4、選擇不同的調(diào)度算法(要求中給出的調(diào)度算法);(2)能夠輸入進(jìn)程的基本信息,如進(jìn)程名、優(yōu)先級(jí)、到達(dá)時(shí)間和運(yùn)行時(shí)間等;(3)根據(jù)選擇的調(diào)度算法顯示進(jìn)程調(diào)度隊(duì)列;(4)根據(jù)選擇的調(diào)度算法計(jì)算平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間。2.功能設(shè)計(jì) 2.1數(shù)據(jù)結(jié)構(gòu)1. 進(jìn)程的結(jié)構(gòu)定義:struct processchar name10; /進(jìn)程名int no; /進(jìn)程序號(hào)double arrivetime; /進(jìn)程達(dá)到時(shí)間double needtime; /進(jìn)程運(yùn)行時(shí)間 double starttime; /進(jìn)程開(kāi)始時(shí)間double endtime; /進(jìn)程結(jié)束時(shí)間int state; /進(jìn)程狀態(tài),0表示未執(zhí)行,

5、1表示已執(zhí)行int priority; /進(jìn)程優(yōu)先級(jí)process *next; process *head=Null;int count; ;2.使用鏈表存儲(chǔ)進(jìn)程并按照到達(dá)時(shí)間排序、開(kāi)始鏈表空?只有一節(jié)點(diǎn)比較當(dāng)前節(jié)點(diǎn)的到達(dá)時(shí)間與連續(xù)兩個(gè)節(jié)點(diǎn)(p1,p1-next)的到達(dá)時(shí)間至少兩個(gè)節(jié)點(diǎn)結(jié) 束YN插 到 鏈 頭比較當(dāng)前節(jié)點(diǎn)與已存在節(jié)點(diǎn)的到達(dá)時(shí)間在兩節(jié)點(diǎn)之間?插入它們之間插 入p1=p1-nextvoid insert(process *current) if (head!=Null)if(head-next=Null) /如果只有一個(gè)節(jié)點(diǎn)if(current-arrivetimearrivet

6、ime) /如果比鏈頭到達(dá)時(shí)間早,則插入鏈頭current-next=head;head=current;elsecurrent-next=Null;head-next=current; else /如果至少兩個(gè)節(jié)點(diǎn) process *p1=head; if(head-arrivetime current-arrivetime ) current-next=head; head=current; else int flag=1; while(p1-next!=Null) /當(dāng)head后面不為空時(shí)一直做 /如果在兩個(gè)節(jié)點(diǎn)間 if(p1-arrivetime arrivetime & p1-nex

7、t-arrivetime current-arrivetime) current-next=p1-next; p1-next=current; flag=0; break; else p1=p1-next; /如果到達(dá)時(shí)間最大,則插到鏈尾 if (flag=1) p1-next=current; current-next=Null; else head=current;2.2先來(lái)先服務(wù)算法設(shè)計(jì) 1.FCFS算法說(shuō)明將用戶作業(yè)和就緒進(jìn)程按提交順序或變?yōu)榫途w狀態(tài)的先后排成隊(duì)列,并按照先來(lái)先服務(wù)的方式進(jìn)行調(diào)度處理,是一種最普遍和最簡(jiǎn)單的方法。在該算法中,每個(gè)作業(yè)或進(jìn)程按照它們?cè)陉?duì)列中等待時(shí)間長(zhǎng)短來(lái)決

8、定它們是否優(yōu)先享受服務(wù)。在沒(méi)有特殊理由要優(yōu)先調(diào)度某類作業(yè)或進(jìn)程時(shí),從處理的角度來(lái)看,F(xiàn)CFS方式是一種最合適的方法,因?yàn)闊o(wú)論是追加還是取出一個(gè)隊(duì)列元素在操作上都是最簡(jiǎn)單的。2.創(chuàng)建進(jìn)程void createFCFS() process *q1=new process ; coutcount; coutendl; int number=1; while(numberno=number; cout進(jìn)程序號(hào)numberendl; coutq1-name; coutq1-arrivetime; coutq1-needtime; q1-next=NULL; insert(q1); number+; co

9、utendlnextP=null結(jié) 束YN前一個(gè)結(jié)束,后一個(gè)進(jìn)程是否到達(dá)p節(jié)點(diǎn):開(kāi)始時(shí)間=到達(dá)時(shí)間 結(jié)束時(shí)間=開(kāi)始時(shí)間+執(zhí)行時(shí)間 系統(tǒng)時(shí)間=結(jié)束時(shí)間并計(jì)算周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間P=head-nextNp節(jié)點(diǎn):開(kāi)始時(shí)間=系統(tǒng)時(shí)間 結(jié)束時(shí)間=開(kāi)始時(shí)間+執(zhí)行時(shí)間 系統(tǒng)時(shí)間=結(jié)束時(shí)間并計(jì)算周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間P=head-nextYvoid printFCFS() process *p=new process; double systime=0; /記錄系統(tǒng)時(shí)間 double turn=0; /平均周轉(zhuǎn)時(shí)間 double turnw=0; /平均帶權(quán)周轉(zhuǎn)時(shí)間 if(head=NULL) cout沒(méi)有

10、進(jìn)程調(diào)度starttime=head-arriveTime; head-endtime=head-arrivetime+head-needtime; systime=head-endtime; turn=turn+(head-endtime - head-arrivetime); turnw=turnw+(head-endtime - head-arrivetime) / head-needtime; p=head-next; while(p!=NULL) if(p-arrivetimesystime) /如果前一個(gè)結(jié)束后一個(gè)還沒(méi)到達(dá) p-starttime=p-arrivetime; p-e

11、ndtime=p-starttime+p-needtime; systime=p-endTime; turn=turn+(p-endtime-p-arrivetime); turnw=turnw+(p-endtime-p-arrivetime)/p-needtime; p=p-next; else /如果前一個(gè)未結(jié)束時(shí)后一個(gè)已經(jīng)到達(dá) p-starttime=systime; p-endtime=p-starttime+p-needtime; systime=p-endtime; turn=turn+(p-endtime-p-arrivetime); turnw=turnw+(p-endtime

12、-p-arrivetime)/p-needtime; p=p-next; cout.setf(ios:left); /設(shè)置對(duì)齊方式為left coutsetw(10)進(jìn)程序號(hào)setw(10)進(jìn)程名setw(10)到達(dá)時(shí)間setw(10)開(kāi)始時(shí)間setw(10)執(zhí)行時(shí)間setw(10)結(jié)束時(shí)間endl; process *temp=head; while(temp!=NULL) cout.setf(ios:left); coutsetw(10)nosetw(10)namesetw(10)arriveTimesetw(10)startTimesetw(10)needTimesetw(10)endT

13、imenext; cout平均周轉(zhuǎn)時(shí)間turn/countendl平均帶權(quán)周轉(zhuǎn)時(shí)間turnw/countnext!=NULL) /回收空間 process *t=new process; t=head-next; head-next=t-next; delete t; head=NULL; 2.3 優(yōu)先級(jí)算法的設(shè)計(jì)1.PIRO算法及說(shuō)明 優(yōu)先級(jí)法可被用作作業(yè)或進(jìn)程的調(diào)度策略。首先,系統(tǒng)或用戶按某種原則為作業(yè)或進(jìn)程指定一個(gè)優(yōu)先級(jí)來(lái)表示該作業(yè)或進(jìn)程所享有的調(diào)度優(yōu)先權(quán)。該算法的核心是確定進(jìn)程或作業(yè)的優(yōu)先級(jí)。 確定優(yōu)先級(jí)的方法可分為兩類。即動(dòng)態(tài)法和靜態(tài)法靜態(tài)法根據(jù)作業(yè)或進(jìn)程的靜態(tài)特性,在作業(yè)或進(jìn)程開(kāi)始

14、執(zhí)行之前就確定它們的優(yōu)先級(jí),一旦開(kāi)始執(zhí)行之后就不能改變。動(dòng)態(tài)法則不然,它把作業(yè)或進(jìn)程的靜態(tài)特性和動(dòng)態(tài)特性結(jié)合起來(lái)確定作業(yè)或進(jìn)程的優(yōu)先級(jí),隨著作業(yè)或進(jìn)程的執(zhí)行過(guò)程,其優(yōu)先級(jí)不斷變化。 靜態(tài)優(yōu)先級(jí)中,可以由用戶自己根據(jù)作業(yè)的緊急程度輸入一個(gè)適當(dāng)?shù)膬?yōu)先級(jí),為防止各用戶都將自己的作業(yè)冠以高優(yōu)先級(jí),系統(tǒng)應(yīng)對(duì)高優(yōu)先級(jí)用戶收取較高的費(fèi)用;也可以由系統(tǒng)或操作員根據(jù)作業(yè)類型指定優(yōu)先級(jí)。動(dòng)態(tài)優(yōu)先級(jí)中,基于靜態(tài)優(yōu)先級(jí)的調(diào)度算法實(shí)現(xiàn)簡(jiǎn)單,系統(tǒng)開(kāi)銷(xiāo)小,但由于靜態(tài)優(yōu)先級(jí)一旦確定之后,直到執(zhí)行結(jié)束為止始終保持不變,從而系統(tǒng)效率較低,調(diào)度性能不高?,F(xiàn)在的操作系統(tǒng)中,如果使用優(yōu)先級(jí)調(diào)度的話,則大多采用動(dòng)態(tài)優(yōu)先級(jí)的調(diào)度策略。2.

15、創(chuàng)建進(jìn)程void createPRIO() process *q1=new process; coutcount; coutendl; int number=1; while(numberno=number; cout進(jìn)程序號(hào)numberendl; coutq1-name; coutq1-priority; coutq1-arriveTime; coutq1-needTime; q1-next=NULL; insert(q1); number+; coutendl2) process *n0=head; process *n1=n0-next; process *n2=n1-next; for

16、(int i=0;iarrivetime arrivetime priority priority) n1-next=n2-next; n0-next=n2; n2-next=n1; n1=n0-next; n2=n0-next-next; n0=n1; n1=n2; n2=n2-next; 4.輸出調(diào)度結(jié)果開(kāi) 始鏈表空?Head節(jié)點(diǎn):開(kāi)始時(shí)間=到達(dá)時(shí)間 結(jié)束時(shí)間=開(kāi)始時(shí)間+執(zhí)行時(shí)間 系統(tǒng)時(shí)間=結(jié)束時(shí)間并計(jì)算周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間P=head-nextP=null結(jié) 束N到達(dá)&未執(zhí)行p節(jié)點(diǎn):開(kāi)始時(shí)間=系統(tǒng)時(shí)間 結(jié)束時(shí)間=開(kāi)始時(shí)間+執(zhí)行時(shí)間 系統(tǒng)時(shí)間=結(jié)束時(shí)間標(biāo)記為已執(zhí)行并計(jì)算周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)

17、時(shí)間P=head-nextYvoid printPRIO() process *p=new process; double sysTime=0; /記錄系統(tǒng)時(shí)間 double turn=0; /平均周轉(zhuǎn)時(shí)間 double turnw=0; /平均帶權(quán)周轉(zhuǎn)時(shí)間 if(head=NULL) cout沒(méi)有進(jìn)程調(diào)度!starttime=head-arrivetime; head-endtime=head-arrivetime+head-needtime; head-state=1; systime=head-endtime; turn=turn+(head-endtime - head-arrivet

18、ime); turnw=turnw+(head-endtime - head-arrivetime) / head-needtime; /判斷后面的 for(int i=0;inext; while(p!=NULL) changePRIO(double systime); /如果優(yōu)先級(jí)最大的進(jìn)程已經(jīng)到達(dá),則執(zhí)行 if(p-arrivetime state=0) p-starttime=systime; p-endtime=p-arrivetime+p-needtime; systime=p-endtime; p-state=1; turn=turn+(p-endtime-p-arrivetim

19、e); turnw=turnw+(p-endtime-p-arrivetime)/p-needtime; p=p-next; else p=p-next; process *temp=head; cout.setf(ios:left); coutsetw(10)進(jìn)程序號(hào)setw(10)進(jìn)程名setw(10)優(yōu)先級(jí)setw(10)到達(dá)時(shí)間setw(10)開(kāi)始時(shí)間setw(10)執(zhí)行時(shí)間setw(10)結(jié)束時(shí)間endl; while(temp!=NULL) coutsetw(10)nosetw(10)namesetw(10)prioritysetw(10)arriveTimesetw(10)sta

20、rtTimesetw(10)needTimesetw(10)endTimenext; cout平均周轉(zhuǎn)時(shí)間:turn/countendl平均帶權(quán)周轉(zhuǎn)時(shí)間:turnw/countnext!=NULL) process *t=new process; t=head-next; head-next=t-next; delete t; head=NULL; 3. 源程序的主要部分 主程序主要完成調(diào)用各個(gè)函數(shù)完成相應(yīng)的功能,以及選擇調(diào)度算法的輸出提示,根據(jù)提示并完成相應(yīng)的算法實(shí)現(xiàn)過(guò)程。/程序主要部分int main()int choice; /選擇服務(wù)int go=1;while (go)coutend

21、lendl-進(jìn)程調(diào)度模擬設(shè)計(jì)-endlendl; cout1.先來(lái)先服務(wù)算法endl2.優(yōu)先級(jí)法endl3.退出endlendl;coutchoice;switch(choice) case 1:FCFS();break; /調(diào)用先來(lái)先服務(wù)算法 case 2:PRIO();break; /調(diào)用優(yōu)先計(jì)算法 case 3:cout退出endl; go=0;break; /退出,返回首頁(yè) default:cout選擇有誤,請(qǐng)重新輸入選擇!endl;break;system(pause);return 0;void FCFS() createFCFS(); printFCFS(); void PRIO

22、() createPRIO(); /changePRIO(); printPRIO(); 4.程序測(cè)試4.1先來(lái)先服務(wù)測(cè)試用例進(jìn)程序號(hào)進(jìn)程名稱到達(dá)時(shí)間執(zhí)行時(shí)間1a042b133c224d334.2先來(lái)先服務(wù)運(yùn)行結(jié)果進(jìn)程序號(hào)進(jìn)程名稱優(yōu)先級(jí)到達(dá)時(shí)間執(zhí)行時(shí)間1a1042b4163c2244d3354.3先來(lái)先服務(wù)測(cè)試用例4.4優(yōu)先級(jí)算法運(yùn)行結(jié)果5.自我評(píng)價(jià)與總結(jié)本次課程設(shè)計(jì)的內(nèi)容基本上是老師在課堂上所講的,所以我還是比較熟悉先來(lái)先服務(wù)算法和優(yōu)先級(jí)算法??吹竭@個(gè)題目時(shí),我還是感覺(jué)相當(dāng)輕松的,因?yàn)槲疫€是比較熟悉該內(nèi)容,比較熟悉算法思想。設(shè)計(jì)過(guò)程中要注意流程的條理清晰,易于讀懂和規(guī)劃,程序編寫(xiě)完成以后,實(shí)

23、現(xiàn)了預(yù)期的效果,達(dá)到了設(shè)計(jì)的要求。界面設(shè)計(jì)比較清晰明了,易于閱讀和理解。本程序中,有些地方有重復(fù),可以通過(guò)設(shè)計(jì)函數(shù)來(lái)簡(jiǎn)化程序,例如程序的創(chuàng)建,可以通過(guò)函數(shù)調(diào)用來(lái)實(shí)現(xiàn),從而不必在兩個(gè)算法中分別編寫(xiě)。編寫(xiě)程序時(shí)要先畫(huà)出程序的流程圖是非常有必要的,根據(jù)流程圖的順序來(lái)實(shí)現(xiàn)程序,并要注意合理的使用函數(shù)調(diào)用來(lái)使程序得到簡(jiǎn)化,并且易讀易懂。編寫(xiě)程序的時(shí)候一定要先畫(huà)流程圖,對(duì)應(yīng)流程圖設(shè)計(jì)函數(shù)來(lái)簡(jiǎn)化程序。這次課程設(shè)計(jì)中比較失敗的地方就是優(yōu)先級(jí)算法的輸出開(kāi)始時(shí)間和結(jié)束時(shí)間出了點(diǎn)問(wèn)題。 這次課程設(shè)計(jì)使得我受益匪淺,尤其是對(duì)優(yōu)先級(jí)調(diào)度分析方法有了更深的理解和掌握。通過(guò)這次課程設(shè)計(jì),我的編程能力又得到了進(jìn)一步的提高,同

24、時(shí)也培養(yǎng)了我的思維能力??偟恼f(shuō)來(lái),這次課程設(shè)計(jì)不僅豐富了我的理論知識(shí),也加強(qiáng)了我的動(dòng)手能力,還鍛煉了我的思維能力。在實(shí)驗(yàn)程序編寫(xiě)和調(diào)試過(guò)程中我學(xué)會(huì)了很多,也認(rèn)識(shí)到了自己的不足,我還需要進(jìn)一步的努力,以致取得更大的進(jìn)步。我需要的就是要對(duì)自己有信心,腳踏實(shí)地,持之以恒,遇到困難時(shí)要冷靜思考,勇敢面對(duì),直到得出結(jié)果。在實(shí)驗(yàn)設(shè)計(jì)過(guò)程中,我也養(yǎng)成了較好地習(xí)慣,先有框架,然后跟著框架發(fā)展,最后就是要注重細(xì)節(jié),要做到嚴(yán)謹(jǐn)和縝密。不可否認(rèn)這種好習(xí)慣讓我受益無(wú)限,我也必須擁有它,以致我獲得更多。6.源程序#include#include#includestruct processchar name10; /進(jìn)程

25、名int no; /進(jìn)程序號(hào)double arrivetime; /進(jìn)程達(dá)到時(shí)間double needtime; /進(jìn)程運(yùn)行時(shí)間 double starttime; /進(jìn)程開(kāi)始時(shí)間double endtime; /進(jìn)程結(jié)束時(shí)間int state; /進(jìn)程狀態(tài)int priority; /進(jìn)程優(yōu)先級(jí)process *next; process *head=Null;int count; ;void FCFS();void PRIO();void createFCFS();void insert(process *current); void printFCFS();void createPRIO

26、();void changePRIO(double systime); void printPRIO() ;/程序主要部分int main()int choice; /選擇服務(wù)int go=1;while (go)coutendlendl-進(jìn)程調(diào)度模擬設(shè)計(jì)-endlendl; cout1.先來(lái)先服務(wù)算法endl2.優(yōu)先級(jí)法endl3.退出endlendl;coutchoice;switch(choice) case 1:FCFS();break; /調(diào)用先來(lái)先服務(wù)算法 case 2:PRIO();break; /調(diào)用優(yōu)先計(jì)算法 case 3:cout退出endl; go=0;break; /退

27、出,返回首頁(yè) default:cout選擇有誤,請(qǐng)重新輸入選擇!next=Null) /如果只有一個(gè)節(jié)點(diǎn)if(current-arrivetimearrivetime) /如果比鏈頭到達(dá)時(shí)間早,則插入鏈頭current-next=head;head=current;elsecurrent-next=Null;head-next=current; else /如果至少兩個(gè)節(jié)點(diǎn) process *p1=head; if(head-arrivetime current-arrivetime ) current-next=head; head=current; else int flag=1; whi

28、le(p1-next!=Null) /當(dāng)head后面不為空時(shí)一直做 /如果在兩個(gè)節(jié)點(diǎn)間 if(p1-arrivetime arrivetime & p1-next-arrivetime current-arrivetime) current-next=p1-next; p1-next=current; flag=0; break; else p1=p1-next; /如果到達(dá)時(shí)間最大,則插到鏈尾 if (flag=1) p1-next=current; current-next=Null; else head=current;void createFCFS() process *q1=new

29、process ; coutcount; coutendl; int number=1; while(numberno=number; cout進(jìn)程序號(hào)numberendl; coutq1-name; coutq1-arrivetime; coutq1-needtime; q1-next=NULL; insert(q1); number+; coutendlendl; void printFCFS() process *p=new process; double systime=0; /記錄系統(tǒng)時(shí)間 double turn=0; /平均周轉(zhuǎn)時(shí)間 double turnw=0; /平均帶權(quán)周轉(zhuǎn)時(shí)

30、間 if(head=NULL) cout沒(méi)有進(jìn)程調(diào)度starttime=head-arriveTime; head-endtime=head-arrivetime+head-needtime; systime=head-endtime; turn=turn+(head-endtime - head-arrivetime); turnw=turnw+(head-endtime - head-arrivetime) / head-needtime; p=head-next; while(p!=NULL) if(p-arrivetimesystime) /如果前一個(gè)結(jié)束后一個(gè)還沒(méi)到達(dá) p-start

31、time=p-arrivetime; p-endtime=p-starttime+p-needtime; systime=p-endTime; turn=turn+(p-endtime-p-arrivetime); turnw=turnw+(p-endtime-p-arrivetime)/p-needtime; p=p-next; else /如果前一個(gè)未結(jié)束時(shí)后一個(gè)已經(jīng)到達(dá) p-starttime=systime; p-endtime=p-starttime+p-needtime; systime=p-endtime; turn=turn+(p-endtime-p-arrivetime);

32、turnw=turnw+(p-endtime-p-arrivetime)/p-needtime; p=p-next; cout.setf(ios:left); /設(shè)置對(duì)齊方式為left coutsetw(10)進(jìn)程序號(hào)setw(10)進(jìn)程名setw(10)到達(dá)時(shí)間setw(10)開(kāi)始時(shí)間setw(10)執(zhí)行時(shí)間setw(10)結(jié)束時(shí)間endl; process *temp=head; while(temp!=NULL) cout.setf(ios:left); coutsetw(10)nosetw(10)namesetw(10)arriveTimesetw(10)startTimesetw(1

33、0)needTimesetw(10)endTimenext; cout平均周轉(zhuǎn)時(shí)間turn/countendl平均帶權(quán)周轉(zhuǎn)時(shí)間turnw/countnext!=NULL) /回收空間 process *t=new process; t=head-next; head-next=t-next; delete t; head=NULL; void createPRIO() process *q1=new process; coutcount; coutendl; int number=1; while(numberno=number; cout進(jìn)程序號(hào)numberendl; coutq1-name; coutq1-priority; coutq1-arriveTime; coutq1-needTime; q1-next=NULL; insert(q1); number+; coutendl2) process *n0=head; process *n1=n0-next; process *n2=n1-next; for(int i=0;iarri

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論