2011操作系統(tǒng)課程設(shè)計報告基于Linux的進(jìn)程調(diào)度模擬程序_第1頁
2011操作系統(tǒng)課程設(shè)計報告基于Linux的進(jìn)程調(diào)度模擬程序_第2頁
2011操作系統(tǒng)課程設(shè)計報告基于Linux的進(jìn)程調(diào)度模擬程序_第3頁
2011操作系統(tǒng)課程設(shè)計報告基于Linux的進(jìn)程調(diào)度模擬程序_第4頁
2011操作系統(tǒng)課程設(shè)計報告基于Linux的進(jìn)程調(diào)度模擬程序_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、河南中醫(yī)學(xué)院linux操作系統(tǒng)課程設(shè)計報告題目:基于Linux的進(jìn)程調(diào)度模擬程序所在院系: 信息技術(shù)學(xué)院 專業(yè)年級: 2011級 計算機(jī)科學(xué)與技術(shù) 完成學(xué)生: 郭姍 指導(dǎo)教師: 阮 曉 龍 完成日期: 201X 年 06 月 22 日請按照課程設(shè)計完成日期填寫目 錄1. 課程設(shè)計題目概述32. 研究內(nèi)容與目的43. 研究方法54. 研究報告65. 測試報告/實驗報告76. 課題研究結(jié)論87. 總結(jié)9目錄是不是更新一下1、課程設(shè)計題目概述此處為何出現(xiàn)空行隨著Linux系統(tǒng)的逐漸推廣,它被越來越多的計算機(jī)用戶所了解和應(yīng)用. Linux是一個多任務(wù)的操作系統(tǒng),也就是說,在同一個時間內(nèi),可以有多個進(jìn)程

2、同時執(zhí)行。如果讀者對計算機(jī)硬件體系有一定了解的話,會知道我們大家常用的單CPU計算機(jī)實際上在一個時間片斷內(nèi)只能執(zhí)行一條指令,那么Linux是如何實現(xiàn)多進(jìn)程同時執(zhí)行的呢?原來Linux使用了一種稱為進(jìn)程調(diào)度(process scheduling)的手段,首先,為每個進(jìn)程指派一定的運(yùn)行時間,這個時間通常很短,短到以毫秒為單位,然后依照某種規(guī)則,從眾多進(jìn)程中挑選一個投入運(yùn)行,其他的進(jìn)程暫時等待,當(dāng)正在運(yùn)行的那個進(jìn)程時間耗盡,或執(zhí)行完畢退出,或因某種原因暫停,Linux就會重新進(jìn)行調(diào)度,挑選下一個進(jìn)程投入運(yùn)行。因為每個進(jìn)程占用的時間片都很短,在我們使用者的角度來看,就好像多個進(jìn)程同時運(yùn)行一樣了。 此處

3、不應(yīng)有空格本文就是對進(jìn)程調(diào)度進(jìn)行研究、實驗的。本文首先對Linux系統(tǒng)進(jìn)行了簡要的介紹, 然后介紹了進(jìn)程管理的相關(guān)理論知識。其次,又介紹最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法(即把處理機(jī)分配給優(yōu)先數(shù)最高的進(jìn)程)、先來先服務(wù)算法的相關(guān)知識,并對進(jìn)程調(diào)度進(jìn)行最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法和先來先服務(wù)算法模擬實驗,并對比分析兩種算法的優(yōu)缺點,從而加深對進(jìn)程概念和進(jìn)程調(diào)度過程/算法的理解設(shè)計目的:在多道程序和多任務(wù)系統(tǒng)中,系統(tǒng)內(nèi)同時處于就緒狀態(tài)的進(jìn)程可能有若干個。也就是說能運(yùn)行的進(jìn)程數(shù)大于處理機(jī)個數(shù)。為了使系統(tǒng)中的進(jìn)程能有條不紊地工作,必須選用某種調(diào)度策略,選擇某一進(jìn)程占用處理機(jī)。使得系統(tǒng)中的進(jìn)程能夠有條不紊的運(yùn)行,同時

4、提高處理機(jī)的利用率以及系統(tǒng)的性能。所以設(shè)計模擬進(jìn)程調(diào)度算法(最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法、先來先服務(wù)算法),以鞏固和加深處理進(jìn)程的概念,并且分析這兩種算法的優(yōu)缺點。關(guān)鍵詞:linux 進(jìn)程調(diào)度 調(diào)度算法2. 研究內(nèi)容與目的操作系統(tǒng)由四大功能模塊組成:進(jìn)程管理、存儲器管理、設(shè)備管理和文件管理,進(jìn)程管理是其中最重要的一個模塊。本文主要研究最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法、先來先服務(wù)算法這兩種調(diào)度算法,并且分析比較這兩種算法的優(yōu)缺點。目的:進(jìn)程是操作系統(tǒng)中最重要的概念,也是學(xué)習(xí)操作系統(tǒng)的關(guān)鍵。通過本次課程設(shè)計,要求理解進(jìn)程的實質(zhì)和進(jìn)程管理的機(jī)制。掌握進(jìn)程調(diào)度的工作流程以及進(jìn)程調(diào)度的算法,并且分析比較這兩種算法的

5、優(yōu)缺點。3. 研究方法3.1研究方法3.1.1查找資料通過查找資料了解到:(1)優(yōu)先數(shù)調(diào)度算法簡介優(yōu)先數(shù)調(diào)度算法常用于批處理系統(tǒng)中。在進(jìn)程調(diào)度中,每次調(diào)度時,系統(tǒng)把處理機(jī)分配給就緒隊列中優(yōu)先數(shù)最高的進(jìn)程。它又分為兩種:非搶占式優(yōu)先數(shù)算法和搶占式優(yōu)先數(shù)算法在非搶占式優(yōu)先數(shù)算法下,系統(tǒng)一旦把處理機(jī)分配給就緒隊列中優(yōu)先數(shù)最高的進(jìn)程后,這個進(jìn)程就會一直運(yùn)行,直到完成或發(fā)生某事件使它放棄處理機(jī),這時系統(tǒng)才能重新將處理機(jī)分配給就緒隊列中的另一個優(yōu)先數(shù)最高的進(jìn)程。在搶占式優(yōu)先數(shù)算法下,系統(tǒng)先將處理機(jī)分配給就緒隊列中優(yōu)先數(shù)最高的進(jìn)程度讓它運(yùn)行,但在運(yùn)行的過程中,如果出現(xiàn)另一個優(yōu)先數(shù)比它高的進(jìn)程,它就要立即停止

6、,并將處理機(jī)分配給新的高優(yōu)先數(shù)進(jìn)程。(2)先來先服務(wù)算法如果早就緒的進(jìn)程排在就緒隊列的前面,遲就緒的進(jìn)程排在就緒隊列的后面,那么先來先服務(wù)(FCFS: first come first service)總是把當(dāng)前處于就緒隊列之首的那個進(jìn)程調(diào)度到運(yùn)行狀態(tài)。也就說,它只考慮進(jìn)程進(jìn)入就緒隊列的先后,而不考慮它的下一個CPU周期的長短及其他因素?;舅枷耄合葋硐确?wù)的作業(yè)調(diào)度算法:優(yōu)先從后備隊列中,選擇一個或多個位于隊列頭部的作業(yè),把他們調(diào)入內(nèi)存,分配所需資源、創(chuàng)建進(jìn)程,然后放入“就緒隊列”一句話結(jié)束應(yīng)該有標(biāo)點符號。先來先服務(wù)的進(jìn)程調(diào)度算法:從“就緒隊列”中選擇一個最先進(jìn)入隊列的進(jìn)程,為它分配處理器,

7、使之開始運(yùn)行原理:按照進(jìn)程進(jìn)入就緒隊列的先后順序調(diào)度并分配處理機(jī)執(zhí)行。先來先服務(wù)調(diào)度算法是一種不可搶占的算法,先進(jìn)入就緒隊列的進(jìn)程,先分配處理機(jī)運(yùn)行。一旦一個進(jìn)程占有了處理機(jī),它就一直運(yùn)行下去,直到該進(jìn)程完成工作或者因為等待某事件發(fā)生而不能繼續(xù)運(yùn)行時才釋放處理機(jī)。、系統(tǒng)只要有按FIFO規(guī)則建立的后備作業(yè)隊列或就緒進(jìn)程隊列即可,就是一個作業(yè)控制塊JCB或進(jìn)程控制塊PCB加入隊列時加在相應(yīng)隊列末尾。、調(diào)度退出隊列時從相應(yīng)隊列首開始順序掃描,將相關(guān)的JCB或PCB調(diào)度移出相應(yīng)隊列。3.2實驗方法3.2.1模擬法 根據(jù)最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法、先來先服務(wù)算法的進(jìn)程調(diào)度機(jī)制的流程,進(jìn)行模擬這兩種算法的實

8、驗。首行縮進(jìn)兩字符3.2.2控制法進(jìn)行實驗時,輸入進(jìn)程名、優(yōu)先數(shù)、到達(dá)時間、需要運(yùn)行時間、已用CPU時間、進(jìn)程狀態(tài)。3.2.3觀察法觀察實驗的結(jié)果,分析進(jìn)程調(diào)度流程。3.2.4比較法通過觀察實驗結(jié)果,比較兩種調(diào)度算法的優(yōu)缺點。3.3可行性分析(課題理論上的要求、實踐的可操作性、本人能力和現(xiàn)實條件(相關(guān)案例、資料等)的許可等內(nèi)容)3.3.1環(huán)境運(yùn)行在VMware-workstation-full-10.0.0-上,導(dǎo)入CentOS操作系統(tǒng),在CentOS操作系統(tǒng)上運(yùn)行。CentOS操作系統(tǒng)是Linux發(fā)行版之一,它是來自于Red Hat Enterprise Linux依照開放源代碼規(guī)定釋出的源

9、代碼所編譯而成。相對于其他 Linux 發(fā)行版,其穩(wěn)定性值得信賴。因為CentOS操作系統(tǒng)安裝了gcc編譯器,能編譯C語言。3.3.2實踐的可操作性 此處不應(yīng)有空格在對linux進(jìn)程調(diào)度機(jī)制以及調(diào)度算法進(jìn)行深入分析后,根據(jù)對于最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法采用最高優(yōu)先數(shù)算法的動態(tài)優(yōu)先數(shù)法則控制進(jìn)程:系統(tǒng)把處理機(jī)分配給就緒隊列中優(yōu)先數(shù)最高的進(jìn)程后,如果運(yùn)行一個時間片后,進(jìn)程的已占用CPU時間已達(dá)到所需要的運(yùn)行時間,則撤消該進(jìn)程,如果運(yùn)行一個時間片后進(jìn)程的已占用CPU時間還未達(dá)所需要的運(yùn)行時間,也就是進(jìn)程還需要繼續(xù)運(yùn)行,此時應(yīng)將進(jìn)程的優(yōu)先數(shù)減1(即降低一級),然后把它插入就緒隊列等待CPU,而先來先服務(wù)

10、是從“就緒隊列”中選擇一個最先進(jìn)入隊列的進(jìn)程,為它分配處理器,使之開始運(yùn)行而制定實驗方案的。 3.3.3本人能力 雖然我對linux的進(jìn)程調(diào)度方面的知識還有很多不知道的知識,但我是在不斷學(xué)習(xí)的 ,遇到不懂得就通過查資料或請教他人的方法,不斷地學(xué)習(xí)。為何如此多的換行4. 研究報告4.1最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法(搶占式)4.1.1實驗原理1、進(jìn)程調(diào)度算法:采用最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法(即把處理機(jī)分配給優(yōu)先數(shù)最高的進(jìn)程)。 2、每個進(jìn)程有一個進(jìn)程控制塊(PCB)表示。進(jìn)程控制塊可以包含如下信息:進(jìn)程名、優(yōu)先數(shù)、需要運(yùn)行時間、已用CPU時間、進(jìn)程狀態(tài)等等。 3、進(jìn)程的優(yōu)先數(shù)及需要的運(yùn)行時間事先人為地指

11、定。 4、 每個進(jìn)程的狀態(tài)可以是就緒 W(Wait)、運(yùn)行R(Run)、或完成F(Finish)三種狀態(tài)之一。 5、進(jìn)程的運(yùn)行時間以時間片為單位進(jìn)行計算。摘抄的部分是不是應(yīng)該整理一下? 6、 就緒進(jìn)程獲得CPU后都只能運(yùn)行一個時間片。用已占用CPU時間加1來表示。 7、采用最高優(yōu)先數(shù)算法的動態(tài)優(yōu)先數(shù)法則控制進(jìn)程:如果運(yùn)行一個時間片后,進(jìn)程的已占用CPU時間已達(dá)到所需要的運(yùn)行時間,則撤消該進(jìn)程,如果運(yùn)行一個時間片后進(jìn)程的已占用CPU時間還未達(dá)所需要的運(yùn)行時間,也就是進(jìn)程還需要繼續(xù)運(yùn)行,此時應(yīng)將進(jìn)程的優(yōu)先數(shù)減1(即降低一級),然后把它插入就緒隊列等待CPU。 8、每進(jìn)行一次調(diào)度程序都打印一次運(yùn)行進(jìn)

12、程、就緒隊列、以及各個進(jìn)程的PCB,以便進(jìn)行檢查。 9、 重復(fù)以上過程,直到所要進(jìn)程都完成為止。4.1.2實驗內(nèi)容 1、數(shù)據(jù)結(jié)構(gòu)(1)進(jìn)程控制塊結(jié)構(gòu)PCB:是struct定義的結(jié)構(gòu)體,定義如下:typedef struct pcbchar qname20;/*進(jìn)程名*/char state; /*進(jìn)程狀態(tài)*/int super; /*進(jìn)程優(yōu)先級*/int ndtime; /*進(jìn)程需要運(yùn)行的時間*/int runtime; /*進(jìn)程已運(yùn)行的時間*/int cpu; /*進(jìn)程當(dāng)前獲得的時間片大小*/PCB;(2) 隊列結(jié)點Node,結(jié)點儲存PCB信息,定義如下:typedef struct nod

13、ePCB data; /*結(jié)點數(shù)據(jù)*/struct node *next; /*指向下一結(jié)點的指針*/Node;(3)由隊列結(jié)點Node擴(kuò)展的隊列Queue,定義如下:typedef struct queueNode *front;/*隊首*/Node *rear;/*隊尾*/Queue;2相關(guān)函數(shù)(1)判斷一個隊列q是否為空的函數(shù)int is_empty(Queue *q);(2)將進(jìn)程控制塊x加入隊列q的函數(shù)void enqueue(PCB x,Queue *q);(3)刪除隊列q的隊首進(jìn)程,將其值賦給x并修改狀態(tài)的函數(shù)void dequeue(PCB *x,Queue *q);該函數(shù)將隊

14、列q的隊首進(jìn)程刪除,由于可能該進(jìn)程未運(yùn)行完畢,需進(jìn)入下一優(yōu)先級隊列, 所以先修改其結(jié)構(gòu)體內(nèi)成員變量:已運(yùn)行時間為上次已運(yùn)行時間加上這次獲得的cpu時間;優(yōu)先級減1(若該進(jìn)程已是最低優(yōu)先級,則將在主控過程中恢復(fù));下次獲得的時間片為這次的時間片加1。然后將修改后的進(jìn)程賦給一個臨時PCB變量x,以便將x插入下一優(yōu)先級隊列。 (4)主函數(shù)利用上述的數(shù)據(jù)結(jié)構(gòu)和函數(shù)實現(xiàn)模擬進(jìn)程調(diào)度。排版不正確3. 進(jìn)程產(chǎn)生模擬通過標(biāo)準(zhǔn)輸入模擬產(chǎn)生進(jìn)程:先要求輸入進(jìn)程數(shù)目,再依次輸入各個進(jìn)程的進(jìn)程名、進(jìn)程優(yōu)先數(shù)、進(jìn)程需要運(yùn)行的時間。4.1.3參考代碼#include#include#include#include#def

15、ine PCB_LEN sizeof(PCB)#define NODE_LEN sizeof(Node)#define QUEUE_LEN sizeof(Queue)/*進(jìn)程控制塊結(jié)構(gòu)PCB*/typedef struct pcbchar qname20;/*進(jìn)程名*/ char state; /*進(jìn)程狀態(tài)*/int super; /*進(jìn)程優(yōu)先級*/int ndtime; /*進(jìn)程需要運(yùn)行的時間*/int runtime; /*進(jìn)程已運(yùn)行的時間*/int cpu; /*進(jìn)程當(dāng)前獲得的時間片大小*/PCB;/*隊列結(jié)點,結(jié)點儲存PCB信息*/typedef struct nodePCB data

16、; struct node *next;Node;/*實現(xiàn)進(jìn)程控制塊的隊列*/typedef struct queueNode *front;Node *rear;Queue;/*判斷隊列是否為空*/int is_empty(Queue *q)if(q-front)return 0;elsereturn 1;/*將進(jìn)程控制塊x加入隊列q*/void enqueue(PCB x,Queue *q) Node *p=(Node *)malloc(NODE_LEN);(p-data).state=x.state;(p-data).super=x.super;(p-data).ndtime=x.ndt

17、ime;(p-data).runtime=x.runtime;(p-data).cpu=x.cpu;strcpy(p-data).qname,x.qname);p-next=0;if(q-front)q-rear-next=p;elseq-front=p;q-rear=p;/*刪除隊列q的隊首進(jìn)程,將其值賦給x并修改狀態(tài)*/void dequeue(PCB *x,Queue *q)Node *p=(Node *)malloc(NODE_LEN); if(is_empty(q)return;/*進(jìn)入下一優(yōu)先級隊列之前修改狀態(tài)*/x-state=W;/*狀態(tài)改為就緒*/strcpy(x-qname

18、,(q-front-data).qname);/*已運(yùn)行時間為上次已運(yùn)行時間加上這次獲得的cpu時間*/x-runtime=(q-front-data).runtime+(q-front-data).cpu;/*優(yōu)先級減1,若該進(jìn)程已是最低優(yōu)先級,則將在主控過程中恢復(fù)*/x-super=(q-front-data).super-1;x-ndtime=(q-front-data).ndtime;/*下次獲得的時間片為這次的時間片加1*/x-cpu=(q-front-data).cpu+1;p=q-front;q-front=q-front-next;free(p);/*主控過程*/void ma

19、in()Queue *queue=NULL;/*設(shè)置就緒隊列數(shù)組*/Node *wait=(Node *)malloc(NODE_LEN);PCB x;int numberOFcourse,i,j,super,time;int hight=0,num=0;int temp_ndtime,temp_runtime,temp_cpu;char name20;printf(n請輸入進(jìn)程總個數(shù)?);scanf(%d,&numberOFcourse);/*為隊列數(shù)組開辟空間,每個數(shù)組表示不同的優(yōu)先級隊列*/queue=(Queue *)calloc(numberOFcourse,QUEUE_LEN);/

20、*輸入各進(jìn)程信息并初始化,并將其加入相應(yīng)的優(yōu)先級隊列*/for(i=0;ihight)hight=super;printf(n輸入進(jìn)程運(yùn)行時間:);scanf(%d,&time);strcpy(x.qname,name);x.state=W; x.super=super;x.ndtime=time;x.runtime=0;x.cpu=1;enqueue(x,&queuesuper-1);printf(nn);/*進(jìn)程調(diào)度過程*/for(i=hight-1;i=0;i-)/*從最高優(yōu)先級隊列開始調(diào)度進(jìn)程,直到該隊列為空,則調(diào)度下一優(yōu)先級隊列*/while(!is_empty(&queuei)nu

21、m+;/*調(diào)度次數(shù)*/printf(按任一鍵繼續(xù).n);getch();printf(The execute number:%dnn,num);/*打印正在運(yùn)行進(jìn)程*/(queuei.front)-data).state=R;printf(*當(dāng)前工作的進(jìn)程是:%sn,(queuei.front)-data).qname);printf(qname state super ndtime runtimen);printf(%s,(queuei.front)-data).qname); printf(R);printf(%d,(queuei.front)-data).super); printf(%

22、d,(queuei.front)-data).ndtime);printf(%dnn,(queuei.front)-data).runtime);/*計算一個進(jìn)程運(yùn)行一個時間片后,還需要運(yùn)行的時間temp_time*/ temp_ndtime=(queuei.front)-data).ndtime;temp_runtime=(queuei.front)-data).runtime; temp_cpu=(queuei.front)-data).cpu;temp_ndtime=temp_ndtime-temp_runtime-temp_cpu;/*若該進(jìn)程已運(yùn)行完畢*/if(temp_ndtime

23、data).qname); (queuei.front)-data).state=F; dequeue(&x,&queuei);/*若該進(jìn)程未運(yùn)行完畢*/else dequeue(&x,&queuei);/*將其刪除出當(dāng)前隊列*/*若原優(yōu)先級不是最低優(yōu)先級,則插入下一優(yōu)先級隊列*/if(i0)enqueue(x,&queuei-1);/*若原優(yōu)先級是最低優(yōu)先級,則插入當(dāng)前隊列末尾*/else/*由于刪除操作中將優(yōu)先級減1,所以在此恢復(fù)*/x.super=x.super+1; enqueue(x,&queuei);/*打印就緒隊列狀態(tài)*/ printf(*當(dāng)前就緒隊列狀態(tài)為:n);for(j=i

24、;j=0;j-)if(queuej.front)wait=queuej.front;while(wait)printf(qname state super ndtime runtimen); printf(%s,(wait-data).qname); printf(W); printf(%d,(wait-data).super); printf(%d ,(wait-data).ndtime); printf(%dnn,(wait-data).runtime); wait=wait-next; printf(n);/*結(jié)束*/printf(進(jìn)程已經(jīng)全部完成n);free(wait);free(q

25、ueue);getch();4.2先來先服務(wù)算法4.2.1實驗原理先來先服務(wù)調(diào)度算法按照進(jìn)程進(jìn)入就緒隊列的先后順序調(diào)度并分配處理機(jī)執(zhí)行。先來先服務(wù)調(diào)度算法是一種不可搶占的算法,先進(jìn)入就緒隊列的進(jìn)程,先分配處理機(jī)運(yùn)行。一旦一個進(jìn)程占有了處理機(jī),它就一直運(yùn)行下去,直到該進(jìn)程完成工作或者因為等待某事件發(fā)生而不能繼續(xù)運(yùn)行時才釋放處理機(jī)。4.2.2參考代碼#include #include #include using namespace std; #define MAX 10 char processMAX=; /進(jìn)程名 int arrivetimeMAX;/達(dá)到時間 int servicetimeM

26、AX;/服務(wù)時間 int finishtimeMAX; /完成時間 int turnovertimeMAX;/周轉(zhuǎn)時間 double avgturnovertime; /平均周轉(zhuǎn)時間 double powertimeMAX; /帶權(quán)周轉(zhuǎn)時間 double avgpowertime; /平均帶權(quán)周轉(zhuǎn)時間 int init(); void FCFS(); void output(); void showsingle(int* arr,int len); /初始化,并返回進(jìn)程數(shù) int init() cout 輸入進(jìn)程隊列名(用單個字母表示一個進(jìn)程,字母間用tab間隔) endl; int i=0;

27、 while(iMAX) cin.get(processi); if(processi= | processi=/t) continue; if(processi=q | processi=/n) processi=/0; break; i+; int len=strlen(process); cout 依次輸入進(jìn)程到達(dá)時間(時間之間用tab間隔) endl; for(int ix=0; ix arrivetimeix; cout 依次輸入服務(wù)時間(時間之間用tab間隔) endl; for(ix=0; ix servicetimeix; return len; void FCFS(int l

28、en) /完成時間的計算 for(int ix=0; ixlen; ix+) finishtimeix=accumulate(servicetime,servicetime+ix+1,0); /周轉(zhuǎn)時間計算 for(ix=0; ixlen; ix+) turnovertimeix=finishtimeix-arrivetimeix; avgturnovertime=accumulate(turnovertime,turnovertime+len,0)*1.0/len; /帶權(quán)周轉(zhuǎn)時間計算 for(ix=0; ixlen; ix+) powertimeix=turnovertimeix*1.0/

29、servicetimeix; /平均帶權(quán)周轉(zhuǎn)時間 double tmptotal=0.0; for(ix=0; ixlen; ix+) tmptotal+=powertimeix; avgpowertime=tmptotal/len; void output() cout endlendl; cout+endl; int len=strlen(process); /顯示進(jìn)程序列 for(int ix=0; ixlen; ix+) cout processix /t; cout endl; /顯示到達(dá)時間序列 showsingle(arrivetime,len); /顯示服務(wù)時間序列 shows

30、ingle(servicetime,len); cout endlendl; /顯示完成時間序列 showsingle(finishtime,len); /顯示周轉(zhuǎn)時間序列 showsingle(turnovertime,len); cout 平均周轉(zhuǎn)時間 : avgturnovertime endl; /顯示帶權(quán)周轉(zhuǎn)時間序列 for(ix=0; ixlen; ix+) cout powertimeix /t; cout endl; cout 平均帶權(quán)周轉(zhuǎn)時間: avgpowertime endl; cout +endl; /對int類型的數(shù)組進(jìn)行格式化輸出 void showsingle(i

31、nt* arr,int len) for(int ix=0; ixlen; ix+) cout arrix /t; cout endl; int main() cout /t/t|本程序是先來先服務(wù)算法| endl; int len = init(); FCFS(len); output(); system(PAUSE); return 0; 5. 測試報告/實驗報告5.1最高優(yōu)先數(shù)優(yōu)先的調(diào)度算法5.1.1實驗結(jié)果【輸入輸出樣例】請輸入進(jìn)程總個數(shù)?4為何有“?”進(jìn)程號 NO.0輸入進(jìn)程名:aa輸入進(jìn)程優(yōu)先數(shù):2輸入進(jìn)程運(yùn)行時間:2進(jìn)程號 NO.1輸入進(jìn)程名:vv輸入進(jìn)程優(yōu)先數(shù):3輸入進(jìn)程運(yùn)行時

32、間:2進(jìn)程號 NO.2輸入進(jìn)程名:rr輸入進(jìn)程優(yōu)先數(shù):1輸入進(jìn)程運(yùn)行時間:3進(jìn)程號 NO.3輸入進(jìn)程名:kk輸入進(jìn)程優(yōu)先數(shù):2輸入進(jìn)程運(yùn)行時間:1按任一鍵繼續(xù).The execute number:1*當(dāng)前工作的進(jìn)程是:vvqname state super ndtime runtimevv R 3 2 0*當(dāng)前就緒隊列狀態(tài)為:qname state super ndtime runtimeaa W 2 2 0qname state super ndtime runtimekk W 2 1 0qname state super ndtime runtimevv W 2 2 1qname sta

33、te super ndtime runtimerr W 1 3 0按任一鍵繼續(xù).The execute number:2*當(dāng)前工作的進(jìn)程是:aaqname state super ndtime runtimeaa R 2 2 0*當(dāng)前就緒隊列狀態(tài)為:qname state super ndtime runtimekk W 2 1 0qname state super ndtime runtimevv W 2 2 1qname state super ndtime runtimerr W 1 3 0qname state super ndtime runtimeaa W 1 2 1按任一鍵繼續(xù).

34、The execute number:3*當(dāng)前工作的進(jìn)程是:kkqname state super ndtime runtimekk R 2 1 0進(jìn)程kk已完成*當(dāng)前就緒隊列狀態(tài)為:qname state super ndtime runtimevv W 2 2 1qname state super ndtime runtimerr W 1 3 0qname state super ndtime runtimeaa W 1 2 1按任一鍵繼續(xù).The execute number:4*當(dāng)前工作的進(jìn)程是:vvqname state super ndtime runtimevv R 2 2 1進(jìn)

35、程vv已完成*當(dāng)前就緒隊列狀態(tài)為:qname state super ndtime runtimerr W 1 3 0qname state super ndtime runtimeaa W 1 2 1按任一鍵繼續(xù).The execute number:5*當(dāng)前工作的進(jìn)程是:rrqname state super ndtime runtimerr R 1 3 0*當(dāng)前就緒隊列狀態(tài)為:qname state super ndtime runtimeaa W 1 2 1qname state super ndtime runtimerr W 1 3 1按任一鍵繼續(xù).The execute numb

36、er:6*當(dāng)前工作的進(jìn)程是:aaqname state super ndtime runtimeaa R 1 2 1進(jìn)程aa已完成*當(dāng)前就緒隊列狀態(tài)為:qname state super ndtime runtimerr W 1 3 1按任一鍵繼續(xù).The execute number:7*當(dāng)前工作的進(jìn)程是:rrqname state super ndtime runtimerr R 1 3 1進(jìn)程rr已完成*當(dāng)前就緒隊列狀態(tài)為:進(jìn)程已經(jīng)全部完成5.1.2結(jié)果分析本程序利用標(biāo)準(zhǔn)輸入輸出模擬了進(jìn)程調(diào)度過程。輸入各個進(jìn)程的優(yōu)先級和需要運(yùn)行的時間等信息,輸出給出了每進(jìn)行一次調(diào)度的運(yùn)行進(jìn)程、就緒隊列、

37、以及各個進(jìn)程的 PCB信息,每當(dāng)一個進(jìn)程完成運(yùn)行,輸出該進(jìn)程已完成的信息,最后當(dāng)所有進(jìn)程都完成后給出所有進(jìn)程都完成的信息。因為剛開始vv的優(yōu)先級高,所以它先搶占CPU,運(yùn)行一個時間單位后,vv的優(yōu)先級數(shù)減少1,此時vv的優(yōu)先級與aa、kk相等,但比rr大,所以vv排在就緒隊列kk后面,aa處于運(yùn)行狀態(tài);后面的也是這樣分析。從而可以看出:剛開始優(yōu)先數(shù)大的先運(yùn)行,當(dāng)進(jìn)程運(yùn)行一個時間片后,進(jìn)程的已占用CPU時間已達(dá)到所需要的運(yùn)行時間,則撤消該進(jìn)程,如果運(yùn)行一個時間片后進(jìn)程的已占用CPU時間還未達(dá)所需要的運(yùn)行時間,也就是進(jìn)程還需要繼續(xù)運(yùn)行,此時應(yīng)將進(jìn)程的優(yōu)先數(shù)減1(即降低一級),且此時有和它相等的優(yōu)先

38、數(shù)或比它大的優(yōu)先數(shù),則把它插入就緒隊列等待CPU。 通過以上述數(shù)據(jù)測的最高優(yōu)先數(shù)算法,可以看出這種算法的優(yōu)點是可使資源利用率得以提高,公平性好,缺點是系統(tǒng)開銷大,實現(xiàn)比較復(fù)雜。5.2先來先服務(wù)算法5.2.1實驗結(jié)果/*running result: |本程序是先來先服務(wù)算法| 輸入進(jìn)程隊列名(用單個字母表示一個進(jìn)程,字母間用tab間隔) a b c d e 依次輸入進(jìn)程到達(dá)時間(時間之間用tab間隔) 0 1 2 3 4 依次輸入服務(wù)時間(時間之間用tab間隔) 4 3 5 2 4 + a b c d e 0 1 2 3 4 4 3 5 2 4 4 7 12 14 18 4 6 10 11 14 平均周轉(zhuǎn)時間 :9 1 2 2 5.5 3.5 平均帶權(quán)周轉(zhuǎn)時間:2.8 + 請按任意鍵繼續(xù). . . */ 5.2.2結(jié)果分析輸入的a、b、c、d、e

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論