進程調(diào)度實驗_第1頁
進程調(diào)度實驗_第2頁
進程調(diào)度實驗_第3頁
進程調(diào)度實驗_第4頁
進程調(diào)度實驗_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

實驗二進程調(diào)度算法模擬姓名:海日汗學號:20092106091概述:進程調(diào)度算法有FIFO,優(yōu)先數(shù)調(diào)度算法,時間片輪轉(zhuǎn)調(diào)度算法,分級調(diào)度算法。2實驗?zāi)康模耗MFIFO,時間片調(diào)度算法和優(yōu)先數(shù)調(diào)度算法。更深入的了解進程調(diào)度算法。3實驗要求

輸入:每個進程包括四個數(shù)據(jù)項:進程名進程狀態(tài)(1等待2就緒3運行)所需時間優(yōu)先數(shù)(0級最高)。輸出:進程執(zhí)行流和等待時間平均等待時間。4源代碼:#include<string.h>#include<iostream>usingnamespacestd;constintblock_time=10;//定義時間片的長度為10秒constintMAXPCB=100;//定義最大進程數(shù)inta[MAXPCB];//保存各個進程幾次時間偏上運行//定義進程結(jié)構(gòu)體typedefstructnode{ charname[20]; //進程名字 intstate;//進程狀態(tài) intrtime;//進程運行時間 intprivilege;//進程優(yōu)先級 intwait_time;//進程等待時間}pcb;pcbpcbs[MAXPCB];intquantity;//進程個數(shù)//初始化函數(shù)voidinitial(){ inti; for(i=0;i<MAXPCB;i++) { strcpy(pcbs[i].name,""); pcbs[i].state=0; pcbs[i].rtime=0; pcbs[i].privilege=0; pcbs[i].wait_time=0; } quantity=0;//進程個數(shù)}//讀數(shù)據(jù)函數(shù)intreadData(){ FILE*fp; charfname[20]; inti; cout<<"請輸入進程流文件名:"; cin>>fname; if((fp=fopen(fname,"r"))==NULL) { cout<<"錯誤,文件打不開,請檢查文件名"<<endl; } else { while(!feof(fp)) { fscanf(fp,"%s%d%d%d",pcbs[quantity].name,&pcbs[quantity].state,&pcbs[quantity].rtime,&pcbs[quantity].privilege); quantity++; } //輸出所讀入的數(shù)據(jù) cout<<"輸出所讀入的數(shù)據(jù)"<<endl; cout<<"進程名進程狀態(tài)所需時間優(yōu)先數(shù)"<<endl; for(i=0;i<quantity;i++) { cout<<""<<pcbs[i].name<<"\t"<<pcbs[i].state<<"\t"<<pcbs[i].rtime<<"\t"<<pcbs[i].privilege<<endl; } return(1); } return(0); }//重置數(shù)據(jù),以供另一個算法使用voidinit(){ inti; for(i=0;i<quantity;i++) { pcbs[i].wait_time=0; }}//先進先出算法voidFIFO(){ inti,j; doubletotal; //輸出FIFO算法執(zhí)行流 cout<<endl<<"---------------------------------------------------------------"<<endl; cout<<"FIFO算法執(zhí)行流:"<<endl; cout<<"進程名等待時間"<<endl; for(i=0;i<quantity;i++) { cout<<""<<pcbs[i].name<<""<<pcbs[i].wait_time<<endl; for(j=i+1;j<quantity;j++) { pcbs[j].wait_time+=pcbs[i].rtime; } } total=0.0; for(i=0;i<quantity;i++) { total+=pcbs[i].wait_time; } cout<<"總等待時間:"<<total<<"平均等待時間:"<<1.0*(total/quantity)<<endl; }//優(yōu)先數(shù)調(diào)度算法voidprivilege(){ inti,j; doubletotal; for(i=0;i<quantity;i++) { pcbzhizhen; for(j=i+1;j<quantity;j++) { if(pcbs[i].state<pcbs[j].state) { zhizhen=pcbs[i]; pcbs[i]=pcbs[j]; pcbs[j]=zhizhen; } if(pcbs[i].state==pcbs[j].state&&pcbs[i].privilege>pcbs[j].privilege) { zhizhen=pcbs[i]; pcbs[i]=pcbs[j]; pcbs[j]=zhizhen; } if(pcbs[i].state==pcbs[j].state&&pcbs[i].privilege==pcbs[j].privilege)//狀態(tài)和優(yōu)先級都相等的情況,運行時間短的先運行 { if(pcbs[i].rtime>pcbs[j].rtime) { zhizhen=pcbs[i]; pcbs[i]=pcbs[j]; pcbs[j]=zhizhen; } else continue; } } } for(i=0;i<quantity;i++) { for(j=i+1;j<quantity;j++) { pcbs[j].wait_time+=pcbs[i].rtime; } } //輸出優(yōu)先數(shù)調(diào)度執(zhí)行流 cout<<endl<<"---------------------------------------------------------------"<<endl; cout<<"優(yōu)先數(shù)調(diào)度執(zhí)行流:"<<endl; cout<<"進程名等待時間"<<endl; for(i=0;i<quantity;i++) { cout<<""<<pcbs[i].name<<""<<pcbs[i].wait_time<<endl; } total=0.0; for(i=0;i<quantity;i++) { total+=pcbs[i].wait_time; } cout<<"總等待時間:"<<total<<"平均等待時間:"<<1.0*(total/quantity)<<endl; }//時間片輪轉(zhuǎn)調(diào)度算法intBLOCK_TIME(){ for(inti=0;i<quantity;i++) { pcbzhizhen; for(intj=i+1;j<quantity;j++) { if(pcbs[i].state<pcbs[j].state)//狀態(tài)越高的先運行 { zhizhen=pcbs[i]; pcbs[i]=pcbs[j]; pcbs[j]=zhizhen; } if(pcbs[i].state==pcbs[j].state&&pcbs[i].privilege>pcbs[j].privilege)//狀態(tài)相等情況要考慮優(yōu)先級 { zhizhen=pcbs[i]; pcbs[i]=pcbs[j]; pcbs[j]=zhizhen; } if(pcbs[i].state==pcbs[j].state&&pcbs[i].privilege==pcbs[j].privilege)//狀態(tài)和優(yōu)先級都相等的情況,運行時間短的先運行 { if(pcbs[i].rtime>pcbs[j].rtime) { zhizhen=pcbs[i]; pcbs[i]=pcbs[j]; pcbs[j]=zhizhen; } else continue; } } } intflag=0;//標記運行幾次時間片 intnumber=0;//時間片個數(shù) for(i=0;i<quantity;i++) { if(pcbs[i].rtime%block_time==0) { a[i]=pcbs[i].rtime/block_time; if(a[i]>flag) flag=a[i]; } else { a[i]=pcbs[i].rtime/block_time+1; if(a[i]>flag) flag=a[i]; } } cout<<endl<<"---------------------------------------------------------------"<<endl; cout<<"時間片輪轉(zhuǎn)調(diào)度執(zhí)行流:"<<endl; while(flag--) { number++; for(intj=0;j<quantity;j++) { if(a[j]>=number) cout<<pcbs[j].name<<endl; } } return0;}//主函數(shù)voidmain(){ intflag; cout<<endl<<endl; cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl; cout<<"┃進程調(diào)度模擬系統(tǒng)┃"<<endl; cout<<"┠───────────────────────┨"<<endl; cout<<"┃海日汗┃"<<endl; cout<<"┃2009210609┃"<<endl; cout<<"┃412689621@┃"<<endl; cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl; cout<<endl<<endl; initial(); flag=readData(); if(flag==1) { FIFO(); init(); privilege(); init(); BLOCK_TIME(); }}5運行結(jié)果:Jcb.txt的內(nèi)容是:job1 1 88 1job2 3 56 0job31501job42792job52890job621103job71 90 46.心得和思路:通過本次實驗,我更深入的了解了進程調(diào)度算法!實現(xiàn)了先來先服務(wù)算法,優(yōu)先級調(diào)度算法,時間片輪轉(zhuǎn)算法!主要思想如下:(1)先來先服務(wù)算法的時候,狀態(tài)和優(yōu)先級都沒考慮,看成隊列的順序就是

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論