下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、技術師學院實驗報告學院:計算機科學學院專業(yè):計算機科學與技術(師)班級:學號:組別:成績:組員:預習情況操作情況考勤情況數(shù)據(jù)處理情況實驗地點:實驗日期:指導教師簽名:實驗名稱:實驗一、進程調(diào)度實驗一、實驗目的用高級語言編寫和調(diào)試一個進程調(diào)度程序,以加深對進程的概念及進程調(diào)度算法的理解 二、實驗類別綜合性實驗。綜合高級語言編程、進程調(diào)度模型、進程調(diào)度算法及數(shù)據(jù)結(jié)構(gòu)等多方面的知識三、實驗容和步驟1 編寫并調(diào)試一個模擬的進程調(diào)度程序,采用“最高優(yōu)先數(shù)優(yōu)先”調(diào)度算法對五個進 程進行調(diào)度。“最高優(yōu)先數(shù)優(yōu)先”調(diào)度算法的基本思想是把CPU分配給就緒隊列中優(yōu)先數(shù)最高的進程。靜態(tài)優(yōu)先數(shù)是在創(chuàng)建進程時確定的,并在
2、整個進程運行期間不再改變。動態(tài)優(yōu)先數(shù)是指進程的優(yōu)先數(shù)在創(chuàng)建進程時可以給定一個初始值, 并且可以按一定 原則修改優(yōu)先數(shù)。例如:在進程獲得一次 CPU后就將其優(yōu)先數(shù)減少1。或者,進程等待 的時間超過某一時限時增加其優(yōu)先數(shù)的值,等等該題根據(jù)老師給的代碼用 Visual C+運行,結(jié)果以及分析如下:'C:LI se rspcD es ktopDebuexe'" 0請輸入進程號:3進程號No_0 =輸入進程名:血 輸入進程優(yōu)先數(shù)立 輸入進程運行時間話進程號No.i =輸入進程名:麗 輸入進程優(yōu)先數(shù)汕 輸入進程運行時間再進程號Mo * 2 :輸入進程名;嘆結(jié)果分析:根據(jù)上述輸入的
3、三個進程的信息可以得到:優(yōu)先級最高的是進程CC最先調(diào)度進程CC的狀態(tài)為運行態(tài),需要執(zhí)行的時間為 10當前就緒隊列狀態(tài)為:進程 aa先級比較高,處于就緒隊列前面,而進程 bb先級是三者中最低的,所以處于就緒 隊列的最后。而此時這兩個進程的狀態(tài)都為就緒態(tài)。按任一鍵繼綾The execute numbep:2*當前正在運行的進程是! aa$七at七巳 :Rsupei* :2ndt ine !6!Grim t ine*當前就緒隊列狀態(tài)為:superndt incruntine! CG!2:10!1statesuperndtinerun t imeibb!u!1;510結(jié)果分析:當進程CC 了一個時間片
4、之后而它已占用 CPU時間已達到所需要的運行時 間,則將它的優(yōu)先級減1之后,再將三個進程按優(yōu)先級的大小排列,從中選擇優(yōu)先級 大的進程進入運行狀態(tài),則該次進入運行態(tài)的是進程aa按照這種方式一直運行下去:Su=-一 S1!5:01燈-鍵繼續(xù)-1 The execute number;3I當前正在運行的進程是SCI qniamestatesuperndtimeF-unt luteli cc::R:2110 !11 3*當刖就潔隊列狀態(tài)為(jnane魯七a tusuperdt in)«run t irt:hh!u:5:Qqua mestatesupernilt ineruntimei aa;
5、u;1i6il按任L扌踰并首輸入法半丁_直到:Ihe execute nunbep:i?uin t Ime14*«*當前正在運行的進程是訕 qnane state sitpei* ndLt j_me hb 亦!-3 IS*當前就緒隊列狀態(tài)為:qnanestatesupei* -3ndt Ime!6i5runtimeQnanestateccsupei* -3runtime結(jié)果分析:當進程bb的CPU占用時間等于它需要的執(zhí)行時間時,進程bb度完成 則這時進程調(diào)度中還有兩個進程:進程 aa進程cc按任一鍵繼緘The execute number:17"當前正在運行的進程是冷曰 q
6、name state wupEt1ndt ime:aa:R:-3:6:5runtiiwi當前就緒隊列狀態(tài)為:qname state superndtine:cc血:-3$10:&runtlm«;u進程Caal已完成.結(jié)果分析:當調(diào)度進程中只剩下進程 aa程cc這時根據(jù)進程優(yōu)先級的大小,進程 aa入運行態(tài)。當進程aa調(diào)度時,進程調(diào)度程序中直剩下進程 cc這時進程cc進入運行 態(tài),而當前就緒隊列將為空。直到:The execute nuLinbei"二£1*當前正在運行的進程是託匚qn ane state super1 ndtimerun tinece!H!-
7、G!10!9*當前就緒隊列狀態(tài)為=進程l«J已完咸.按任一鍵繼續(xù)結(jié)果分析:當進程i的CPU占用時間等于所需要的執(zhí)行時間時,進程cc調(diào)度完成, 則這時進程調(diào)度中已經(jīng)沒有需要調(diào)度的進程了,則整個進程調(diào)度完成。2、編寫并調(diào)試一個模擬的進程調(diào)度程序,采用“輪轉(zhuǎn)法”調(diào)度算法對五個進程進行 調(diào)度。輪轉(zhuǎn)法可以是簡單輪轉(zhuǎn)法、可變時間片輪轉(zhuǎn)法,或多隊列輪轉(zhuǎn)法。簡單輪轉(zhuǎn)法的基本思想是:所有就緒進程按 FCFS排成一個隊列,總是把處理機分 配給隊首的進程,各進程占用CPU的時間片相同。如果運行進程用完它的時間片后還為 完成,就把它送回到就緒隊列的末尾, 把處理機重新分配給隊首的進程。直至所有的進 程運行完
8、畢。將老師給的源程序修改成簡單的時間片輪轉(zhuǎn)法流程圖如下:進程完成,撤 消該進程時間片輪轉(zhuǎn)法#in clude<stdio.h>#i nclude<stdlib.h>#in clude<c oni o.h>#defi ne getpch(type) (type*)malloc(sizeof(type)#defi ne NULL 0#defi ne TIME 2時間片長度/typedef struct pcb /進程管理塊char name10;/進程名字char state;/進程狀態(tài)int queue;/進程所在的隊列int ntime;/進程需要運行的時間
9、in t rtime;/進程已經(jīng)運行的時間int etime;/進程在本隊列可運行的時間片struct pcb *li nk;PCB;/*就緒隊PCB *ready = NULL, *pinsert = NULL, *pfend = NULL,*p =NULL;列,進程插入位置的變量*/int geti() /使用戶僅能輸入整數(shù)char ch;int i = 0;fflush(stdi n);ch = getchar();while(ch = 'n')printf("tf 輸入不能為空請重新輸入n");fflush(stdi n);ch = getchar(
10、);while(ch != 'n')if(ch > 9 | ch < '0')printf("t輸入有誤!輸入只能為正整數(shù),請重新輸入.n");fflush(stdi n);i = 0;ch = getchar();elsei = i*10 + (ch - '0'); ch = getchar();return i;void fin dpos()/更新狀態(tài)量PCB *ps = pfen d;if(!ps | !ps -> link | (ps-> lin k->queue - ps->que
11、ue) > 1)pin sert = ps;elsewhile (ps->li nk && ps ->li nk->queue != (pfe nd ->queue +2) ps = ps->li nk;pin sert = ps;插入進程void in sert()/if(!ready )ready = p;pfend = p;pin sert = p;第一隊列存在else if(ready ->queue = 1) /p->li nk = pfen d->li nk;pfen d->li nk = p; pfend
12、 = p;fin dpos();Elsep->li nk = ready;ready = p;fin dpos();void input()/*建立進程控制塊函數(shù)*/int i,num;prin tf("n請輸入進程的個數(shù):");num = geti();for(i=0; i < num; i+)printf("n 進程號 No.%d:n",i+1);p=getpch(PCB);printf("n輸入進程名:");scan f("%s",p->n ame);printf("n輸入進程運行
13、時間:");p ->n time = geti();prin tf("n");p->rtime=O;p->state='w'p->queue =1;p->etime = TIME;p->li nk=NULL;insert();/*調(diào)用 insert 函數(shù) */void disp(PCB *pr)/*建立進程現(xiàn)實函數(shù),用于顯示當前進程*/printf("nnamet statet queuet ntimet rtimet在隊列可停留時間 t n");prin tf("|%st"
14、;,pr-> name);prin tf(" |%ct",pr->state);prin tf(" |%dt",pr->queue);prin tf(" |%dt",pr-> ntime);prin tf(" |%dt",pr->rtime);prin tf(" |%dt",pr->etime);prin tf("n");void check()/* 建立進程查看函數(shù)*/PCB *pr;prin tf("n *當前正在運行的進程是
15、:s",ready->n ame);/*顯示當前運行的進程*/disp(ready);pr= ready ->li nk;printf("n*當前就緒隊列狀態(tài)為:n");/*顯示就緒隊列狀態(tài)*/while(pr!=NULL)disp(pr); pr=pr->li nk;void sort()調(diào)整進程隊列if(!ready->li nk |ready->queue < ready->li nk->queue) return;p = ready ->li nk;ready ->li nk = pinsert
16、->li nk;pinsert ->li nk = ready;pin sert = ready;ready = p;if (ready && ready -> queue = pin sert ->queue) fin dpos();void add new() 添加新的進程if(ready ->queue != 1)(ready -> queue)+;ready->etime *= 2;ready -> state='w'sort();/* 調(diào)用 sort 函數(shù) */ in put();elsein put()
17、;void destroy。/*建立進程撤銷函數(shù)(進程運行結(jié)束,撤銷進程)*/printf("n進程%s已完成.n",ready->name);p = ready;ready = ready->li nk;free(p);if (ready && ready -> queue = pin sert ->queue)fin dpos();void running()/*建立進程就緒函數(shù)(進程運行時間到,置就緒狀態(tài))*/(ready -> rtime)+;ready ->etime -;if(ready->rtime =
18、 ready->n time)destroy();return;else if(ready ->etime = 0)int time = 2;(ready -> queue)+;for(i nt i = 2; i != ready->queue; +i) time *= 2;ready->etime = time;ready -> state='w'sort();/* 調(diào)用 sort 函數(shù) */void mai n()char ch;in put();while(ready != NULL)printf("nThe execute
19、name:%sn",ready ->name);ready ->state = 'R'check();runnin g();printf("n按i鍵添加新進程.按其他任意鍵繼續(xù)運行.");fflush(stdi n);ch = getchar();if (ch = 'i'| ch=T)add new();printf("nn進程已經(jīng)完成n");getchar();運行結(jié)果如下:根據(jù)題意輸入五個進程按任意鍵繼續(xù)'C:UserspcDesktopDebugjj-exe"科鍵添加新進穆-按
20、其他任意鍵繼續(xù)運行山The execulte name = aa*當前正在運行的進程是=aanane !aastate :Rqueue11nt ine 12rtime :1在隊列可停留時間11員 ttXJt當前就緒隊列狀態(tài)為:namestatequeuent inert i_me在隊列可停留時間ibb!u:1:B2nainestatequeuentinertine在隊列可停留時間icc!w!1IS1012nam&statequeuent imertime在隊列可停留時間:ddUjp:1(7:012nanestatequeuent inert i_me在隊列可停留時間See!ur:1:9
21、:0:2孩舞據(jù)加兩進程-按其他任意鍵繼續(xù)運行-se rApcDeskto pDe t>ugjj .exe'按i鍵添加新進程.按其他任意鍵繼續(xù)運行./Tlie execute name:CC*當前正在運行的進私是:cc在隊列可停留時間queuent in?rtimQ:cc;R:1i5;0:2*當前就緒隊列狀態(tài)為=nanequeuentlnert ine在隊列可停留時間:dd:w:1:7:0i:2nanestatequeuencimert ine在隊列可停留時間lee:1!9:0:2namesitequeuent ±mei*t ime在隊列可停留時間:嗣!u1211212;
22、2namestateQueuentimept ine柱隊列可停留時間:hh!u:211012:2按i鍵電Q新囲呈.丄山 焉J丄A. Th- +rid t 胡丄、1按其他任意犍繼續(xù)運行.1?= q按i鍵添加新進程按其他任意鍵繼續(xù)運行.丄The execute nane:ddname當前正在運行的進程=ddsit atequeuent ineft ime在隊列可停留時間 !2!ddIR!i1719“當前就緒隊列狀態(tài)為:namestatequeuen cifnei*-t ime在隊列可停留時間!eelu:1!912namesCatequeuent imeft ime在隊列可停留時間idiLlw;2!1212:2namestatequeuent inevt ime在隊列可停留時間:bb:u;2il0;212namestitequeuent inert ine在隊列可停留時間iCC!ut2:5!212杭久鍵添加新進程按其他任意鍵繼續(xù)運行.Xll XA-1T*1 ?丄!9 "U se rs pc Des kto pDebu gjj .exe"1"C:UserspcADesk
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年牛津深圳中考英語語法專項練習定語從句和賓語從句
- 吉首大學《教學技能訓練1》2021-2022學年第一學期期末試卷
- 吉首大學《抽樣技術與應用》2021-2022學年第一學期期末試卷
- 《機床夾具設計》試卷23
- 吉林藝術學院《藝用人體解剖學》2021-2022學年第一學期期末試卷
- 吉林藝術學院《三維軟件MAYA》2021-2022學年第一學期期末試卷
- 集體經(jīng)濟房屋分配協(xié)議書范本
- 協(xié)議書范文偽裝通知書的效力
- 吉林師范大學《原動畫技法》2021-2022學年第一學期期末試卷
- 城市拍檔協(xié)議書范文范本
- 2023年中國鐵塔招聘筆試真題
- 常規(guī)弱電系統(tǒng)施工單價表純勞務
- 中小學學校人防、物防、技防落實方案
- 2023湖南文藝出版社五年級音樂下冊全冊教案
- 2024-2025學年蘇教版小學四年級上學期期中英語試題及解答參考
- 國開2024秋《形勢與政策》專題測驗1-5參考答案
- DLT 5707-2014 電力工程電纜防火封堵施工工藝導則
- 廣東省佛山市南海區(qū)2024年七年級上學期期中數(shù)學試題【附參考答案】
- 小紅書2024年家裝行業(yè)月報(9月)
- 【PPP項目風險評估與控制探究的國內(nèi)外文獻綜述3900字】
- 安徽省蕪湖市2024年部編版初中九年級期中考試語文試卷
評論
0/150
提交評論