版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實驗報告實驗一:進(jìn)程調(diào)度算法一、實驗?zāi)康?利用高級語言實現(xiàn)三種不同及進(jìn)程調(diào)度算法:短作業(yè)優(yōu)先算法、時間片輪轉(zhuǎn)調(diào)度算法和優(yōu)先級調(diào)度算法。2通過實驗理解有關(guān)進(jìn)程控制塊,進(jìn)程隊列等的概念。二、實驗原理各調(diào)度算法思想:1. 先來先服務(wù)算法(fcfs):按照進(jìn)程進(jìn)入就緒隊列的先后次序來分配cpu,一旦一個進(jìn)程占有cpu,就一直運行下去,知道該進(jìn)程完成工作,才釋放cpu。2. 時間片輪轉(zhuǎn)算法:系統(tǒng)將所有就緒進(jìn)程按到達(dá)時間的先后次序排成一個隊列,進(jìn)程調(diào)度程序總是選擇隊列中的第一個進(jìn)程執(zhí)行,且僅能執(zhí)行一個時間片,在使用完一個時間片后,即使進(jìn)程并未完成其運行,也必須將cpu交給下一個進(jìn)程;如果一個時間片未使用完
2、就完成了該進(jìn)程,則剩下的時間分配給下一個進(jìn)程。3. 優(yōu)先權(quán)調(diào)度算法;在創(chuàng)建進(jìn)程時就確定優(yōu)先權(quán),確定之后在整個程序運行期間不再改變,根據(jù)優(yōu)先級排列,系統(tǒng)會把cpu分配給優(yōu)先權(quán)最高的進(jìn)程。三、 實驗步驟、數(shù)據(jù)記錄及處理1、 算法流程抽象數(shù)據(jù)類型的定義:pcb塊結(jié)構(gòu)體類型struct pcbint name;int arrivetime; /到達(dá)時間int servicetime; /服務(wù)時間/int starttimemax; /開始時間 int finishtime; /完成/結(jié)束時間 int turntime; /周轉(zhuǎn)時間 int average_turntime; /帶權(quán)周轉(zhuǎn)時間int si
3、gn; /標(biāo)志進(jìn)程是否完成int remain_time; /剩余時間int priority; /優(yōu)先級pcbmax;主程序的流程以及各程序模塊之間的層次(調(diào)用)關(guān)系:主程序中從鍵盤得到進(jìn)程的數(shù)量,創(chuàng)建pcb,調(diào)用layout()函數(shù)顯示選擇界面。layout()函數(shù)中選擇相應(yīng)的算法并調(diào)用相關(guān)函數(shù)如:fcfs()、time_segment();、priority(),這三個函數(shù)分別實現(xiàn)先來先服務(wù)算法,時間片輪轉(zhuǎn)算法和優(yōu)先級算法,最后分別打印。程序流程圖:2、運行結(jié)果分析:先來先服務(wù)算法:時間片輪轉(zhuǎn)算法:優(yōu)先級算法: 西安工業(yè)大學(xué)實驗報告 四、總結(jié)與體會經(jīng)過此次實驗,我覺得具體寫代碼就是對解題
4、步驟的一個細(xì)化,也發(fā)現(xiàn)了已往課程中學(xué)習(xí)的不足,以便日后改正。附錄:源代碼#include<stdio.h>#include<malloc.h>#define max 50struct pcbint name;int arrivetime; /到達(dá)時間int servicetime; /服務(wù)時間/int starttimemax; /開始時間 int finishtime; /完成/結(jié)束時間 int turntime; /周轉(zhuǎn)時間 int average_turntime; /帶權(quán)周轉(zhuǎn)時間int sign; /標(biāo)志進(jìn)程是否完成int remain_time; /剩余時間i
5、nt priority; /優(yōu)先級pcbmax;void init(int n) /初始化for(int i=0;i<n;i+)pcbi.arrivetime=0; pcbi.servicetime=0; /pcbi.starttime=0; pcbi.finishtime=0; pcbi.turntime=0; pcbi.average_turntime=0;pcbi.remain_time=0;pcbi.sign=0;pcbi.priority=0;void creat(int n) /創(chuàng)建pcbint i;for(i=1;i<=n;i+)printf("n%d:n請
6、依次輸入進(jìn)程的信息n請輸入進(jìn)程名:",i);scanf("%d",&);printf("請輸入到達(dá)時間:");scanf("%d",&pcbi.arrivetime);printf("請輸入服務(wù)時間:");scanf("%d",&pcbi.servicetime);printf("請輸入優(yōu)先級:");scanf("%d",&pcbi.priority);pcbi.remain_time=pcbi.
7、servicetime; /初始化剩余時間為服務(wù)時間void fcfs(int n) /先來先服務(wù)int starttime;printf("請輸入開始執(zhí)行時間:n");scanf("%d",&starttime);if(starttime>=pcb0.arrivetime)pcb0.finishtime=pcb0.servicetime+starttime;elsepcb0.finishtime=pcb0.finishtime+pcb0.servicetime;for(int i=1;i<n;i+)if(pcbi-1.finisht
8、ime>pcbi.arrivetime)pcbi.finishtime=pcbi-1.finishtime+pcbi.servicetime;elsepcbi.finishtime=pcbi.arrivetime+pcbi.servicetime;pcbi.turntime=pcbi.finishtime-pcbi.arrivetime;pcbi.average_turntime=pcbi.turntime/pcbi.servicetime;void print_fcfs(int n)/printf("進(jìn)程名,到達(dá)時間t服務(wù)時間t完成時間t周轉(zhuǎn)時間t周轉(zhuǎn)時間:,%st%dt%d
9、t%dt%dt%dt");printf("進(jìn)程名 到達(dá)時間 服務(wù)時間 完成時間 周轉(zhuǎn)時間 帶權(quán)周轉(zhuǎn)時間:n");for(int i=0;i<n;i+)printf("%d ,%d ,%d ,%d ,%d ,%d ", ,pcbi.arrivetime ,pcbi.servicetime ,pcbi.finishtime ,pcbi.turntime ,pcbi.average_turntime);printf("n");void time_segment(int n) /時間片輪轉(zhuǎn)int i,j;in
10、t t; /時間片int flag=1; /就緒隊列中是否還有進(jìn)程/int time=pcb0.arrivetime; /當(dāng)前的時間int time=0;int sum=0; /已經(jīng)完成的進(jìn)程數(shù)/按各進(jìn)程的arrivetime進(jìn)行升序排列for(i=1;i<=n;i+)for(j=i+1;j<=n;j+) if(pcbj.arrivetime<pcbi.arrivetime)pcb0=pcbj;pcbj=pcbi;pcbi=pcb0; /printf("輸出排序結(jié)果:n");/for(i=1;i<=n;i+) /檢查排序是否正確 /printf(&q
11、uot;%dt",);printf("輸入時間片:n");scanf("%d",&t);/printf("n運行的進(jìn)程名 開始運行時間 運行時間 剩余服務(wù)時間 結(jié)束時間n");while(sum<n) flag=0; /當(dāng)前就緒隊列中沒有進(jìn)程for(i=1;i<=n;i+)if(pcbi.sign=1) continue; /表示該進(jìn)程已完成else /沒有完成的進(jìn)程需要的時間大于一個時間片if(pcbi.remain_time > t)flag=1;time=time+t;pcb
12、i.remain_time=pcbi.remain_time-t;/printf("%10d%16d%12d%12d%12dn",,time-t,t,pcbi.remain_time,time);/沒有完成的進(jìn)程需要的時間小于或等于一個時間片else if(pcbi.remain_time <= t)flag=1; /加入就緒隊列time=time+pcbi.remain_time;pcbi.finishtime=time; pcbi.sign=1;/printf("%10d%16d%12d%12d%12dn",
13、,time-pcbi.remain_time,pcbi.servicetime,0,time); pcbi.remain_time=0;if(pcbi.sign=1) sum+;/forif(flag=0&&sum<n) / 還有沒執(zhí)行的進(jìn)程,且沒進(jìn)入就就緒隊列 for(i=1;i<=n;i+)if(pcbi.sign=0) time=pcbi.arrivetime;break;/whilevoid print_time(int n)for(int i=0;i<n;i+)printf("n進(jìn)程名 服務(wù)時間 完成時間n");printf(&q
14、uot;%6d%10d%10d",pcbi+1.name,pcbi.servicetime,pcbi.finishtime);printf("n");void priority(int n)int i,j;int time = pcb1.arrivetime;/按各進(jìn)程的arrivetime進(jìn)行升序排列,最早到達(dá)的進(jìn)程先執(zhí)行for(i=1;i<=n;i+)for(j=i+1;j<=n;j+) if(pcbj.arrivetime < pcbi.arrivetime)pcb0=pcbj;pcbj=pcbi;pcbi=pcb0; /printf(&q
15、uot;輸出排序結(jié)果:n"); /for(i=1;i<=n;i+) /檢查排序是否正確 /printf("%dt",);printf("n進(jìn)程名 服務(wù)時間 優(yōu)先級 完成時間n");/先到達(dá)的進(jìn)程第一個執(zhí)行if(i=1)pcbi.finishtime=pcbi.arrivetime + pcbi.servicetime;time =pcbi.arrivetime + pcbi.servicetime;printf("%6d%10d%10d%10d",,pcbi.servicetime,
16、pcbi.priority,pcbi.finishtime);printf("n");/測試第一個進(jìn)程輸出正確/*printf("輸出第一個程序的:n");printf("名稱 到達(dá)時間 完成時間n");printf("%4d%8d%8d",,pcbi.arrivetime,pcbi.finishtime);printf("n"); */i+;/按各進(jìn)程的priority進(jìn)行降序排列,優(yōu)先級最高的進(jìn)程先執(zhí)行for(i=2;i<=n;i+)for(j=i+1;j<=n
17、;j+) if(pcbj.priority > pcbi.priority)pcb0=pcbj;pcbj=pcbi;pcbi=pcb0;for(i=2;i<=n;i+)time = time + pcbi.servicetime;pcbi.finishtime = time;printf("%6d%10d%10d%10d",,pcbi.servicetime,pcbi.priority,pcbi.finishtime);printf("n");/for/voidvoid layout(int n)int ch=0;printf("tt*調(diào)度算法*n");printf("tt1.先來先服務(wù)n");printf("tt2.時間片輪轉(zhuǎn)n");printf("tt3.優(yōu)先級n");printf(" 選擇算法:n");scanf("%10d",&ch);switch(ch)case 1: fcfs(n); print_fcfs(n); break;case 2: time_segment(n); print_time(n); break;cas
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 體育館環(huán)境衛(wèi)生承諾書
- 2024年研發(fā)設(shè)計與技術(shù)咨詢協(xié)議3篇
- 證券公司投資資產(chǎn)管理
- SP館租賃合同模板
- 鐵路軌道施工安全合同
- 設(shè)計工作室隔斷租賃協(xié)議
- 跨境支付項目澄清函參考模板
- 環(huán)保行業(yè)污染防治培訓(xùn)費管理辦法
- 能源利用評審員管理辦法
- 機(jī)場化糞池改造工程合同
- 數(shù)學(xué)文化欣賞
- 脊柱區(qū)1教學(xué)講解課件
- KK5-冷切鋸操作手冊-20151124
- 教你炒紅爐火版00纏論大概
- 消防管道施工合同
- 大學(xué)生計算與信息化素養(yǎng)-北京林業(yè)大學(xué)中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 2023年國開大學(xué)期末考復(fù)習(xí)題-3987《Web開發(fā)基礎(chǔ)》
- 《駱駝祥子》1-24章每章練習(xí)題及答案
- 國際金融課后習(xí)題答案(吳志明第五版)第1-9章
- 《基于杜邦分析法周大福珠寶企業(yè)盈利能力分析報告(6400字)》
- 全國英語等級考試三級全真模擬試題二-2023修改整理
評論
0/150
提交評論