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

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  姓名: </p><p>  學(xué)號(hào): </p><p>  班級(jí): 11計(jì)科 1班 </p><p>  指導(dǎo)老師: </p><p>  時(shí)間: 2014 年1月3日 </p>&

2、lt;p><b>  目錄</b></p><p>  任務(wù)一、進(jìn)程創(chuàng)建、控制與撤消1</p><p><b>  一、 實(shí)驗(yàn)?zāi)康?</b></p><p><b>  二、 實(shí)驗(yàn)內(nèi)容1</b></p><p>  三、 主要的函數(shù)解釋1</p>&

3、lt;p><b>  四、 源代碼1</b></p><p><b>  五、 運(yùn)行結(jié)果7</b></p><p>  六、 心得與體會(huì)9</p><p>  任務(wù)二、單處理機(jī)系統(tǒng)的進(jìn)程調(diào)度9</p><p><b>  一、實(shí)驗(yàn)?zāi)康?</b></p>

4、;<p><b>  二、實(shí)驗(yàn)內(nèi)容9</b></p><p>  三、 主要的函數(shù)解釋10</p><p><b>  四、 源代碼10</b></p><p>  五、 運(yùn)行結(jié)果16</p><p>  六、 心得與體會(huì)17</p><p>  任務(wù)

5、三、基本存儲(chǔ)器管理17</p><p>  一、 實(shí)驗(yàn)?zāi)康?7</p><p>  二、 實(shí)驗(yàn)內(nèi)容18</p><p>  三、主要的函數(shù)解釋18</p><p><b>  四、 源代碼18</b></p><p>  五、 運(yùn)行結(jié)果25</p><p>  

6、六、 心得與體會(huì)26</p><p>  任務(wù)四、請(qǐng)求分頁(yè)存儲(chǔ)管理(虛擬存儲(chǔ))26</p><p><b>  一、實(shí)驗(yàn)?zāi)康?6</b></p><p>  二、 實(shí)驗(yàn)內(nèi)容26</p><p>  三、主要的函數(shù)解釋27</p><p><b>  四、 源代碼27</

7、b></p><p>  五、 運(yùn)行結(jié)果32</p><p>  六、 心得與體會(huì)32</p><p>  任務(wù)五、死鎖的避免33</p><p>  一、 實(shí)驗(yàn)?zāi)康?3</p><p><b>  二、實(shí)驗(yàn)內(nèi)容33</b></p><p>  三、主要的函

8、數(shù)解釋34</p><p><b>  四、源代碼34</b></p><p>  五、 運(yùn)行結(jié)果40</p><p>  六、心得與體會(huì)40</p><p>  任務(wù)六、磁盤(pán)空間的分配與回收41</p><p>  一、 實(shí)驗(yàn)?zāi)康?1</p><p>  三、

9、 主要的函數(shù)解釋42</p><p><b>  四、 源代碼42</b></p><p>  五、 運(yùn)行結(jié)果45</p><p>  六、 心得與體會(huì)46</p><p>  任務(wù)七、文件管理47</p><p><b>  一、實(shí)驗(yàn)?zāi)康?7</b></p

10、><p><b>  二、實(shí)驗(yàn)內(nèi)容47</b></p><p>  三、主要的函數(shù)解釋47</p><p><b>  四、源代碼48</b></p><p><b>  五、運(yùn)行結(jié)果64</b></p><p>  六、 心得與體會(huì)65</

11、p><p>  任務(wù)一、進(jìn)程創(chuàng)建、控制與撤消</p><p><b>  實(shí)驗(yàn)?zāi)康?lt;/b></p><p>  加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別;</p><p>  進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的概念,區(qū)別順序執(zhí)行和并發(fā)執(zhí)行;</p><p>  分析進(jìn)程爭(zhēng)用臨界資源的現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法;

12、</p><p><b>  實(shí)驗(yàn)內(nèi)容</b></p><p>  在WINDOWS環(huán)境下模擬實(shí)驗(yàn):</p><p>  1、編寫(xiě)一程序,來(lái)模擬進(jìn)程的創(chuàng)建和撤消,要求通過(guò)終端鍵盤(pán)輸入三、四 </p><p>  業(yè)的名稱(chēng)、大小、優(yōu)先級(jí)等。系統(tǒng)為它創(chuàng)建進(jìn)程,并把進(jìn)程控制塊PCB的內(nèi)容送到終端顯示器上輸出。</p&g

13、t;<p>  2、同時(shí)模擬內(nèi)存空間為作業(yè)分配內(nèi)存空間,并把結(jié)果用圖形形象地表示出</p><p>  來(lái),同樣通過(guò)終端輸出。按進(jìn)程的優(yōu)先級(jí)的順序撤消進(jìn)程,同時(shí)通過(guò)終端顯示PCB的撤消過(guò)程和內(nèi)存的 釋放過(guò)程。</p><p><b>  主要的函數(shù)解釋</b></p><p>  create()//創(chuàng)建新的進(jìn)程</p&g

14、t;<p>  void viewrun()//查看運(yùn)行進(jìn)程</p><p>  void huanchu()//換出某個(gè)進(jìn)程</p><p>  void kill()//殺死運(yùn)行進(jìn)程</p><p>  void tongxun()//進(jìn)程之間通信</p><p>  main ()//主函數(shù)</p><

15、p><b>  源代碼</b></p><p>  #include "conio.h"</p><p>  #include "stdio.h"</p><p>  #include "stdlib.h"</p><p>  struct jinchen

16、g_type</p><p><b>  { </b></p><p><b>  int pid;</b></p><p>  int youxian;</p><p>  int daxiao;</p><p><b>  int msg;</b>

17、</p><p><b>  int live;</b></p><p><b>  };</b></p><p>  struct jincheng_type neicun[20],waicun[20];</p><p>  int shumu=0,pid_1;</p><p&

18、gt;<b>  create()</b></p><p><b>  {</b></p><p>  if(shumu>=20)</p><p><b>  {</b></p><p>  printf("\n 內(nèi)存已滿(mǎn),請(qǐng)先結(jié)束或換出進(jìn)程\n");

19、</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("\n 請(qǐng)輸入新進(jìn)程的 pid\n");</p><p>  scanf

20、("%d",&neicun[shumu+1].pid);</p><p>  printf("\n 請(qǐng)輸入新的進(jìn)程的優(yōu)先級(jí)\n");</p><p>  scanf("%d",&neicun[shumu+1].youxian);</p><p>  printf("\n 請(qǐng)輸入新的

21、進(jìn)程的大小\n");</p><p>  scanf("%d",&neicun[shumu+1].daxiao);</p><p>  printf("\n 請(qǐng)輸入新的進(jìn)程的消息\n");</p><p>  scanf("%d",&neicun[shumu+1].msg);<

22、;/p><p>  neicun[shumu+1].live=1;</p><p><b>  shumu++;</b></p><p><b>  }</b></p><p>  return neicun[shumu-1].live;</p><p><b>  }

23、</b></p><p>  void viewrun()</p><p><b>  {</b></p><p><b>  int vpid;</b></p><p>  printf("\n 請(qǐng)輸入進(jìn)程的pid\n");</p><p>

24、  scanf("%d",&vpid);</p><p>  if(vpid>0&&vpid<=20&&neicun[vpid].live==1)</p><p><b>  {</b></p><p>  printf("\n進(jìn)程的pid是:%d\n"

25、,neicun[vpid].pid);</p><p>  printf("\n進(jìn)程的優(yōu)先級(jí)是:%d\n",neicun[vpid].youxian);</p><p>  printf("\n進(jìn)程的大小是:%d\n",neicun[vpid].daxiao);</p><p>  printf("\n進(jìn)程的消息是:

26、%d\n",neicun[vpid].msg);</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {</b></p><p>  printf("\n 所查看運(yùn)行進(jìn)程不存在\n")

27、;</p><p><b>  }</b></p><p>  printf("請(qǐng)按回車(chē)退出查看\n");</p><p>  vpid=getch();</p><p><b>  }</b></p><p>  void huanchu()</p

28、><p><b>  {</b></p><p>  int pid1,pid2;</p><p><b>  char c;</b></p><p>  printf("\n 請(qǐng)輸入第一個(gè)替換進(jìn)程的pid\n");</p><p>  scanf(&quo

29、t;%d",&pid1);</p><p>  printf("\n 請(qǐng)輸入第二個(gè)替換進(jìn)程的pid\n");</p><p>  scanf("%d",&pid2);</p><p>  if(pid1>0&&pid1<=20&&neicun[pid1].l

30、ive==1)</p><p><b>  {</b></p><p>  if(neicun[pid1].youxian>neicun[pid2].youxian)</p><p><b>  { </b></p><p>  waicun[20].pid=neicun[pid

31、1].pid;</p><p>  waicun[20].youxian=neicun[pid1].youxian;</p><p>  waicun[20].daxiao=neicun[pid1].daxiao;</p><p>  waicun[20].msg=neicun[pid1].msg;</p><p>  neicun[pid1

32、].pid=neicun[pid2].pid;</p><p>  neicun[pid1].youxian=neicun[pid2].youxian;</p><p>  neicun[pid1].daxiao=neicun[pid2].daxiao;</p><p>  neicun[pid1].msg=neicun[pid2].msg;</p>

33、<p>  neicun[pid2].pid=waicun[20].pid;</p><p>  neicun[pid2].youxian=waicun[20].youxian;</p><p>  neicun[pid2].daxiao=waicun[20].daxiao;</p><p>  neicun[pid2].msg=waicun[20].ms

34、g;</p><p>  printf("\n 替換完成\n");</p><p>  printf("\n 被替換進(jìn)程的pid是:%d\n",waicun[20].pid);</p><p>  printf("\n 被替換進(jìn)程的youxian是:%d\n",waicun[20].youxian);<

35、;/p><p>  printf("\n 被替換進(jìn)程的daxiao是:%d\n",waicun[20].daxiao);</p><p>  printf("\n 被替換進(jìn)程的msg是:%d\n",waicun[20].msg);</p><p><b>  }</b></p><p>

36、;<b>  else</b></p><p><b>  {</b></p><p>  printf("\n進(jìn)程優(yōu)先級(jí)不夠大");</p><p><b>  }</b></p><p><b>  }</b></p>

37、<p><b>  else</b></p><p><b>  {</b></p><p>  printf("所查看運(yùn)行進(jìn)程不存在");</p><p><b>  }</b></p><p>  printf("請(qǐng)按回車(chē)退出換出進(jìn)

38、程\n");</p><p>  c=getche();</p><p><b>  }</b></p><p>  void kill()</p><p><b>  {</b></p><p><b>  int kpid;</b><

39、/p><p>  printf("\n 請(qǐng)輸入進(jìn)程的pid\n");</p><p>  scanf("%d",&kpid);</p><p>  if(kpid>0&&kpid<20&&neicun[kpid].live==neicun[kpid].live)</p>

40、;<p><b>  return;</b></p><p><b>  }</b></p><p>  void tongxun()</p><p><b>  {</b></p><p>  int tpid1,tpid2;</p><p&

41、gt;  int buffer;</p><p><b>  char d;</b></p><p>  printf("\n請(qǐng)輸入通信源進(jìn)程pid\n");</p><p>  scanf("%d",&tpid1);</p><p>  printf("\n請(qǐng)輸

42、入通信目的進(jìn)程pid\n");</p><p>  scanf("%d",&tpid2);</p><p>  if(tpid1>0&&tpid1<20&&neicun[tpid1].live==1)</p><p><b>  { </b></

43、p><p>  buffer=neicun[tpid1].msg;</p><p>  neicun[tpid1].msg=neicun[tpid2].msg;</p><p>  neicun[tpid2].msg=buffer;</p><p>  printf("\n源進(jìn)程的信息是:%d\n",neicun[tpid1]

44、.msg);</p><p>  printf("\n目的進(jìn)程的信息是:%d\n",neicun[tpid2].msg);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></

45、p><p>  printf("\n所查看運(yùn)行進(jìn)程不存在\n");</p><p><b>  } </b></p><p>  printf("\n請(qǐng)按回車(chē)退出進(jìn)程通信\n");</p><p>  d=getch();</p><p><b&

46、gt;  }</b></p><p><b>  main ()</b></p><p><b>  {</b></p><p>  int n,m,i;</p><p><b>  char a;</b></p><p><b>

47、  n=1;</b></p><p>  while(n==1)</p><p><b>  {</b></p><p>  system("cls");</p><p>  printf("\n***********************************")

48、;</p><p>  printf("\n* 進(jìn)程演示系統(tǒng) *");</p><p>  printf("\n***********************************");</p><p>  printf("\n 1.創(chuàng)建新的進(jìn)程 2.查看運(yùn)行進(jìn)程 &q

49、uot;);</p><p>  printf("\n 3.換出某個(gè)進(jìn)程 4.殺死運(yùn)行進(jìn)程 ");</p><p>  printf("\n 5.進(jìn)程之間通信 6.退出 ");</p><p>  printf("\n**********************************

50、*");</p><p>  printf("\n請(qǐng)選擇(1~6)");</p><p>  a=getch();</p><p><b>  switch(a)</b></p><p><b>  { </b></p><p>  case&

51、#39;1': create();</p><p><b>  break;</b></p><p>  case'2': viewrun();</p><p><b>  break;</b></p><p>  case'3': huanchu();<

52、;/p><p><b>  break;</b></p><p>  case'4': kill();</p><p><b>  break;</b></p><p>  case'5': tongxun();</p><p><b>

53、  break;</b></p><p>  case'6': exit(0);</p><p>  default:n=0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }

54、</b></p><p><b>  運(yùn)行結(jié)果</b></p><p><b>  1、創(chuàng)建新進(jìn)程</b></p><p><b>  查看運(yùn)行進(jìn)程</b></p><p><b>  換出進(jìn)程</b></p><p>

55、;<b>  心得與體會(huì)</b></p><p>  任務(wù)一的實(shí)驗(yàn)讓我對(duì)進(jìn)程有著更加的理解,知道了進(jìn)程在我們玩電腦的時(shí)候扮演著重要的角色,進(jìn)程有著搶占的方式等等,對(duì)進(jìn)程的創(chuàng)建、控制、撤銷(xiāo)有著更深的理解,在本次實(shí)驗(yàn)中碰到了很多不太理解的東西,通過(guò)問(wèn)在網(wǎng)上收集資料以及老師和同學(xué)的幫助,本次實(shí)驗(yàn)的基本問(wèn)題解決了。</p><p>  任務(wù)二、單處理機(jī)系統(tǒng)的進(jìn)程調(diào)度</

56、p><p><b>  一、實(shí)驗(yàn)?zāi)康?lt;/b></p><p>  1、加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別</p><p>  2、深入了解系統(tǒng)如何組織進(jìn)程,創(chuàng)建進(jìn)程</p><p>  3、進(jìn)一步認(rèn)識(shí)如何實(shí)現(xiàn)處理機(jī)調(diào)度。</p><p><b>  二、實(shí)驗(yàn)內(nèi)容</b>&

57、lt;/p><p>  從下面三個(gè)調(diào)度算法中,選擇一個(gè)調(diào)度算法來(lái)實(shí)現(xiàn)進(jìn)程調(diào)度:</p><p>  1、先來(lái)先服務(wù)調(diào)度算法</p><p>  2、優(yōu)先數(shù)調(diào)度算法;</p><p>  3、時(shí)間片輪法調(diào)度算法</p><p>  4、多級(jí)反饋隊(duì)列輪轉(zhuǎn)調(diào)度算法</p><p>  注:本次實(shí)驗(yàn)我選的是

58、第二種優(yōu)先數(shù)調(diào)度算法;</p><p><b>  主要的函數(shù)解釋</b></p><p>  void sort() /* 建立對(duì)進(jìn)程進(jìn)行優(yōu)先級(jí)排列函數(shù)*/</p><p>  void input() /* 建立進(jìn)程控制塊函數(shù)*/ </p><p>  void disp(PCB * pr) /*建立進(jìn)程顯示函數(shù),

59、用于顯示當(dāng)前進(jìn)程*/ </p><p>  void check() /* 建立進(jìn)程查看函數(shù) */ </p><p>  void destroy() /*建立進(jìn)程撤消函數(shù)(進(jìn)程運(yùn)行結(jié)束,撤消進(jìn)程)*/ </p><p>  void running() /* 建立進(jìn)程就緒函數(shù)(進(jìn)程運(yùn)行時(shí)間到,置就緒狀態(tài)*/ </p><p>  vo

60、id main() /*主函數(shù)*/ </p><p><b>  源代碼</b></p><p>  #include "stdio.h" </p><p>  #include <stdlib.h></p><p>  #include <conio.h> </p

61、><p>  #define getpch(type) (type*)malloc(sizeof(type)) </p><p>  #define NULL 0 </p><p>  struct pcb </p><p>  { /* 定義進(jìn)程控制塊PCB */ </p><p>  char name[10

62、]; </p><p>  char state; </p><p>  int super; </p><p>  int ntime; </p><p>  int rtime; </p><p>  struct pcb* link; </p><p>  }*re

63、ady=NULL,*p; </p><p>  typedef struct pcb PCB; </p><p>  void sort() /* 建立對(duì)進(jìn)程進(jìn)行優(yōu)先級(jí)排列函數(shù)*/ </p><p><b>  { </b></p><p>  PCB *first, *second; </p>&

64、lt;p>  int insert=0; </p><p>  if((ready==NULL)||((p->super)>(ready->super))) /*優(yōu)先級(jí)最大者,插入隊(duì)首 */ </p><p><b>  { </b></p><p>  p->link=ready; ready=p; &

65、lt;/p><p><b>  } </b></p><p>  else /* 進(jìn)程比較優(yōu)先級(jí),插入適當(dāng)?shù)奈恢弥?/ </p><p><b>  { </b></p><p>  first=ready; second=first->link; </p><p&

66、gt;  while(second!=NULL) </p><p><b>  { </b></p><p>  if((p->super)>(second->super)) /*若插入進(jìn)程比當(dāng)前進(jìn)程優(yōu)先數(shù) 大,*/ </p><p>  { /*插入到當(dāng)前進(jìn)程前面*/ </p>

67、<p>  p->link=second; </p><p>  first->link=p; </p><p>  second=NULL; </p><p>  insert=1; </p><p><b>  } </b></p><p&g

68、t;  else /* 插入進(jìn)程優(yōu)先數(shù)最低,則插入到隊(duì)尾*/ </p><p><b>  { </b></p><p>  first=first->link; </p><p>  second=second->link; </p><p><b>  } &

69、lt;/b></p><p><b>  } </b></p><p>  if(insert==0) </p><p>  first->link=p; </p><p>  } </p><p><b>  } </b>

70、;</p><p>  void input() /* 建立進(jìn)程控制塊函數(shù)*/ </p><p><b>  { </b></p><p>  int i,num; </p><p>  printf("\n請(qǐng)輸入進(jìn)程數(shù)量:"); </p><p>  scanf

71、("%d",&num); </p><p>  for(i=0;i<num;i++) </p><p><b>  { </b></p><p>  printf("\n 進(jìn)程號(hào)No.%d:\n",i); </p><p>  p=getpch(P

72、CB); </p><p>  printf("\n 輸入進(jìn)程名:"); </p><p>  scanf("%s",p->name); </p><p>  printf("\n 輸入進(jìn)程優(yōu)先數(shù):"); </p><p>  scanf("%

73、d",&p->super); </p><p>  printf("\n 輸入進(jìn)程運(yùn)行時(shí)間:"); </p><p>  scanf("%d",&p->ntime); </p><p>  printf("\n"); </p>&l

74、t;p>  p->rtime=0;p->state='w'; </p><p>  p->link=NULL; </p><p>  sort(); /* 調(diào)用sort函數(shù)*/ </p><p><b>  } </b></p><p><b>

75、;  } </b></p><p>  int space() </p><p><b>  { </b></p><p><b>  int l=0; </b></p><p>  PCB* pr=ready; </p><p>  while(pr

76、!=NULL) </p><p><b>  { </b></p><p><b>  l++; </b></p><p>  pr=pr->link; </p><p><b>  } </b></p><p>  ret

77、urn(l); </p><p><b>  } </b></p><p>  void show() </p><p><b>  { </b></p><p>  printf("\nqname\tstate\tsuper\tndtime\truntime\n");

78、 </p><p><b>  } </b></p><p>  void disp(PCB * pr) /*建立進(jìn)程顯示函數(shù),用于顯示當(dāng)前進(jìn)程*/ </p><p><b>  { </b></p><p>  printf(" %s\t",pr->name);

79、 </p><p>  printf(" %c\t",pr->state); </p><p>  printf(" %d\t",pr->super); </p><p>  printf(" %d\t",pr->ntime); </p><p> 

80、 printf(" %d\t",pr->rtime); </p><p>  printf("\n"); </p><p><b>  } </b></p><p>  void check() /* 建立進(jìn)程查看函數(shù) */ </p><p><b>  {

81、 </b></p><p>  PCB* pr; </p><p>  printf("\n****當(dāng)前正在運(yùn)行的進(jìn)程是:%s",p->name); /*顯示當(dāng)前運(yùn)行進(jìn)程*/ </p><p><b>  show(); </b></p><p>  disp(p);

82、 </p><p>  pr=ready; </p><p>  if(pr==NULL) </p><p>  printf("\n****當(dāng)前就緒隊(duì)列為空!"); </p><p><b>  else </b></p><p><b>  {

83、 </b></p><p>  printf("\n****當(dāng)前就緒隊(duì)列狀態(tài)為:"); /*顯示就緒隊(duì)列狀態(tài)*/ </p><p>  show(); </p><p>  while(pr!=NULL) </p><p><b>  { </b>&l

84、t;/p><p>  disp(pr); </p><p>  pr=pr->link; </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b&g

85、t;</p><p>  void destroy() /*建立進(jìn)程撤消函數(shù)(進(jìn)程運(yùn)行結(jié)束,撤消進(jìn)程)*/ </p><p><b>  { </b></p><p>  printf("\n 進(jìn)程[%s]已完成.\n",p->name); </p><p>  free(p); &

86、lt;/p><p><b>  } </b></p><p>  void running() /* 建立進(jìn)程就緒函數(shù)(進(jìn)程運(yùn)行時(shí)間到,置就緒狀態(tài)*/ </p><p><b>  { </b></p><p>  (p->rtime)++; </p><p>

87、;  if(p->rtime==p->ntime) </p><p>  destroy(); /* 調(diào)用destroy函數(shù)*/ </p><p><b>  else </b></p><p><b>  { </b></p><p>  (p->super)--;

88、 </p><p>  p->state='w'; </p><p>  sort(); /*調(diào)用sort函數(shù)*/ </p><p><b>  } </b></p><p><b>  } </b></p><p>  void

89、main() /*主函數(shù)*/ </p><p><b>  { </b></p><p>  int len,h=0; </p><p>  char ch; </p><p>  input(); </p><p>  len=space(); </p>&l

90、t;p>  while((len!=0)&&(ready!=NULL)) </p><p><b>  { </b></p><p>  ch=getchar(); </p><p><b>  h++; </b></p><p>  printf(&qu

91、ot;\n 當(dāng)前運(yùn)行次數(shù)為:%d \n",h); </p><p>  p=ready; </p><p>  ready=p->link; </p><p>  p->link=NULL; </p><p>  p->state='R'; </p>&l

92、t;p>  check(); </p><p>  running(); </p><p>  printf("\n 按任一鍵繼續(xù)......"); </p><p>  ch=getchar(); </p><p><b>  } </b></p><

93、;p>  printf("\n\n 進(jìn)程已經(jīng)完成.\n"); </p><p>  ch=getchar(); </p><p><b>  } </b></p><p><b>  運(yùn)行結(jié)果</b></p><p><b>  輸入五個(gè)進(jìn)程</b

94、></p><p>  按優(yōu)先數(shù)調(diào)度算法如下排序</p><p><b>  心得與體會(huì)</b></p><p>  本次實(shí)驗(yàn)做的是單處理機(jī)系統(tǒng)的進(jìn)程調(diào)度,本人選的方法是優(yōu)先度調(diào)度算法,通過(guò)輸入設(shè)備輸入5個(gè)進(jìn)程以及進(jìn)程的優(yōu)先數(shù)、運(yùn)行時(shí)間,主要是優(yōu)先數(shù)的大小來(lái)使得進(jìn)程的執(zhí)行,優(yōu)先數(shù)大的,進(jìn)程先執(zhí)行,優(yōu)先數(shù)一樣的,按運(yùn)行時(shí)間短的先執(zhí)行。由本次

95、實(shí)驗(yàn)讓我更深入的了解了進(jìn)程的優(yōu)先進(jìn)入權(quán)。</p><p>  任務(wù)三、基本存儲(chǔ)器管理</p><p><b>  實(shí)驗(yàn)?zāi)康?lt;/b></p><p>  一個(gè)好的計(jì)算機(jī)系統(tǒng)不僅要有一個(gè)足夠容量的、存取速度高的、穩(wěn)定可靠的主存儲(chǔ)器,而且要能合理地分配和使用這些存儲(chǔ)空間。當(dāng)用戶(hù)提出申請(qǐng)存儲(chǔ)器空間時(shí),存儲(chǔ)管理必須根據(jù)申請(qǐng)者的要求,按一定的策略分析主存空

96、間的使用情況,找出足夠的空閑區(qū)域分配給申請(qǐng)者。當(dāng)作業(yè)撤離或主動(dòng)歸還主存資源時(shí),則存儲(chǔ)管理要收回作業(yè)占用的主存空間或歸還部分主存空間。主存的分配和回收的實(shí)現(xiàn)與主存儲(chǔ)器的管理方式有關(guān)的,通過(guò)本實(shí)驗(yàn)幫助學(xué)生理解在不同的存儲(chǔ)管理方式下怎樣實(shí)現(xiàn)主存的分配和回收。</p><p><b>  實(shí)驗(yàn)內(nèi)容</b></p><p>  從下兩種存儲(chǔ)管理方式的主存分配和回收中,選擇一種管

97、理方式來(lái)</p><p><b>  實(shí)現(xiàn)本次實(shí)驗(yàn)任務(wù):</b></p><p>  1、在可變(動(dòng)態(tài))分區(qū)管理方式下,采用最先適應(yīng)算法。</p><p>  2、在分頁(yè)式管理方式下,采用位示圖來(lái)表示主存的分配情況和回收情況。</p><p><b>  三、主要的函數(shù)解釋</b></p>

98、;<p>  void allocate(char J,float xk) /*給J作業(yè),采用最佳分配算法分配xk大小的空間*/ </p><p>  void reclaim(char J) /*回收作業(yè)名為J的作業(yè)所占主存空間*/ </p><p>  int main( ) //主函數(shù)</p><p>  注:"0"表

99、示空表目,"1"表示未分配</p><p><b>  源代碼</b></p><p>  #include<stdio.h> </p><p>  #include <dos.h> </p><p>  #include<stdlib.h> </p>

100、<p>  #include<conio.h> </p><p>  #include<iostream.h> </p><p>  #define n 10 /*假定系統(tǒng)允許的最大作業(yè)數(shù)為n,假定模擬實(shí)驗(yàn)中n值為10*/ </p><p>  #define m 10 /*假定系統(tǒng)允許的空閑區(qū)表最大為m,假定模擬實(shí)驗(yàn)中

101、m值為10*/ </p><p>  #define minisize 100 /*空閑分區(qū)被分配時(shí),如果分配后剩余的空間小于minisize,則將</p><p>  該空閑分區(qū)全部分配,若大于minisize,則切割分配*/ </p><p><b>  struct </b></p><p><b>

102、;  { </b></p><p>  float address; /*已分配分區(qū)起始地址*/ </p><p>  float length; /*已分配分區(qū)長(zhǎng)度,單位為字節(jié)*/ </p><p>  int flag; /*已分配區(qū)表登記欄標(biāo)志,用"0"表示空欄目*/ </p><p&g

103、t;  }used_table[n]; /*已分配區(qū)表*/ </p><p><b>  struct </b></p><p><b>  { </b></p><p>  float address; /*空閑區(qū)起始地址*/ </p><p>  float length; /

104、*空閑區(qū)長(zhǎng)度,單位為字節(jié)*/ </p><p>  int flag; /*空閑區(qū)表登記欄標(biāo)志,用"0"表示空欄目,用"1"表示未分配*/ </p><p>  }free_table[m]; /*空閑區(qū)表*/ </p><p>  void allocate(char J,float xk) /*給J作業(yè),

105、采用最佳分配算法分配xk大小的空間*/ </p><p><b>  { </b></p><p>  int i,k; </p><p>  float ad; </p><p><b>  k=-1; </b></p><p>  for(i=0;i<m

106、;i++) /*尋找空間大于xk的最小空閑區(qū)登記項(xiàng)k*/ </p><p>  if(free_table[i].length>=xk&&free_table[i].flag==1) </p><p>  if(k==-1||free_table[i].length<free_table[k].length) </p><p>&l

107、t;b>  k=i; </b></p><p>  if(k==-1)/*未找到可用空閑區(qū),返回*/ </p><p><b>  { </b></p><p>  printf("無(wú)可用空閑區(qū)\n"); </p><p>  return; </p>

108、<p>  }/*找到可用空閑區(qū),開(kāi)始分配:若空閑區(qū)大小與要求分配的空間差小于minisize大小,</p><p>  則空閑區(qū)全部分配;若空閑區(qū)大小與要求分配的空間差大于minisize大小,</p><p>  則從空閑區(qū)劃出一部分分配*/ </p><p>  if(free_table[k].length-xk<=minisize)

109、</p><p><b>  { </b></p><p>  free_table[k].flag=0; </p><p>  ad=free_table[k].address; </p><p>  xk=free_table[k].length; </p><p><b&g

110、t;  } </b></p><p><b>  else </b></p><p><b>  { </b></p><p>  free_table[k].length=free_table[k].length-xk; </p><p>  ad=free_table[k

111、].address+free_table[k].length; </p><p><b>  } </b></p><p>  /*修改已分配區(qū)表*/ </p><p><b>  i=0; </b></p><p>  while(used_table[i].flag!=0&

112、&i<n) /*尋找空表目*/ </p><p><b>  i++; </b></p><p>  if(i>=n) /*無(wú)表目可填寫(xiě)已分配分區(qū)*/ </p><p><b>  { </b></p><p>  printf("無(wú)表目填寫(xiě)已分分區(qū),錯(cuò)誤\

113、n"); </p><p>  /*修正空閑區(qū)表*/ </p><p>  if(free_table[k].flag==0) /*前面找到的是整個(gè)空閑分區(qū)*/ </p><p>  free_table[k].flag=1; </p><p><b>  else </b></p>

114、;<p>  {/*前面找到的是某個(gè)空閑分區(qū)的一部分*/ </p><p>  free_table[k].length=free_table[k].length+xk; </p><p><b>  return; </b></p><p><b>  } </b></p><

115、p><b>  } </b></p><p><b>  else </b></p><p>  {/*修改已分配表*/ </p><p>  used_table[i].address=ad; </p><p>  used_table[i].length=xk; </p&

116、gt;<p>  used_table[i].flag=J; </p><p><b>  } </b></p><p>  return; </p><p>  }/*主存分配函數(shù)結(jié)束*/ </p><p>  void reclaim(char J) /*回收作業(yè)名為J的作業(yè)所占主存空間

117、*/ </p><p><b>  { </b></p><p>  int i,k,j,s,t; </p><p>  float S,L; </p><p>  /*尋找已分配表中對(duì)應(yīng)登記項(xiàng)*/ </p><p><b>  s=0; </b></

118、p><p>  while((used_table[s].flag!=J||used_table[s].flag==0)&&s<n) </p><p><b>  s++; </b></p><p>  if(s>=n)/*在已分配表中找不到名字為J的作業(yè)*/ </p><p><b

119、>  { </b></p><p>  printf("找不到該作業(yè)\n"); </p><p><b>  return; </b></p><p><b>  } </b></p><p>  /*修改已分配表*/ </p>&

120、lt;p>  used_table[s].flag=0; /*取得歸還分區(qū)的起始地址S和長(zhǎng)度L*/ </p><p>  S=used_table[s].address; </p><p>  L=used_table[s].length; </p><p>  j=-1;k=-1;i=0; </p><p>  /*尋

121、找回收分區(qū)的空閑上下鄰,上鄰表目k,下鄰表目*/ </p><p>  while(i<m&&(j==-1||k==-1)) </p><p><b>  { </b></p><p>  if(free_table[i].flag==1) </p><p><b>  {

122、</b></p><p>  if(free_table[i].address+free_table[i].length==S)k=i;/*找到上鄰*/ </p><p>  if(free_table[i].address==S+L)j=i;/*找到下鄰*/ </p><p><b>  } </b></p>

123、<p><b>  i++; </b></p><p><b>  } </b></p><p>  if(k!=-1) </p><p>  if(j!=-1) </p><p>  /* 上鄰空閑區(qū),下鄰空閑區(qū),三項(xiàng)合并*/ </p><p>&

124、lt;b>  { </b></p><p>  free_table[k].length=free_table[j].length+free_table[k].length+L; </p><p>  free_table[j].flag=0; </p><p><b>  } </b></p>&l

125、t;p><b>  else </b></p><p>  /*上鄰空閑區(qū),下鄰非空閑區(qū),與上鄰合并*/ </p><p>  free_table[k].length=free_table[k].length+L; </p><p><b>  else </b></p><p>

126、;  if(j!=-1) </p><p>  /*上鄰非空閑區(qū),下鄰為空閑區(qū),與下鄰合并*/ </p><p><b>  { </b></p><p>  free_table[j].address=S; </p><p>  free_table[j].length=free_table[j].len

127、gth+L; </p><p><b>  } </b></p><p><b>  else </b></p><p>  /*上下鄰均為非空閑區(qū),回收區(qū)域直接填入*/ </p><p><b>  { </b></p><p>  /

128、*在空閑區(qū)表中尋找空欄目*/ </p><p><b>  t=0; </b></p><p>  while(free_table[t].flag==1&&t<m) </p><p><b>  t++; </b></p><p>  if(t>=m)/*空

129、閑區(qū)表滿(mǎn),回收空間失敗,將已分配表復(fù)原*/ </p><p><b>  { </b></p><p>  printf("主存空閑表沒(méi)有空間,回收空間失敗\n"); </p><p>  used_table[s].flag=J; </p><p>  return; </p&g

130、t;<p><b>  } </b></p><p>  free_table[t].address=S; </p><p>  free_table[t].length=L; </p><p>  free_table[t].flag=1; </p><p><b>  } <

131、;/b></p><p>  return; </p><p>  }/*主存回收函數(shù)結(jié)束*/ </p><p>  int main( ) </p><p><b>  { </b></p><p>  int i,a; </p><p>  floa

132、t xk; </p><p>  char J; </p><p>  /*空閑分區(qū)表初始化:*/ </p><p>  free_table[0].address=10240; /*起始地址假定為10240*/ </p><p>  free_table[0].length=10240; /*長(zhǎng)度假定為10240,即10k*/

133、 </p><p>  free_table[0].flag=1; /*初始空閑區(qū)為一個(gè)整體空閑區(qū)*/ </p><p>  for(i=1;i<m;i++) </p><p>  free_table[i].flag=0; /*其余空閑分區(qū)表項(xiàng)未被使用*/ /*已分配表初始化:*/ </p><p>  for(i=0;

134、i<n;i++) </p><p>  used_table[i].flag=0; /*初始時(shí)均未分配*/ </p><p>  while(1) </p><p><b>  { </b></p><p>  printf("選擇功能項(xiàng):\n0-退出\n1-分配主存\n2-回收主存\n3-

135、顯示主存)\n"); </p><p>  printf("選擇功項(xiàng)(0-3):\n"); </p><p>  scanf("%d",&a); </p><p>  switch(a) </p><p><b>  { </b></p>

136、;<p>  case 0: exit(0); /*a=0程序結(jié)束*/ </p><p>  case 1: /*a=1分配主存空間*/ </p><p>  printf("輸入作業(yè)名J和作業(yè)所需長(zhǎng)度xk: "); </p><p>  scanf("%*c%c%f",&J,&

137、xk); </p><p>  allocate(J,xk); /*分配主存空間*/ </p><p><b>  break; </b></p><p>  case 2: /*a=2回收主存空間*/ </p><p>  printf("輸入要回收分區(qū)的作業(yè)名"); <

138、;/p><p>  scanf("%*c%c",&J); </p><p>  reclaim(J); /*回收主存空間*/ </p><p><b>  break; </b></p><p>  case 3: /*a=3顯示主存情況*/ </p><

139、;p>  /*輸出空閑區(qū)表和已分配表的內(nèi)容*/ </p><p>  printf("輸出空閑區(qū)表:\n起始地址分區(qū)長(zhǎng)度標(biāo)志\n"); </p><p>  for(i=0;i<m;i++) </p><p>  printf("%6.0f%9.0f%6d\n",free_table[i].address

140、,free_table[i].length, </p><p>  free_table[i].flag); </p><p>  printf(" 按任意鍵,輸出已分配區(qū)表\n"); </p><p>  getch(); </p><p>  printf(" 輸出已分配區(qū)表:\n起始地址 分區(qū)長(zhǎng)

141、度標(biāo)志\n"); </p><p>  for(i=0;i<n;i++) </p><p>  if(used_table[i].flag!=0) </p><p>  printf("%6.0f%9.0f%6c\n",used_table[i].address,used_table[i].length, </p&

142、gt;<p>  used_table[i].flag); </p><p><b>  else </b></p><p>  printf("%6.0f%9.0f%6d\n",used_table[i].address,used_table[i].length, </p><p>  used_ta

143、ble[i].flag); </p><p><b>  break; </b></p><p>  default:printf("沒(méi)有該選項(xiàng)\n"); </p><p>  }/*case*/ </p><p>  }/*while*/ </p><p>  

144、return 1; </p><p><b>  }</b></p><p><b>  運(yùn)行結(jié)果</b></p><p><b>  分配主存</b></p><p><b>  顯示主存</b></p><p><b&g

145、t;  心得與體會(huì)</b></p><p>  本次實(shí)驗(yàn)做的是基本存儲(chǔ)器管理,在動(dòng)態(tài)分區(qū)管理下,采用最先適應(yīng)算法,通過(guò)分配主存,顯示主存以及回收主存的功能,在其我學(xué)到了對(duì)于存儲(chǔ)器的管理是怎么一回事了,以及存儲(chǔ)器對(duì)于主存的影響有多大。</p><p>  任務(wù)四、請(qǐng)求分頁(yè)存儲(chǔ)管理(虛擬存儲(chǔ))</p><p><b>  一、實(shí)驗(yàn)?zāi)康?lt;/b&

溫馨提示

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

評(píng)論

0/150

提交評(píng)論