操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)_第1頁
已閱讀1頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  題目: 進(jìn)程調(diào)度 </p><p><b>  課程設(shè)計(jì)目的</b></p><p>  多道程序設(shè)計(jì)中,經(jīng)常是若干個(gè)進(jìn)程同時(shí)處于就緒狀態(tài),必須依照某種策略來決定那個(gè)進(jìn)程優(yōu)先占有處理機(jī)。因而引起進(jìn)程調(diào)度。本實(shí)驗(yàn)?zāi)M在單處理機(jī)情況下的處理機(jī)調(diào)度問題,加深對(duì)進(jìn)程調(diào)度的理解。</p><p><b>  設(shè)計(jì)要求

2、</b></p><p>  設(shè)計(jì)進(jìn)程調(diào)度算法,進(jìn)程數(shù)不定</p><p>  包含幾種調(diào)度算法,并加以實(shí)現(xiàn)</p><p>  輸出進(jìn)程的調(diào)度過程——進(jìn)程的狀態(tài)、鏈表等。</p><p><b>  設(shè)計(jì)類型</b></p><p>  題目——優(yōu)先權(quán)法、輪轉(zhuǎn)法</p>

3、<p><b>  簡(jiǎn)化假設(shè)</b></p><p>  進(jìn)程為計(jì)算型的(無I/O)</p><p>  進(jìn)程狀態(tài):ready、running、finish</p><p>  進(jìn)程需要的CPU時(shí)間以時(shí)間片為單位確定</p><p><b>  算法描述</b></p>&

4、lt;p>  優(yōu)先權(quán)法——?jiǎng)討B(tài)優(yōu)先權(quán)</p><p>  當(dāng)前運(yùn)行進(jìn)程用完時(shí)間片后,其優(yōu)先權(quán)減去一個(gè)常數(shù)。</p><p><b>  輪轉(zhuǎn)法</b></p><p><b>  設(shè)計(jì)流程圖</b></p><p><b>  注意:</b></p><

5、;p>  產(chǎn)生的各種隨機(jī)數(shù)的取值范圍加以限制,如所需的CPU時(shí)間限制在1~20之間。</p><p>  進(jìn)程數(shù)n不要太大通常取4~8個(gè)</p><p><b>  使用動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)</b></p><p><b>  獨(dú)立編程</b></p><p><b>  至少三種調(diào)度算法&

6、lt;/b></p><p>  若有可能請(qǐng)?jiān)趫D形方式下,將PCB的調(diào)度用圖形成動(dòng)畫顯示。</p><p><b>  五.設(shè)計(jì)過程:</b></p><p> ?。?)輸入:進(jìn)程流文件(1.txt),其中存儲(chǔ)的是一系列要執(zhí)行的進(jìn)程, 每個(gè)作業(yè)包括四個(gè)數(shù)據(jù)項(xiàng):</p><p>  進(jìn)程名 進(jìn)程狀態(tài)(1就緒 2等待

7、3運(yùn)行) 所需時(shí)間 優(yōu)先數(shù)(0級(jí)最高)</p><p>  進(jìn)程0 1 50 2</p><p>  進(jìn)程1 2 10 4</p><p>  進(jìn)程2 1 15 0<

8、;/p><p>  進(jìn)程3 3 28 5 </p><p>  進(jìn)程4 2 19 1</p><p>  進(jìn)程5 3 8 7</p><p>  輸

9、出: 進(jìn)程執(zhí)行流等待時(shí)間,平均等待時(shí)間</p><p>  本程序包括:FIFO算法,優(yōu)先數(shù)調(diào)度算法,時(shí)間片輪轉(zhuǎn)調(diào)度算法</p><p><b>  (2)程序代碼</b></p><p>  #include<stdio.h> </p><p>  #include<string.h> <

10、/p><p>  #include<iostream.h></p><p>  const int block_time=10; //定義時(shí)間片的長度為10秒 </p><p>  const int MAXPCB=100; //定義最大進(jìn)程數(shù)</p><p>  //定義進(jìn)程結(jié)構(gòu)體 PCB</p><p> 

11、 typedef struct node</p><p><b>  {</b></p><p>  char name[20]; /*進(jìn)程標(biāo)識(shí)符*/</p><p>  int status;/*進(jìn)程的狀態(tài)*/</p><p>  int time; /*所需時(shí)間*/</p><p>  int

12、 privilege;/*優(yōu)先權(quán)*/</p><p>  int finished; </p><p>  int wait_time; }pcb;</p><p>  pcb pcbs[MAXPCB]; </p><p>  int quantity;/*計(jì)數(shù)器*/</p><p><b>  //初始化函

13、數(shù) </b></p><p>  void initial()</p><p><b>  { </b></p><p><b>  int i;</b></p><p>  for(i=0;i<MAXPCB;i++)</p><p><b>  

14、{ </b></p><p>  strcpy(pcbs[i].name,""); </p><p>  pcbs[i].status=0; </p><p>  pcbs[i].time=0;</p><p>  pcbs[i].privilege=0;</p><p>  pcbs[

15、i].finished=0; </p><p>  pcbs[i].wait_time=0; </p><p><b>  }</b></p><p>  quantity=0;</p><p><b>  }</b></p><p><b>  //讀數(shù)據(jù)函數(shù) &

16、lt;/b></p><p>  int readData()</p><p><b>  { </b></p><p>  FILE *fp; </p><p>  char fname[20]; </p><p><b>  int i;</b></p>

17、<p>  cout<<"請(qǐng)輸入進(jìn)程流文件名:"; </p><p>  cin>>fname; </p><p>  if((fp=fopen("f:\\1\\1.txt","r"))==NULL)</p><p><b>  { </b><

18、;/p><p>  cout<<"錯(cuò)誤,文件打不開,請(qǐng)檢查文件名"<<endl; </p><p><b>  } </b></p><p><b>  else</b></p><p><b>  { </b></p>&

19、lt;p>  while(!feof(fp))</p><p><b>  { </b></p><p>  fscanf(fp,"%s %d %d %d",pcbs[quantity].name,&pcbs[quantity].status,</p><p>  &pcbs[quantity].tim

20、e,&pcbs[quantity].privilege); </p><p>  quantity++; </p><p>  } //輸出所讀入的數(shù)據(jù) </p><p>  cout<<"輸出所讀入的數(shù)據(jù)"<<endl; </p><p>  cout<<"進(jìn)程名 進(jìn)

21、程狀態(tài) 所需時(shí)間 優(yōu)先數(shù)"<<endl; </p><p>  for(i=0;i<quantity;i++)</p><p><b>  { </b></p><p>  cout<<" "<<pcbs[i].name<<" "<&l

22、t;pcbs[i].status<<" "<<pcbs[i].time<<" "<<pcbs[i].privilege<<endl; </p><p><b>  } </b></p><p>  return(1); </p><p><

23、b>  } </b></p><p>  return(0);</p><p><b>  }</b></p><p>  //重置數(shù)據(jù),以供另一個(gè)算法使用 </p><p>  void init() </p><p><b>  { </b></p

24、><p><b>  int i;</b></p><p>  for(i=0;i<MAXPCB;i++)</p><p><b>  {</b></p><p>  pcbs[i].finished=0; pcbs[i].wait_time=0; </p><p><

25、;b>  } </b></p><p><b>  }</b></p><p><b>  //先進(jìn)先出算法 </b></p><p>  void FIFO() </p><p><b>  { </b></p><p>  int

26、i,j; int total;</p><p>  //輸出FIFO算法執(zhí)行流 </p><p>  cout<<endl<<"*****************************************************"<<endl; </p><p>  cout<<"F

27、IFO算法執(zhí)行流:"<<endl; cout<<"進(jìn)程名 等待時(shí)間"<<endl; </p><p>  for(i=0;i<quantity;i++)</p><p><b>  { </b></p><p>  cout<<" "<

28、<pcbs[i].name<<" "<<pcbs[i].wait_time<<endl; </p><p>  for(j=i+1;j<quantity;j++)</p><p>  { pcbs[j].wait_time+=pcbs[i].time; } </p><p><b>  }

29、 </b></p><p><b>  total=0; </b></p><p>  for(i=0;i<quantity;i++)</p><p>  { total+=pcbs[i].wait_time; } </p><p>  cout<<"總等待時(shí)間:"<

30、;<total<<" 平均等待時(shí)間:"<<total/quantity<<endl;</p><p><b>  }</b></p><p>  //優(yōu)先數(shù)調(diào)度算法 </p><p>  void privilege() </p><p><b> 

31、 { </b></p><p>  int i,j,p; </p><p>  int passed_time=0; </p><p>  int total;</p><p>  int queue[MAXPCB]; </p><p>  int current_privilege=1000;</p

32、><p>  for(i=0;i<quantity;i++)</p><p><b>  { </b></p><p>  current_privilege=1000; </p><p>  for(j=0;j<quantity;j++)</p><p><b>  { <

33、;/b></p><p>  if((pcbs[j].finished==0)&&(pcbs[j].privilege<current_privilege))</p><p><b>  { p=j; </b></p><p>  current_privilege=pcbs[j].privilege; </p

34、><p><b>  } </b></p><p><b>  } </b></p><p>  queue[i]=p;</p><p>  pcbs[p].finished=1; </p><p>  pcbs[p].wait_time+=passed_time; </p

35、><p>  passed_time+=pcbs[p].time; </p><p><b>  }</b></p><p>  //輸出優(yōu)先數(shù)調(diào)度執(zhí)行流 </p><p>  cout<<endl<<"********************************************

36、***************"<<endl; </p><p>  cout<<"優(yōu)先數(shù)調(diào)度執(zhí)行流:"<<endl; </p><p>  cout<<"進(jìn)程名 等待時(shí)間"<<endl; </p><p>  for(i=0;i<quantity;i

37、++)</p><p><b>  { </b></p><p>  cout<<" "<<pcbs[queue[i]].name<<" "<<pcbs[queue[i]].wait_time<<endl; </p><p><b> 

38、 }</b></p><p><b>  total=0; </b></p><p>  for(i=0;i<quantity;i++)</p><p>  { total+=pcbs[i].wait_time; } </p><p>  cout<<"總等待時(shí)間:"&l

39、t;<total<<" 平均等待時(shí)間:"<<total/quantity<<endl;</p><p><b>  }</b></p><p>  //時(shí)間片輪轉(zhuǎn)調(diào)度算法 </p><p>  void timer() </p><p><b>  

40、{ </b></p><p>  int i,j,number,flag=1; </p><p>  int passed_time=0; </p><p>  int max_time=0; </p><p>  int round=0; </p><p>  int queue[1000]; /*隊(duì)列*

41、/</p><p>  int total=0;</p><p>  while(flag==1)</p><p><b>  { </b></p><p><b>  flag=0; </b></p><p><b>  number=0;</b>&l

42、t;/p><p>  for(i=0;i<quantity;i++)</p><p><b>  { </b></p><p>  if(pcbs[i].finished==0)</p><p>  { number++; j=i; } </p><p><b>  }</b&g

43、t;</p><p>  if(number==1)</p><p>  { queue[total]=j; total++; pcbs[j].finished=1; }</p><p>  if(number>1)</p><p><b>  {</b></p><p>  for(i=0

44、;i<quantity;i++)</p><p><b>  { </b></p><p>  if(pcbs[i].finished==0)</p><p>  { flag=1; </p><p>  queue[total]=i; </p><p><b>  total++

45、; </b></p><p>  if(pcbs[i].time<=block_time*(round+1))</p><p><b>  { </b></p><p>  pcbs[i].finished=1; </p><p><b>  } </b></p>&

46、lt;p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  round++; </b></p><p><b>  } </b></p

47、><p>  if(queue[total-1]==queue[total-2])</p><p>  { total--; }</p><p>  cout<<endl<<"*******************************************************"<<endl; </p

48、><p>  cout<<"時(shí)間片輪轉(zhuǎn)調(diào)度執(zhí)行流:"<<endl; </p><p>  for(i=0;i<total;i++)</p><p><b>  { </b></p><p>  cout<<pcbs[queue[i]].name<<&q

49、uot; ";</p><p>  cout<<endl;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //顯示</b></p><p>  void version(

50、) </p><p><b>  { </b></p><p>  cout<<"   /********************* 進(jìn)程調(diào)度 ********************/ "; </p><p>  cout<<endl<<endl; }</p><p&

51、gt;<b>  //主函數(shù) </b></p><p>  void main() </p><p><b>  { </b></p><p><b>  int flag;</b></p><p>  version();</p><p>  init

52、ial();</p><p>  flag=readData();</p><p>  if(flag==1)</p><p>  { FIFO(); </p><p><b>  init();</b></p><p>  privilege(); </p><p>

53、<b>  init();</b></p><p><b>  timer(); </b></p><p><b>  } </b></p><p><b>  }</b></p><p><b> ?。?)運(yùn)行結(jié)果:</b><

54、/p><p>  輸入進(jìn)程流文件名1.txt即可得出以下輸出結(jié)果:</p><p><b>  六 參考書:</b></p><p>  計(jì)算機(jī)操作系統(tǒng)(第三版)------西安電子科技大學(xué)出版社</p><p>  C語言程序設(shè)計(jì)----------------------北京郵電大學(xué)出版社</p>&l

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論