版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、廣東技術(shù)師范學(xué)院實驗報告學(xué)院:計算機科學(xué)學(xué)院專業(yè):計算機科學(xué)與技術(shù)(師范)班級:成績:姓名:學(xué)號:組別:組員:實驗地點:實驗日期:指導(dǎo)教師簽名:預(yù)習(xí)情況操作情況考勤情況數(shù)據(jù)處理情況實驗名稱: 實驗一、進(jìn)程調(diào)度實驗 一、實驗?zāi)康挠酶呒壵Z言編寫和調(diào)試一個進(jìn)程調(diào)度程序,以加深對進(jìn)程的概念及進(jìn)程調(diào)度算法的理解二、實驗類別綜合性實驗。綜合高級語言編程、進(jìn)程調(diào)度模型、進(jìn)程調(diào)度算法及數(shù)據(jù)結(jié)構(gòu)等多方面的知識三、實驗內(nèi)容和步驟 1編寫并調(diào)試一個模擬的進(jìn)程調(diào)度程序,采用“最高優(yōu)先數(shù)優(yōu)先”調(diào)度算法對五個進(jìn)程進(jìn)行調(diào)度。 “最高優(yōu)先數(shù)優(yōu)先”調(diào)度算法的基本思想是把CPU分配給就緒隊列中優(yōu)先數(shù)最高的進(jìn)程。 靜態(tài)優(yōu)先數(shù)是在創(chuàng)
2、建進(jìn)程時確定的,并在整個進(jìn)程運行期間不再改變。 動態(tài)優(yōu)先數(shù)是指進(jìn)程的優(yōu)先數(shù)在創(chuàng)建進(jìn)程時可以給定一個初始值,并且可以按一定原則修改優(yōu)先數(shù)。例如:在進(jìn)程獲得一次CPU后就將其優(yōu)先數(shù)減少1?;蛘?,進(jìn)程等待的時間超過某一時限時增加其優(yōu)先數(shù)的值,等等該題根據(jù)老師給的代碼用Visual C+運行,結(jié)果以及分析如下:結(jié)果分析:根據(jù)上述輸入的三個進(jìn)程的信息可以得到:優(yōu)先級最高的是進(jìn)程cc最先調(diào)度進(jìn)程cc的狀態(tài)為運行態(tài),需要執(zhí)行的時間為10當(dāng)前就緒隊列狀態(tài)為:進(jìn)程aa先級比較高,處于就緒隊列前面,而進(jìn)程bb先級是三者中最低的,所以處于就緒隊列的最后。而此時這兩個進(jìn)程的狀態(tài)都為就緒態(tài)。結(jié)果分析:當(dāng)進(jìn)程cc了一個時
3、間片之后而它已占用 CPU時間已達(dá)到所需要的運行時間,則將它的優(yōu)先級減1之后,再將三個進(jìn)程按優(yōu)先級的大小排列,從中選擇優(yōu)先級大的進(jìn)程進(jìn)入運行狀態(tài),則該次進(jìn)入運行態(tài)的是進(jìn)程aa按照這種方式一直運行下去:直到:結(jié)果分析:當(dāng)進(jìn)程bb的CPU占用時間等于它需要的執(zhí)行時間時,進(jìn)程bb度完成。則這時進(jìn)程調(diào)度中還有兩個進(jìn)程:進(jìn)程aa進(jìn)程cc結(jié)果分析:當(dāng)調(diào)度進(jìn)程中只剩下進(jìn)程aa程cc這時根據(jù)進(jìn)程優(yōu)先級的大小,進(jìn)程aa入運行態(tài)。當(dāng)進(jìn)程aa調(diào)度時,進(jìn)程調(diào)度程序中直剩下進(jìn)程cc這時進(jìn)程cc進(jìn)入運行態(tài),而當(dāng)前就緒隊列將為空。直到:結(jié)果分析:當(dāng)進(jìn)程i的CPU占用時間等于所需要的執(zhí)行時間時,進(jìn)程cc調(diào)度完成,則這時進(jìn)程調(diào)
4、度中已經(jīng)沒有需要調(diào)度的進(jìn)程了,則整個進(jìn)程調(diào)度完成。2、編寫并調(diào)試一個模擬的進(jìn)程調(diào)度程序,采用“輪轉(zhuǎn)法”調(diào)度算法對五個進(jìn)程進(jìn)行調(diào)度。 輪轉(zhuǎn)法可以是簡單輪轉(zhuǎn)法、可變時間片輪轉(zhuǎn)法,或多隊列輪轉(zhuǎn)法。 簡單輪轉(zhuǎn)法的基本思想是:所有就緒進(jìn)程按 FCFS排成一個隊列,總是把處理機分配給隊首的進(jìn)程,各進(jìn)程占用CPU的時間片相同。如果運行進(jìn)程用完它的時間片后還為完成,就把它送回到就緒隊列的末尾,把處理機重新分配給隊首的進(jìn)程。直至所有的進(jìn)程運行完畢。將老師給的源程序修改成簡單的時間片輪轉(zhuǎn)法流程圖如下:進(jìn)程完成,撤消該進(jìn)程就緒隊列首進(jìn)程投入運行時間片到,運行進(jìn)程已占用CPU時間+1運行進(jìn)程已占用CPU時間已達(dá)到所需
5、的運行時間把運行進(jìn)程插入到下一個隊列的隊尾插入新的進(jìn)程開始初始化PCB,輸入進(jìn)程信息所有隊列都為空各進(jìn)程按FCFS原則排隊等待調(diào)度時間片輪轉(zhuǎn)法#include<stdio.h>#include<stdlib.h>#include<conio.h>#define getpch(type) (type*)malloc(sizeof(type)#define NULL 0#define TIME 2/時間片長度/typedef struct pcb /進(jìn)程管理塊char name10;/進(jìn)程名字char state;/進(jìn)程狀態(tài)int queue;/進(jìn)程所在的隊列i
6、nt ntime;/進(jìn)程需要運行的時間int rtime;/進(jìn)程已經(jīng)運行的時間int etime;/進(jìn)程在本隊列可運行的時間片struct pcb *link;PCB;PCB*ready = NULL, *pinsert = NULL, *pfend = NULL,*p =NULL;/*就緒隊列,進(jìn)程插入位置的變量*/int geti()/使用戶僅能輸入整數(shù)char ch;int i = 0;fflush(stdin);ch = getchar();while(ch = 'n')printf("tf輸入不能為空.請重新輸入n");fflush(stdin);
7、ch = getchar();while(ch != 'n')if(ch > '9' | ch < '0')printf("t輸入有誤!輸入只能為正整數(shù),請重新輸入.n");fflush(stdin);i = 0;ch = getchar();elsei = i*10 + (ch - '0');ch = getchar();return i;void findpos()/更新狀態(tài)量PCB *ps = pfend;if(!ps | !ps -> link | (ps-> link->
8、queue - ps->queue) > 1) pinsert = ps;elsewhile (ps->link && ps ->link->queue != (pfend ->queue +2)ps = ps->link;pinsert = ps;void insert()/插入進(jìn)程if(!ready )ready = p;pfend = p;pinsert = p;else if(ready ->queue = 1) /第一隊列存在p->link = pfend->link;pfend->link = p;p
9、fend = p;findpos();Elsep->link = ready;ready = p;findpos();void input()/*建立進(jìn)程控制塊函數(shù)*/int i,num;printf("n請輸入進(jìn)程的個數(shù):");num = geti();for(i=0; i < num; i+)printf("n進(jìn)程號No.%d:n",i+1);p=getpch(PCB);printf("n輸入進(jìn)程名:");scanf("%s",p->name);printf("n輸入進(jìn)程運行時間:&
10、quot;);p ->ntime = geti();printf("n");p->rtime=0;p->state='w'p->queue =1;p->etime = TIME;p->link=NULL;insert();/*調(diào)用insert函數(shù)*/void disp(PCB *pr)/*建立進(jìn)程現(xiàn)實函數(shù),用于顯示當(dāng)前進(jìn)程*/printf("nnamet statet queuet ntimet rtimet在隊列可停留時間t n");printf("|%st",pr->nam
11、e);printf(" |%ct",pr->state);printf(" |%dt",pr->queue);printf(" |%dt",pr->ntime);printf(" |%dt",pr->rtime);printf(" |%dt",pr->etime);printf("n");void check()/*建立進(jìn)程查看函數(shù)*/PCB *pr;printf("n *當(dāng)前正在運行的進(jìn)程是:%s",ready->na
12、me);/*顯示當(dāng)前運行的進(jìn)程*/disp(ready);pr= ready ->link;printf("n*當(dāng)前就緒隊列狀態(tài)為:n");/*顯示就緒隊列狀態(tài)*/while(pr!=NULL)disp(pr);pr=pr->link;void sort()/調(diào)整進(jìn)程隊列if(!ready->link |ready->queue < ready->link->queue) return;p = ready ->link;ready ->link = pinsert ->link;pinsert ->link
13、= ready;pinsert = ready;ready = p;if (ready && ready -> queue = pinsert ->queue)findpos();void addnew()/添加新的進(jìn)程if(ready ->queue != 1)(ready -> queue)+;ready->etime *= 2;ready -> state='w'sort();/*調(diào)用sort函數(shù)*/input();elseinput();void destroy()/*建立進(jìn)程撤銷函數(shù)(進(jìn)程運行結(jié)束,撤銷進(jìn)程)*/pr
14、intf("n進(jìn)程%s已完成.n",ready->name);p = ready;ready = ready->link;free(p);if (ready && ready -> queue = pinsert ->queue)findpos();void running()/*建立進(jìn)程就緒函數(shù)(進(jìn)程運行時間到,置就緒狀態(tài))*/(ready -> rtime)+;ready ->etime -;if(ready->rtime = ready->ntime)destroy();return;else if(re
15、ady ->etime = 0)int time = 2;(ready -> queue)+;for(int i = 2; i != ready->queue; +i)time *= 2;ready->etime = time;ready -> state='w'sort();/*調(diào)用sort函數(shù)*/void main()char ch;input();while(ready != NULL)printf("nThe execute name:%sn",ready ->name);ready ->state =
16、39;R'check();running();printf("n按i鍵添加新進(jìn)程.按其他任意鍵繼續(xù)運行.");fflush(stdin);ch = getchar();if (ch = 'i'| ch='I')addnew();printf("nn 進(jìn)程已經(jīng)完成n");getchar();運行結(jié)果如下:根據(jù)題意輸入五個進(jìn)程按任意鍵繼續(xù)四、實驗問題及原因 (1)本次試驗,思路設(shè)計不難在這個多級反饋的實驗中,我采取了用一條實際上的鏈表隊列來模擬多個邏輯上的隊列,通過維護(hù)幾個鏈表的狀態(tài)信息來找到每個進(jìn)程運行完后應(yīng)該插入的地方,還有一個標(biāo)志位Fend用來表明新插入的隊列的位置。 (2)在建立優(yōu)先數(shù)就緒隊列時主要運用,鏈表插入模型。但是由于
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- IT行業(yè)安全管理工作總結(jié)
- 2024年認(rèn)識小熊教案
- 2024年牧場之國教案
- 2024年計算機教室管理制度
- 分銷合同范本(2篇)
- 辦公室合同范本(2篇)
- 江蘇省靖江外國語學(xué)校2025屆初中生物畢業(yè)考試模擬沖刺卷含解析
- 2023-2024學(xué)年安徽省亳州市高二上學(xué)期期末考試地理試題(解析版)
- 2025怎樣簽訂民間借款合同
- 2025年針織品化纖織品項目可行性研究報告
- 特種涂料類型——耐核輻射涂料的研究
- 二氧化碳可降解塑料生產(chǎn)項目建議書
- 化工裝置常用英語詞匯對照
- 幼兒園幼兒教育數(shù)學(xué)領(lǐng)域核心經(jīng)驗
- 病例討論麻醉科PPT課件
- EBZ220A掘進(jìn)機幻燈片
- 集體跳繩賽規(guī)則
- 煤礦調(diào)度工作培訓(xùn)內(nèi)容
- 機械原理課程設(shè)計-旋轉(zhuǎn)型灌裝機運動方案設(shè)計
- 標(biāo)準(zhǔn)《大跨徑混凝土橋梁的試驗方法》
- 1、食品安全與營養(yǎng)健康自查制度(學(xué)校食堂)
評論
0/150
提交評論