2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  操作系統(tǒng)</b></p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  XX大學(xué) 計(jì)算機(jī)科學(xué)與教育軟件學(xué)院</p><p>  計(jì)算機(jī)系 12級(jí)計(jì)算機(jī)專業(yè)*班</p><p><b>  2015年1月8日</b></p>

2、;<p><b>  一、設(shè)計(jì)目的</b></p><p>  學(xué)習(xí)完《操作系統(tǒng)》課程后,進(jìn)行的一次全面的綜合訓(xùn)練,通過課程設(shè)計(jì),讓更好地掌握操作系統(tǒng)的原理及實(shí)現(xiàn)方法,加深對(duì)操作系統(tǒng)基礎(chǔ)理論和重要算法的理解,加強(qiáng)動(dòng)手能力。</p><p><b>  二、設(shè)計(jì)要求</b></p><p>  從課程設(shè)計(jì)的目的

3、出發(fā),通過設(shè)計(jì)工作的各個(gè)環(huán)節(jié),達(dá)到以下要求:兩人一組,每組從所給題目中任選一個(gè)(如自擬題目,需經(jīng)指導(dǎo)教師同意),每個(gè)學(xué)生必須獨(dú)立完成課程設(shè)計(jì),不能相互抄襲,同組者文檔不能相同;設(shè)計(jì)完成后,將所完成的工作交由指導(dǎo)教師檢查;要求寫出一份詳細(xì)的設(shè)計(jì)報(bào)告。</p><p><b>  三、設(shè)計(jì)內(nèi)容</b></p><p>  課題、處理機(jī)調(diào)度程序:選擇一個(gè)調(diào)度算法,實(shí)現(xiàn)處理機(jī)

4、調(diào)度。</p><p>  設(shè)計(jì)目的:在多道程序和多任務(wù)系統(tǒng)中,系統(tǒng)內(nèi)同時(shí)處于就緒狀態(tài)的進(jìn)程可能有若干個(gè)。也就是說能運(yùn)行的進(jìn)程數(shù)大于處理機(jī)個(gè)數(shù)。為了使系統(tǒng)中的進(jìn)程能有條不紊地工作,必須選用某種調(diào)度策略,選擇一進(jìn)程占用處理機(jī)。要求設(shè)計(jì)一個(gè)模擬處理機(jī)調(diào)度算法,以鞏固和加深處理機(jī)調(diào)度的概念。</p><p><b>  四、設(shè)計(jì)要求</b></p><p

5、>  1)進(jìn)程調(diào)度算法包括:時(shí)間片輪轉(zhuǎn)法,短作業(yè)優(yōu)先算法,動(dòng)態(tài)優(yōu)先級(jí)算法。</p><p><b>  2)可選擇進(jìn)程數(shù)量</b></p><p>  3)本程序包括三種算法,用C語言實(shí)現(xiàn),執(zhí)行時(shí)在主界面選擇算法(可用函數(shù)實(shí)現(xiàn))(進(jìn)程數(shù),運(yùn)行時(shí)間,優(yōu)先數(shù)由隨機(jī)函數(shù)產(chǎn)生)執(zhí)行,顯示結(jié)果。</p><p>  五、設(shè)計(jì)思路及算法思想</

6、p><p>  1、建立循環(huán)鏈。節(jié)點(diǎn)情況如下:</p><p>  struct pcb</p><p><b>  {</b></p><p>  char id; //進(jìn)程標(biāo)識(shí)數(shù)</p><p>  int arrive_time; //進(jìn)程的到達(dá)時(shí)間</p&g

7、t;<p>  int run_time; //進(jìn)程運(yùn)行時(shí)間</p><p>  int priority; //進(jìn)程優(yōu)先級(jí)數(shù)</p><p>  int finish_time; //進(jìn)程完成時(shí)間</p><p>  int cycling_time; //進(jìn)程周轉(zhuǎn)時(shí)間</p><p>

8、;  float right_cycling_time;//帶權(quán)周轉(zhuǎn)時(shí)間</p><p>  int backup_run_time; //備份進(jìn)程運(yùn)行時(shí)間</p><p>  int back_priority; //備份進(jìn)程優(yōu)先級(jí)數(shù)</p><p>  struct pcb *next;</p><p><b>  };&

9、lt;/b></p><p>  注:進(jìn)程運(yùn)行在具體調(diào)度算法里會(huì)改變(減到零),在輸出時(shí)需要數(shù)出運(yùn)行時(shí)間所以要備份。優(yōu)先級(jí)數(shù)同理。</p><p>  2、通過循環(huán)鏈循環(huán)輸出,按具體的算法輸出響應(yīng)的節(jié)點(diǎn)。</p><p>  1)程序的總體結(jié)構(gòu)如下圖1.0 </p><p>  創(chuàng)建(進(jìn)程)循環(huán)鏈,初始化循環(huán)鏈(輸入進(jìn)程的相關(guān)信息),選

10、擇進(jìn)程調(diào)度算法退出,執(zhí)行所選擇的調(diào)度算法(輸出調(diào)度結(jié)果),銷毀循環(huán)鏈。</p><p><b>  圖1.0</b></p><p>  2)設(shè)計(jì)實(shí)現(xiàn)算法的主要思想如下圖1.1</p><p>  設(shè)置控制循環(huán)條件,進(jìn)程運(yùn)行時(shí)間不為零,執(zhí)行進(jìn)程,該進(jìn)程運(yùn)行時(shí)間減一(短作業(yè)優(yōu)先法的進(jìn)程運(yùn)行時(shí)間減至零),控制條件清零,指向下一進(jìn)程,該進(jìn)程運(yùn)行時(shí)間為

11、零,控制條件加一。</p><p><b>  圖1.1</b></p><p>  2.1)時(shí)間片輪轉(zhuǎn)算法詳細(xì)設(shè)計(jì)如下圖1.2</p><p>  進(jìn)程循環(huán)占用時(shí)間片,當(dāng)運(yùn)行時(shí)間為0退出循環(huán)。</p><p><b>  圖1.2</b></p><p>  2.2)動(dòng)態(tài)優(yōu)

12、先法詳細(xì)設(shè)計(jì)如下圖1.3</p><p>  優(yōu)先級(jí)最高的進(jìn)程用完一個(gè)時(shí)間片,運(yùn)行時(shí)間減1,優(yōu)先級(jí)加1,再執(zhí)行優(yōu)先級(jí)最高的進(jìn)程。</p><p><b>  圖1.3</b></p><p>  2.3)短作業(yè)優(yōu)先法詳細(xì)設(shè)計(jì)如下圖1.4</p><p>  運(yùn)行時(shí)間最短的進(jìn)程先執(zhí)行完,再執(zhí)行下一個(gè)運(yùn)行時(shí)間最短的進(jìn)程。&l

13、t;/p><p><b>  圖1.4</b></p><p>  六、程序設(shè)計(jì)的輸出結(jié)果</p><p><b>  1)時(shí)間片輪轉(zhuǎn)法</b></p><p><b>  圖1.5</b></p><p><b>  2)動(dòng)態(tài)優(yōu)先法</b&

14、gt;</p><p><b>  圖1.6</b></p><p><b>  3)短作業(yè)優(yōu)先法</b></p><p><b>  圖1.7</b></p><p><b>  七、程序代碼</b></p><p>  #inc

15、lude<stdio.h></p><p>  #include<malloc.h></p><p>  #include<time.h></p><p>  #include<stdlib.h> </p><p>  #define N 5</p><p>  stru

16、ct pcb</p><p><b>  {</b></p><p>  char id; //進(jìn)程標(biāo)識(shí)數(shù)</p><p>  int arrive_time; //進(jìn)程的到達(dá)時(shí)間</p><p>  int run_time; //進(jìn)程運(yùn)行時(shí)間</p>&l

17、t;p>  int priority; //進(jìn)程優(yōu)先級(jí)數(shù)</p><p>  int finish_time; //進(jìn)程完成時(shí)間</p><p>  int cycling_time; //進(jìn)程周轉(zhuǎn)時(shí)間</p><p>  float right_cycling_time;//帶權(quán)周轉(zhuǎn)時(shí)間</p><p> 

18、 int backup_run_time; //備份進(jìn)程運(yùn)行時(shí)間</p><p>  int back_priority; //備份進(jìn)程優(yōu)先級(jí)數(shù)</p><p>  struct pcb *next;</p><p><b>  };</b></p><p>  pcb *creat_process(int);

19、 //創(chuàng)建進(jìn)程</p><p>  void show_pcb(pcb *,int); //輸出進(jìn)程信息</p><p>  void delete_pcb(pcb *);//刪除鏈表</p><p>  void Round_Robin(pcb *,int); //時(shí)間片輪轉(zhuǎn)法</p><

20、;p>  void Shortest_Job_First(pcb *,int); //短作業(yè)優(yōu)先法</p><p>  void Dynamic_priority(pcb *,int); //動(dòng)態(tài)優(yōu)先法</p><p>  //----------------------------------------------------------------------</p&

21、gt;<p>  int main()</p><p><b>  {</b></p><p>  pcb *head;</p><p>  int num;//進(jìn)程數(shù)</p><p>  srand(int(time(0)));</p><p>  int option,ch;

22、</p><p><b>  do </b></p><p><b>  { </b></p><p>  num=rand()%N+1;</p><p>  printf("創(chuàng)建的進(jìn)程數(shù): %d\n",num);</p><p>  printf(&

23、quot;--------------------------------------\n");</p><p>  printf("------請(qǐng)輸入對(duì)應(yīng)的數(shù)字選擇相應(yīng)的進(jìn)程調(diào)度算法-----\n"); </p><p>  printf("------ 1 為時(shí)間片輪轉(zhuǎn)法調(diào)度 -------\n");

24、 </p><p>  printf("------ 2 為動(dòng)態(tài)優(yōu)先級(jí)調(diào)度 -------\n"); </p><p>  printf("------ 3 為短作業(yè)優(yōu)先 -------\n"); </p><p>  printf(&qu

25、ot;------ 0 則退出 -------\n"); </p><p>  printf("---------------------------------------\n");</p><p>  printf("--請(qǐng)輸入數(shù)字選擇調(diào)度算法(有效數(shù)字0~3) : "); &

26、lt;/p><p>  while(1) </p><p><b>  { </b></p><p>  scanf("%d",&option);</p><p>  printf("---------------------------------------\n")

27、;</p><p>  if(option!=0&&option!=1&&option!=2&&option!=3) </p><p>  printf("----錯(cuò)誤! 請(qǐng)重新選擇調(diào)度算法(0~3) : \n"); </p><p><b>  else </b>&l

28、t;/p><p><b>  break; </b></p><p><b>  } </b></p><p>  switch (option) </p><p><b>  { </b></p><p>  case 0: printf(&qu

29、ot;---運(yùn)行結(jié)束---\n"); break; </p><p>  case 1: printf("--------對(duì)進(jìn)程按時(shí)間片輪轉(zhuǎn)法調(diào)度--------\n"); </p><p>  head=creat_process(num);</p><p>  show_pcb(head,num);</p><

30、;p>  printf("\n");</p><p>  Round_Robin(head,num);</p><p>  show_pcb(head,num);</p><p>  printf("--------------------------------------\n");</p><p&

31、gt;<b>  break; </b></p><p>  case 2: printf("--------對(duì)進(jìn)程按動(dòng)態(tài)優(yōu)先級(jí)調(diào)度----------\n"); </p><p>  head=creat_process(num);</p><p>  show_pcb(head,num);</p>

32、<p>  printf("\n");</p><p>  Dynamic_priority(head,num);</p><p>  show_pcb(head,num);</p><p>  printf("--------------------------------------\n");</p>

33、<p><b>  break; </b></p><p>  case 3: printf("--------對(duì)進(jìn)程按短作業(yè)優(yōu)先調(diào)度----------\n"); </p><p>  head=creat_process(num);</p><p>  show_pcb(head,num);</

34、p><p>  printf("\n");</p><p>  Shortest_Job_First(head,num);</p><p>  show_pcb(head,num);</p><p>  printf("--------------------------------------\n");&

35、lt;/p><p><b>  break; </b></p><p><b>  }</b></p><p>  delete_pcb(head);</p><p>  printf("\n是否繼續(xù)---是(輸入1)否(輸入0) : "); </p><p&

36、gt;<b>  while(1) </b></p><p><b>  { </b></p><p>  scanf("%d",&ch); </p><p>  if(ch!=0&&ch!=1) </p><p>  printf("

37、\n\n輸入錯(cuò)誤!是否繼續(xù)是(輸入1)否(輸入0) : "); </p><p><b>  else </b></p><p><b>  break; </b></p><p><b>  } </b></p><p>  printf("\n&qu

38、ot;);</p><p>  printf("--------------------------------------\n");</p><p>  }while(ch==1); </p><p><b>  return 0;</b></p><p><b>  }</b>

39、;</p><p>  //-----------------------------------------------------------------------</p><p>  pcb *creat_process(int num) //創(chuàng)建進(jìn)程</p><p><b>  {</b></p><p>

40、  pcb *h,*p;</p><p>  h=(struct pcb*)malloc(sizeof(struct pcb));</p><p><b>  p=h;</b></p><p>  for(int i=0;i<num;i++)</p><p><b>  {</b></p

41、><p>  p->id='A'+i;</p><p>  p->arrive_time=0;//所有進(jìn)程到達(dá)時(shí)間為0</p><p>  p->run_time=rand()%N+1;</p><p>  p->backup_run_time=p->run_time; //備份運(yùn)行時(shí)間&

42、lt;/p><p>  p->priority=rand()%N+1;</p><p>  p->back_priority=p->priority; //備份進(jìn)程優(yōu)先級(jí)數(shù)</p><p>  p->finish_time=0;</p><p>  p->cycling_time=0;</p>&l

43、t;p>  p->right_cycling_time=0.0000;</p><p>  if(i<num-1)</p><p><b>  {</b></p><p>  p->next=(struct pcb*)malloc(sizeof(struct pcb));</p><p>  p=

44、p->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  p->next=h;</p><p><b>  return h;</b></p><p><b>  }<

45、;/b></p><p>  //-----------------------------------------------------------------</p><p>  void show_pcb(pcb *h,int num) //輸出進(jìn)程信息</p><p><b>  {</b></p><p&

46、gt;  pcb *p,*q;</p><p>  float cycling_time=0,right_cycling_time=0,average_cycling_time,average_right_cycling_time;</p><p><b>  p=h;</b></p><p>  printf("進(jìn)程id 到達(dá)時(shí)間

47、 運(yùn)行時(shí)間 優(yōu)先級(jí)數(shù) 完成時(shí)間 周轉(zhuǎn)時(shí)間 帶權(quán)周轉(zhuǎn)時(shí)間\n");</p><p><b>  do</b></p><p><b>  {</b></p><p>  p->cycling_time=p->finish_time - p->arrive_time; </p>

48、;<p>  cycling_time += p->cycling_time;</p><p>  p->right_cycling_time=float(p->cycling_time) /float( p->backup_run_time);</p><p>  right_cycling_time += p->right_cycling_t

49、ime;</p><p>  printf("%2c %8d %10d %9d %10d %9d %13f\n",p->id,p->arrive_time,p->backup_run_time,p->back_priority,p->finish_time,p->cycling_time,p->right_cycling_time);</p>

50、;<p>  p=p->next; </p><p>  }while(p!=h);</p><p>  printf("--------------------------------------\n");</p><p>  average_cycling_time = cycling_time / float(num)

51、;</p><p>  average_right_cycling_time = right_cycling_time / float(num);</p><p>  printf("平均周轉(zhuǎn)時(shí)間: %f\n",average_cycling_time);</p><p>  printf("平均帶權(quán)周轉(zhuǎn)時(shí)間: %f\n",a

52、verage_right_cycling_time);</p><p><b>  }</b></p><p>  //--------------------------------------------------------</p><p>  void delete_pcb(pcb *h) //刪除鏈表</p><

53、p><b>  {</b></p><p>  pcb *p,*q;</p><p><b>  p=h;</b></p><p>  q=h->next;</p><p>  while(p!=q)</p><p><b>  {</b>&

54、lt;/p><p>  p->next=q->next;</p><p><b>  free(q);</b></p><p>  q=p->next;</p><p><b>  }</b></p><p><b>  free(p);</b&

55、gt;</p><p><b>  }</b></p><p>  //-----------------------------------------------</p><p>  void Round_Robin(pcb *h,int num) //時(shí)間片輪轉(zhuǎn)法</p><p><b>  {<

56、/b></p><p>  printf(" -----具體調(diào)度情況如下-----\n");</p><p><b>  pcb *p;</b></p><p><b>  p=h;</b></p><p>  int i=1,j=1;</p><

57、p><b>  do</b></p><p><b>  {</b></p><p>  if(p->run_time==0) </p><p><b>  i++; </b></p><p><b>  else</b></

58、p><p><b>  {</b></p><p>  printf("時(shí)間片%2d--->當(dāng)前運(yùn)行進(jìn)程 %c\n",j++,p->id);</p><p>  p->run_time--;</p><p>  if(p->run_time==0)</p><

59、p>  p->finish_time=j-1; //進(jìn)程結(jié)束時(shí)間</p><p><b>  i=0;</b></p><p><b>  }</b></p><p>  p=p->next;</p><p>  }while(i!=num);</p><p

60、><b>  }</b></p><p>  //-----------------------------------------</p><p>  void Shortest_Job_First(pcb *h,int num) //短作業(yè)優(yōu)先法</p><p><b>  {</b></p>

61、<p>  printf(" -----具體調(diào)度情況如下-----\n");</p><p>  pcb *p,*q;</p><p><b>  p=h;</b></p><p>  q=h->next;</p><p>  int i=1,j=1;</p><

62、;p><b>  do</b></p><p><b>  {</b></p><p>  q=p->next;</p><p>  if(p->run_time==0)</p><p><b>  i++; </b></p><p

63、><b>  else</b></p><p><b>  {</b></p><p>  while(q!=p)</p><p><b>  {</b></p><p>  if(q->run_time!=0)</p><p>  if(

64、p->run_time > q->run_time)</p><p><b>  p=q;</b></p><p>  q=q->next;</p><p><b>  }</b></p><p>  while(p->run_time!=0)</p>&

65、lt;p><b>  {</b></p><p>  printf("時(shí)間片%2d--->當(dāng)期運(yùn)行進(jìn)程 %c\n",j++,p->id);</p><p>  p->run_time--;</p><p><b>  }</b></p><p>  p-

66、>finish_time=j-1; //進(jìn)程結(jié)束時(shí)間</p><p><b>  i=0;</b></p><p><b>  }</b></p><p>  p=p->next;</p><p>  }while(i!=num);</p><p><

67、b>  }</b></p><p>  //-------------------------------------------</p><p>  void Dynamic_priority(pcb *h,int num) //動(dòng)態(tài)優(yōu)先法</p><p><b>  {</b></p><p>  

68、printf(" -----具體調(diào)度情況如下-----\n");</p><p>  pcb *p,*q,*f;</p><p><b>  p=h;</b></p><p>  int i=1,j=1;</p><p><b>  do</b></p><

69、;p><b>  {</b></p><p>  q=p->next;</p><p>  if(p->run_time==0)</p><p><b>  i++; </b></p><p><b>  else</b></p><p

70、><b>  {</b></p><p>  while(q!=p)</p><p><b>  {</b></p><p>  if(q->run_time!=0)</p><p>  if((p->priority > q->priority) )</p&g

71、t;<p><b>  p=q;</b></p><p>  q=q->next;</p><p><b>  }</b></p><p>  printf("時(shí)間片%2d--->當(dāng)前運(yùn)行進(jìn)程 %c ---當(dāng)前優(yōu)先等級(jí): %d\n",j++,p->id,p->pri

72、ority);</p><p>  p->run_time--;</p><p>  p->priority++;</p><p>  /*f=p->next;</p><p>  while(p!=f)</p><p><b>  {</b></p><

73、;p>  if(f->run_time!=0)</p><p>  f->priority--;</p><p>  f=f->next;</p><p><b>  }*/</b></p><p>  p->finish_time=j-1; //進(jìn)程結(jié)束時(shí)間</p>

溫馨提示

  • 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)論