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

下載本文檔

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

文檔簡介

1、<p>  課 程 設(shè) 計(jì)</p><p>  課程設(shè)計(jì)名稱: 操作系統(tǒng)應(yīng)用課程設(shè)計(jì) </p><p>  專 業(yè) 班 級(jí) : </p><p>  學(xué) 生 姓 名 : xxxxx </p><p>  學(xué) 號(hào) :

2、 </p><p>  指 導(dǎo) 教 師 : </p><p>  課程設(shè)計(jì)時(shí)間: 2010.12.20-2010.12.26 </p><p>  計(jì)算機(jī)科學(xué) 專業(yè)課程設(shè)計(jì)任務(wù)書</p><p>  說明:本表由指導(dǎo)教師填寫,由教研室主任審核后

3、下達(dá)給選題學(xué)生,裝訂在設(shè)計(jì)(論文)首頁</p><p>  一 .課程設(shè)計(jì)需求分析</p><p>  操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)的一個(gè)重要系統(tǒng)軟件。我們在本課程的實(shí)驗(yàn)過程中,了解實(shí)際操作系統(tǒng)的工作過程,在實(shí)踐中加深對(duì)操作系統(tǒng)原理的理解。</p><p>  磁盤存儲(chǔ)器不僅容量大,存取速度快,而且可以實(shí)現(xiàn)隨機(jī)存取,是當(dāng)前存放大量程序和數(shù)據(jù)的理想設(shè)備,故在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,

4、都配置了磁盤存儲(chǔ)器,并以它為主來存放文件。這樣,對(duì)文件的操作,都將涉及到對(duì)磁盤的訪問。磁盤I/O速度的高低和磁盤系統(tǒng)的可靠性都將直接影響到系統(tǒng)性能。因此,設(shè)法改善磁盤系統(tǒng)的性能,已成為現(xiàn)代操作系統(tǒng)的重要任務(wù)之一。磁盤性能有數(shù)據(jù)的組織、磁盤的類型和訪問時(shí)間等。</p><p>  磁盤調(diào)度的目標(biāo)是使磁盤的平均尋道時(shí)間最少。也正因?yàn)檫@樣,我們有必要對(duì)各算法進(jìn)行模擬,進(jìn)而比較、分析、了解。</p><

5、;p>  本實(shí)驗(yàn)設(shè)計(jì)的目的是通過設(shè)計(jì)一個(gè)磁盤調(diào)度模擬系統(tǒng),以加深對(duì)最短尋道時(shí)間優(yōu)先(SSTF)、N步掃描算法(NStepSCAN)等磁盤調(diào)度算法的理解。讓我們更好地掌握操作系統(tǒng)的原理及實(shí)現(xiàn)方法,加深對(duì)操作系統(tǒng)基礎(chǔ)理論和重要算法的理解,加強(qiáng)動(dòng)手能力。</p><p><b>  二.課程設(shè)計(jì)原理</b></p><p>  設(shè)備的動(dòng)態(tài)分配算法與進(jìn)程調(diào)度相似,也是基

6、于一定的分配策略的。常用的分配策略有先請求先分配、優(yōu)先級(jí)高者先分配等策略。在多道程序系統(tǒng)中,低效率通常是由于磁盤類旋轉(zhuǎn)設(shè)備使用不當(dāng)造成的。操作系統(tǒng)中,對(duì)磁盤的訪問要求來自多方面,常常需要排隊(duì)。這時(shí),對(duì)眾多的訪問要求按一定的次序響應(yīng),會(huì)直接影響磁盤的工作效率,進(jìn)而影響系統(tǒng)的性能。訪問磁盤的時(shí)間因子由3部分構(gòu)成,它們是查找(查找磁道)時(shí)間、等待(旋轉(zhuǎn)等待扇區(qū))時(shí)間和數(shù)據(jù)傳輸時(shí)間,其中查找時(shí)間是決定因素。因此,磁盤調(diào)度算法先考慮優(yōu)化查找策略,

7、需要時(shí)再優(yōu)化旋轉(zhuǎn)等待策略。</p><p>  平均尋道長度(L)為所有磁道所需移動(dòng)距離之和除以總的所需訪問的磁道數(shù)(N),即:L=(M1+M2+……+Mi+……+MN)/N。其中Mi為所需訪問的磁道號(hào)所需移動(dòng)的磁道數(shù)。</p><p>  啟動(dòng)磁盤執(zhí)行輸入輸出操作時(shí),要把移動(dòng)臂移動(dòng)到指定的柱面,再等待指定扇區(qū)的旋轉(zhuǎn)到磁頭位置下,然后讓指定的磁頭進(jìn)行讀寫,完成信息傳送。因此,執(zhí)行一次輸入輸

8、出所花的時(shí)間有:尋找時(shí)間——磁頭在移動(dòng)臂帶動(dòng)下移動(dòng)到指定柱面所花的時(shí)間;延遲時(shí)間——指定扇區(qū)旋轉(zhuǎn)到磁頭下所需的時(shí)間;傳送時(shí)間——由磁頭進(jìn)程讀寫完成信息傳送的時(shí)間。</p><p>  其中傳送信息所花的時(shí)間,是在硬件設(shè)計(jì)就固定的。而尋找時(shí)間和延遲時(shí)間是與信息在磁盤上的位置有關(guān)。為了減少移動(dòng)臂進(jìn)行移動(dòng)花費(fèi)的時(shí)間,每個(gè)文件的信息不是按盤面上的磁道順序存放滿一個(gè)盤面后,再放到下一個(gè)盤面上。而是按柱面存放,同一柱面上的各

9、磁道被放滿信息后,再放到下一個(gè)柱面上。所以各磁盤的編號(hào)按柱面順序(從0號(hào)柱面開始),每個(gè)柱面按磁道順序,每個(gè)磁道又按扇區(qū)順序進(jìn)行排序。</p><p>  磁盤是可供多個(gè)進(jìn)程共享的設(shè)備,當(dāng)有多個(gè)進(jìn)程都要求訪問磁盤是,應(yīng)采用一種最佳調(diào)度算法,以使各種進(jìn)程對(duì)磁盤的平均訪問時(shí)間最小。由于在訪問磁盤的時(shí)間中,主要是尋道時(shí)間,因此,磁盤調(diào)度的目標(biāo),是使磁盤的平均尋道時(shí)間最少。</p><p>  三

10、.算法分析及程序概要設(shè)計(jì)</p><p>  1.最短尋道時(shí)間優(yōu)先算法(SSTF)</p><p><b>  1.1算法分析:</b></p><p>  最短尋找時(shí)間優(yōu)先調(diào)度算法總是從等待訪問者中挑選尋找時(shí)間最短的那個(gè)請求先執(zhí)行的,而不管訪問者到來的先后次序。也就是說,該算法選擇這樣的進(jìn)程:其要求訪問的磁道與當(dāng)前磁頭所在的磁道距離最近,以使

11、每次的尋道時(shí)間最短。但這種算法不能保證平均尋道時(shí)間最短?,F(xiàn)在利用一個(gè)例子來討論,假設(shè)當(dāng)前移動(dòng)臂所在的磁道為100,進(jìn)程請求訪問磁盤的先后次序?yàn)椋?5、58、39、18、90、160、150、38、184。那么該算法將這樣進(jìn)行進(jìn)程調(diào)度:現(xiàn)在當(dāng)100號(hào)柱面的操作結(jié)束后,應(yīng)該先處理90號(hào)柱面的請求,然后到達(dá)58號(hào)柱面執(zhí)行操作,隨后處理55號(hào)柱面請求,后繼操作的次序應(yīng)該是39、38、18、150、160、184。</p><

12、p>  采用最短尋找時(shí)間優(yōu)先算法決定等待訪問者執(zhí)行操作的次序時(shí),讀寫磁頭總共移動(dòng)了200多個(gè)柱面的距離,與先來先服務(wù)、算法比較,大幅度地減少了尋找時(shí)間,因而縮短了為各訪問者請求服務(wù)的平均時(shí)間,也就提高了系統(tǒng)效率。</p><p>  SSTF算法雖然能獲得較好的尋道性能,但卻可能導(dǎo)致某個(gè)進(jìn)程發(fā)生“饑餓”(Starvation)現(xiàn)象。因?yàn)橹灰粩嘤行逻M(jìn)程的請求到達(dá),且其所要訪問的磁道與磁頭當(dāng)前所在磁道的距離較

13、近,這種新進(jìn)程的I/O請求必然優(yōu)先滿足。也就是說,SSTF查找模式有高度局部化的傾向,會(huì)推遲一些請求的服務(wù),甚至引起無限拖延(饑餓)。</p><p>  1.2概要設(shè)計(jì)(流程圖):</p><p>  2、NStepSCAN算法</p><p><b>  2.1算法分析</b></p><p>  N步掃描算法是基于

14、掃描算法發(fā)展而成的,故要想很好的了解它,首先得對(duì)掃描算法加以理解分析,只有這樣才能很好地理解N步掃描算法。</p><p>  掃描算法(SCAN) 又稱電梯調(diào)度算法。該算法不僅考慮到與訪問的磁道與當(dāng)前磁道間的距離,更優(yōu)先考慮的是磁頭當(dāng)前的移動(dòng)方向。SCAN算法是磁頭前進(jìn)方向上的最短查找時(shí)間優(yōu)先算法,它排除了磁頭在盤面局部位置上的往復(fù)移動(dòng),SCAN算法這種逐步自里向外又自外向里(或先自外向里又自外向里)的磁頭移動(dòng)

15、規(guī)率,很好地避免了出現(xiàn)“饑餓”現(xiàn)象,并在很大程度上消除了SSTF算法的不公平性,但仍有利于對(duì)中間磁道的請求。</p><p>  “電梯調(diào)度”算法是從移動(dòng)臂當(dāng)前位置開始沿著臂的移動(dòng)方向去選擇離當(dāng)前移動(dòng)臂最近的那個(gè)柱訪問者,如果沿臂的移動(dòng)方向無請求訪問時(shí),就改變臂的移動(dòng)方向再選擇。這好比乘電梯,如果電梯已向上運(yùn)動(dòng)到4層時(shí),依次有3位乘客陳生、伍生、張生在等候乘電梯。他們的要求是:陳生在2層等待去10層;伍生在5層等

16、待去底層;張生在8層等待15層。由于電梯目前運(yùn)動(dòng)方向是向上,所以電梯的形成是先把乘客張生從8層帶到15層,然后電梯換成下行方向,把乘客伍生從5層帶到底層,電梯最后再調(diào)換方向,把乘客陳生從2層送到10層。</p><p>  但是,“電梯調(diào)度”算法在實(shí)現(xiàn)時(shí),不僅要記住讀寫磁頭的當(dāng)前位置,還必須記住移動(dòng)臂的當(dāng)前前進(jìn)方向。</p><p>  N步掃描算法是將磁盤請求隊(duì)列分成若干個(gè)長度為N的子隊(duì)

17、列,磁盤調(diào)度將按FCFS算法依次處理這些子隊(duì)列。而沒處理一個(gè)隊(duì)列時(shí)又是按SCAN算法,對(duì)一個(gè)隊(duì)列處理完后,在處理其他隊(duì)列。當(dāng)正在處理某子隊(duì)列時(shí),如果又出現(xiàn)新的I/O請求,便將新請求進(jìn)程放入其他隊(duì)列,這樣就可以避免出現(xiàn)粘著現(xiàn)象,統(tǒng)稱“磁盤粘著”(Armstickiness)(有一個(gè)或幾個(gè)進(jìn)程對(duì)某一磁道有較高的訪問頻率,即這些進(jìn)程反復(fù)請求對(duì)某一磁道的I/O操作,從而壟斷了整個(gè)磁盤設(shè)備的現(xiàn)象)。而在SSTF、SCAN及CSCAN幾種調(diào)度算法中

18、,都有可能出現(xiàn)磁臂留在某處不動(dòng)的情況,即出現(xiàn)磁盤粘著現(xiàn)象。當(dāng)N取值很大時(shí),會(huì)使N步掃描的性能接近于SCAN算法的性能;當(dāng)N=1時(shí),N步掃描算法退化為FCFS算法。</p><p>  此外,需要了解的是N步SCAN算法的簡化算法是FSCAN算法,即將磁盤請求隊(duì)列分成兩個(gè)子隊(duì)列的算法。</p><p>  2.2概要設(shè)計(jì)(流程圖)</p><p>  Y

19、 N</p><p><b>  四、詳細(xì)設(shè)計(jì)</b></p><p>  #include"stdio.h"</p><p>  #include"stdlib.h"</p><p>  //#include"iostream.h

20、"</p><p>  #define maxsize 100 //定義最大數(shù)組域</p><p>  int now,s;</p><p>  //最短尋道時(shí)間優(yōu)先調(diào)度算法</p><p>  void SSTF(int array[],int m)</p><p><b>  {</b&g

21、t;</p><p><b>  int temp;</b></p><p><b>  int k=1;</b></p><p>  int now,l,r; //當(dāng)前磁道號(hào)now;找出的當(dāng)前磁道左側(cè)的磁道l,右側(cè)的磁道r</p><p>  int i,j,sum=0;</p>

22、<p><b>  int avg;</b></p><p>  for(i=0;i<m;i++)</p><p><b>  {</b></p><p>  for(j=i+1;j<m;j++)//對(duì)磁道號(hào)進(jìn)行從小到大排列</p><p><b>  {</

23、b></p><p>  if(array[i]>array[j])//兩磁道號(hào)之間比較</p><p><b>  {</b></p><p>  temp=array[i];</p><p>  array[i]=array[j];</p><p>  array[j]=temp;

24、</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  for( i=0;i<m;i++)//輸出排序后的磁道號(hào)數(shù)組</p><p><b>  {&l

25、t;/b></p><p>  printf("%d ",array[i]);</p><p><b>  }</b></p><p>  printf("\n 請輸入當(dāng)前的磁道號(hào):");</p><p>  scanf("%d",&now);&

26、lt;/p><p>  printf("\n SSTF調(diào)度結(jié)果: ");</p><p>  if(array[m-1]<=now)//判斷整個(gè)數(shù)組里的數(shù)是否都小于當(dāng)前磁道號(hào)</p><p><b>  { </b></p><p>  for(i=m-1;i>=0;i--)//將數(shù)組磁

27、道號(hào)從大到小輸出</p><p>  printf("%d ",array[i]);</p><p>  sum=now-array[0];//計(jì)算移動(dòng)距離</p><p><b>  }</b></p><p>  else if(array[0]>=now)//判斷整個(gè)數(shù)組里的數(shù)是否都大于

28、當(dāng)前磁道號(hào)</p><p><b>  { </b></p><p>  for(i=0;i<m;i++)//將磁道號(hào)從小到大輸出</p><p>  printf("%d ",array[i]);</p><p>  sum=array[m-1]-now;//計(jì)算移動(dòng)距離</p>

29、<p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  while(array[k]<now)//逐一比較以確定K值</p><p><b>  {</b>

30、;</p><p><b>  k++;</b></p><p><b>  }</b></p><p><b>  l=k-1;</b></p><p><b>  r=k;</b></p><p>  //確定當(dāng)前磁道在已排的序

31、列中的位置</p><p>  while((l>=0)&&(r<m))</p><p><b>  {</b></p><p>  if((now-array[l])<=(array[r]-now))//判斷最短距離</p><p><b>  { </b>&

32、lt;/p><p>  printf("%d ",array[l]);</p><p>  sum+=now-array[l];//計(jì)算移動(dòng)距離</p><p>  now=array[l];</p><p><b>  l=l-1;</b></p><p><b> 

33、 }</b></p><p><b>  else</b></p><p><b>  { </b></p><p>  printf("%d ",array[r]);</p><p>  sum+=array[r]-now;//計(jì)算移動(dòng)距離</p>

34、<p>  now=array[r];</p><p><b>  r=r+1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(l==-1)</b></p>

35、<p><b>  { </b></p><p>  for(j=r;j<m;j++)</p><p><b>  { </b></p><p>  printf("%d ",array[j]);</p><p><b>  }</b

36、></p><p>  sum+=array[m-1]-array[0];//計(jì)算移動(dòng)距離</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  { </b></p><p>  fo

37、r(j=l;j>=0;j--)</p><p><b>  { </b></p><p>  printf("%d ",array[j]);</p><p><b>  }</b></p><p>  sum+=array[m-1]-array[0];//計(jì)算移動(dòng)距離

38、</p><p><b>  }</b></p><p><b>  }</b></p><p>  avg=sum/m;</p><p>  printf("\n 移動(dòng)的總道數(shù): %d \n",sum);</p><p>  printf("

39、平均尋道長度: %d \n",avg);</p><p><b>  }</b></p><p><b>  //掃描調(diào)度方法</b></p><p>  void SCAN(int array[],int m,int d)//先要給出當(dāng)前磁道號(hào)和移動(dòng)臂的移動(dòng)方向</p><p><

40、b>  {</b></p><p><b>  int k=1;</b></p><p><b>  int l,r;</b></p><p>  int i,j,sum=0;</p><p><b>  int avg;</b></p><

41、;p>  int temp; //用于排序的臨時(shí)參數(shù)</p><p><b>  int q;</b></p><p>  for(i=0;i<m;i++)</p><p><b>  {</b></p><p>  for(j=i+1;j<m;j++)</p>

42、<p><b>  {</b></p><p>  if(array[i]>array[j])//對(duì)磁道號(hào)進(jìn)行從小到大排列</p><p><b>  {</b></p><p>  temp=array[i];</p><p>  array[i]=array[j];</p&

43、gt;<p>  array[j]=temp;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(array[m-1]<=now)//判斷整個(gè)數(shù)組里的數(shù)是否都小于

44、當(dāng)前磁道號(hào)</p><p><b>  { </b></p><p>  printf("\n SCAN調(diào)度結(jié)果: ");</p><p>  for(i=m-1;i>=0;i--)</p><p><b>  {</b></p><p>  

45、printf("%d ",array[i]);//將數(shù)組磁道號(hào)從大到小輸出</p><p>  q=array[i];</p><p><b>  }</b></p><p>  sum=now-q;//計(jì)算移動(dòng)距離</p><p><b>  s=s+sum;</b><

46、/p><p><b>  now=q;</b></p><p><b>  }</b></p><p>  else if(array[0]>=now)//判斷整個(gè)數(shù)組里的數(shù)是否都大于當(dāng)前磁道號(hào)</p><p><b>  { </b></p><p&

47、gt;  printf("\n SCAN調(diào)度結(jié)果: ");</p><p>  for(i=0;i<m;i++)</p><p><b>  {</b></p><p>  printf("%d ",array[i]);//將磁道號(hào)從小到大輸出</p><p>  q=a

48、rray[i];</p><p><b>  }</b></p><p>  sum=array[m-1]-now;//計(jì)算移動(dòng)距離</p><p><b>  s=s+sum;</b></p><p><b>  now=q;</b></p><p>

49、<b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  while(array[k]<now)//逐一比較以確定K值</p><p><b>  {</b></p>

50、<p><b>  k++;</b></p><p><b>  }</b></p><p><b>  l=k-1;</b></p><p><b>  r=k;</b></p><p>  printf("\n SCAN調(diào)度結(jié)果

51、: ");</p><p><b>  if(d==0)</b></p><p><b>  {</b></p><p>  for(j=l;j>=0;j--)</p><p><b>  {</b></p><p>  printf(

52、"%d ",array[j]);</p><p>  q=array[j];</p><p><b>  }</b></p><p>  for(j=r;j<m;j++)</p><p><b>  {</b></p><p>  printf(&

53、quot;%d ",array[j]);</p><p>  q=array[j];</p><p><b>  }</b></p><p>  sum=now-2*array[0]+array[m-1];//計(jì)算移動(dòng)距離</p><p><b>  s=s+sum;</b></p

54、><p><b>  now=q;</b></p><p>  }//磁道號(hào)減小方向</p><p><b>  else</b></p><p><b>  {</b></p><p>  for(j=r;j<m;j++)</p>&l

55、t;p><b>  {</b></p><p>  printf("%d ",array[j]);</p><p>  q=array[j];</p><p><b>  }</b></p><p>  for(j=l;j>=0;j--)</p>&l

56、t;p><b>  {</b></p><p>  printf("%d ",array[j]);</p><p>  q=array[j];</p><p><b>  }</b></p><p>  sum=-now-array[0]+2*array[m-1];//計(jì)

57、算移動(dòng)距離</p><p><b>  s=s+sum;</b></p><p><b>  now=q;</b></p><p>  }//磁道號(hào)增加方向</p><p><b>  }</b></p><p>  avg=sum/m;</p&g

58、t;<p>  printf("\n 該子隊(duì)列移動(dòng)的總道數(shù): %d \n",sum);</p><p>  printf(" 該子隊(duì)列平均尋道長度: %d \n",avg);</p><p><b>  }</b></p><p>  void NStepSCAN(int array[],

59、int m)</p><p><b>  { </b></p><p>  int sn,N,d; //sn標(biāo)記每一子隊(duì)列的長度,N記錄子隊(duì)列個(gè)數(shù),now標(biāo)記當(dāng)前磁道號(hào)</p><p>  int b[100],c[100]; //b[100]儲(chǔ)存前幾個(gè)子隊(duì)列,c[100]儲(chǔ)存最后一個(gè)子隊(duì)列</p><p>

60、  int i=0,j=0,k=0,n=1;</p><p><b>  int ave;</b></p><p>  printf("請輸入當(dāng)前磁道號(hào):\n");</p><p>  scanf("%d",&now);</p><p>  printf("請輸入

61、子隊(duì)列的個(gè)數(shù):\n");</p><p>  scanf("%d",&N);</p><p>  while(N<1||N>m)</p><p><b>  {</b></p><p>  printf("超出范圍,文件中的磁道數(shù)不夠分組,請重新輸入:\n&qu

62、ot;);</p><p>  scanf("%d",&N);</p><p><b>  }</b></p><p>  printf("請輸入當(dāng)前移動(dòng)臂的移動(dòng)的方向 (1 磁道號(hào)增加方向,0磁道號(hào)減小方向) : ");</p><p>  scanf("%d&

63、quot;,&d);</p><p><b>  sn=m/N;</b></p><p>  while(N!=1) //當(dāng)不是最后一個(gè)子隊(duì)列時(shí),循環(huán)進(jìn)行SCAN調(diào)度</p><p><b>  {</b></p><p><b>  j=0;</b><

64、/p><p>  for(i=k;i<sn*n;i=k,j++)</p><p><b>  {</b></p><p>  b[j]=array[i];</p><p><b>  k=k+1;</b></p><p><b>  }</b><

65、/p><p>  printf("\n第%d個(gè)隊(duì)列的排序結(jié)果為:\n",n); </p><p>  SCAN(b,sn,d);</p><p><b>  N=N-1;</b></p><p><b>  n=n+1;</b></p><p><b&g

66、t;  }</b></p><p>  if(N==1) //最后一個(gè)子隊(duì)列時(shí)進(jìn)行SCAN調(diào)度</p><p><b>  {</b></p><p>  for(i=k,j=0;i<m;i++,j++)</p><p><b>  {</b></p>

67、<p>  c[j]=array[i];</p><p><b>  }</b></p><p>  printf("\n最后一個(gè)隊(duì)列的調(diào)度結(jié)果為:\n");</p><p>  SCAN(c,m-k,d);</p><p><b>  }</b></p>

68、<p><b>  ave=s/m;</b></p><p>  printf("\n該調(diào)度總的結(jié)果為:\n");</p><p>  printf("\n 移動(dòng)的總道數(shù): %d \n",s);</p><p>  printf(" 平均尋道長度: %d \n",ave)

69、;</p><p><b>  }</b></p><p><b>  // 操作界面</b></p><p>  int main()</p><p><b>  {</b></p><p><b>  int c;</b><

70、;/p><p><b>  int C=1;</b></p><p>  FILE *fp;//定義指針文件</p><p>  int cidao[maxsize];//定義磁道號(hào)數(shù)組</p><p>  int i=0,count;</p><p>  fp=fopen("cidao.t

71、xt","r+");//讀取cidao.txt文件</p><p>  if(fp==NULL)//判斷文件是否存在</p><p><b>  {</b></p><p>  printf("\n 請 先 設(shè) 置 磁 道! \n");</p><p><b>

72、  exit(0);</b></p><p><b>  }</b></p><p>  while(!feof(fp))//如果磁道文件存在</p><p><b>  {</b></p><p>  fscanf(fp,"%d",&cidao[i]);//

73、調(diào)入磁道號(hào)</p><p><b>  i++;</b></p><p><b>  }</b></p><p><b>  count=i;</b></p><p>  printf("\n -------------------------------------

74、-------------\n");</p><p>  printf(" 10-11年度OS課程設(shè)計(jì)--磁盤調(diào)度算法模擬");</p><p>  printf("\n --------------------------------------------------\n");</p><p>  p

75、rintf("\n 磁道讀取結(jié)果:\n");</p><p>  for(i=0;i<count;i++)</p><p><b>  {</b></p><p>  printf("%5d",cidao[i]);//輸出讀取的磁道的磁道號(hào)</p><p><b>

76、  }</b></p><p>  printf("\n ");</p><p>  while(C==1)</p><p><b>  {</b></p><p>  printf(" ╭═══════════════╮ \n&

77、quot;);</p><p>  printf(" ║ 操作系統(tǒng)課程設(shè)計(jì) ║ \n");</p><p>  printf(" ╭═════┤ 磁盤調(diào)度算法 ├═════╮ \n ");</p><p>  pri

78、ntf(" ║ ║ ║ ║ \n");</p><p>  printf(" ║ ╰═══════════════╯ ║ \n");</p><p>  printf(" ║

79、 ║ \n");</p><p>  printf(" ║ 1.最短尋道時(shí)間優(yōu)先算法(SSTF) ║ \n");</p><p>  printf(" ║

80、 ║ \n");</p><p>  printf(" ║ ║ \n");</p><p>  printf(" ║ 2.N步掃描算法(NStepScan)

81、 ║ \n");</p><p>  printf(" ║ ║ \n");</p><p>  printf(" ║

82、 ║ \n");</p><p>  printf(" ║ ║ \n");</p><p>  printf(" ║ ╭───────────────────────╮ ║ \n");</p><p>

83、;  printf(" ╰═┤ 請輸入你的選擇的算法(輸入0離開) ├═╯ \n");</p><p>  printf(" ╰───────────────────────╯ \n");</p><p>  scanf("%d",&c);</p><p

84、>  if(c==0) exit(0);</p><p>  printf(" ");</p><p>  while(c!=1&&c!=2)</p><p><b>  {</b></p><p>  printf("輸入數(shù)據(jù)超出范圍,請重新輸入您想進(jìn)行的調(diào)度算法:\

85、n");</p><p>  scanf("%d",&c);</p><p><b>  }</b></p><p><b>  switch(c)</b></p><p><b>  {</b></p><p>&

86、lt;b>  case 1:</b></p><p>  SSTF(cidao,count);//最短尋道時(shí)間優(yōu)先算法</p><p>  printf("\n");</p><p><b>  break;</b></p><p><b>  case 2:</b&

87、gt;</p><p><b>  i=0;</b></p><p>  fp=fopen("cidao.txt","r+");//讀取cidao.txt文件</p><p>  if(fp==NULL)//判斷文件是否存在</p><p><b>  {</b&g

88、t;</p><p>  printf("\n 請 先 設(shè) 置 磁 道! \n");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  while(!feof(fp))//如果磁道文件存在</p>&l

89、t;p><b>  {</b></p><p>  fscanf(fp,"%d",&cidao[i]);//調(diào)入磁道號(hào)</p><p><b>  i++;</b></p><p><b>  }</b></p><p><b>  

90、count=i;</b></p><p>  printf("\n 磁道讀取結(jié)果:\n");</p><p>  for(i=0;i<count;i++)</p><p><b>  {</b></p><p>  printf("%5d",cidao[i]);/

91、/輸出讀取的磁道的磁道號(hào)</p><p><b>  }</b></p><p>  printf("\n ");</p><p>  NStepSCAN(cidao,count);//N步掃描算法</p><p>  printf("\n");</p><p&

92、gt;<b>  break;</b></p><p><b>  }</b></p><p>  printf(" 是否繼續(xù)(按0結(jié)束,按1繼續(xù))?");</p><p>  scanf("%5d",&C);</p><p><b>  }

93、</b></p><p>  return(0);</p><p><b>  }</b></p><p><b>  五、調(diào)試運(yùn)行結(jié)果</b></p><p>  1. 調(diào)試運(yùn)行后的開始界面如下:</p><p>  2、調(diào)試運(yùn)行各個(gè)算法結(jié)果如下:</p&

94、gt;<p>  2.1運(yùn)行最短尋道時(shí)間優(yōu)先(SSTF)算法調(diào)度程序結(jié)果如下:</p><p>  2.2調(diào)試運(yùn)行NStepSCAN調(diào)度程序結(jié)果如下:</p><p>  2.2.1移動(dòng)臂的移動(dòng)方向以磁道號(hào)增加方向:</p><p>  2.2.2移動(dòng)臂的移動(dòng)方向以磁道號(hào)減小方向:</p><p>  3.輸入錯(cuò)誤后程序界面如下

95、:</p><p>  3.1在選擇算法時(shí),如果輸入數(shù)字不在1-2之間,出錯(cuò)界面如下:</p><p>  3.2在進(jìn)行N步掃描算法時(shí),當(dāng)輸入要進(jìn)行分組的子隊(duì)列個(gè)數(shù)少于文件中的磁盤號(hào)數(shù)時(shí),出現(xiàn)如下界面:</p><p><b>  七.調(diào)試分析及總結(jié)</b></p><p>  整個(gè)設(shè)計(jì)中最麻煩的就是整個(gè)程序模塊的劃分和

96、各模塊之間接口設(shè)計(jì),編程中經(jīng)常犯想當(dāng)然的錯(cuò)誤,編程中出現(xiàn)了不少奇怪的錯(cuò)誤。再調(diào)試中嘗試使用了分割法,對(duì)錯(cuò)誤模塊進(jìn)行定位,再進(jìn)行排查。還使用了單步調(diào)試法,很好地解決了某些邏輯錯(cuò)誤,比如在利用N步SCAN算法時(shí),其中對(duì)磁道號(hào)的分組時(shí),出現(xiàn)了越界,開始時(shí)還以為是函數(shù)傳遞參數(shù)時(shí)出現(xiàn)了越界,導(dǎo)致分組后的數(shù)組值亂碼,但通過單步調(diào)試很容易的找出了癥結(jié)所在。原來是由于循環(huán)中的“j”值發(fā)生越界導(dǎo)致的結(jié)果錯(cuò)誤。</p><p>  

97、在N步掃描算法中,還出現(xiàn)了這樣一個(gè)問題。就是,在對(duì)磁道號(hào)進(jìn)行分組時(shí),最后一列的處理問題。在開始時(shí)由于籠統(tǒng)地進(jìn)行了平均分組,而沒有考慮無法完全分盡的情況,進(jìn)而導(dǎo)致最后一個(gè)甚至一些磁道號(hào)丟失的問題。不過最后,在單列最后一組后(即將最后一組與前面各組分開后)問題得到了解決。將余下的一個(gè)或一些磁道號(hào)全部加至最后一列末尾,很好地處理了數(shù)據(jù)丟失問題。</p><p>  通過這次的課程設(shè)計(jì)使我認(rèn)識(shí)到要將操作系統(tǒng)這門計(jì)算機(jī)專業(yè)

98、的課學(xué)好不僅僅是要把書上的基本知識(shí)學(xué)好而且還要不斷進(jìn)行實(shí)踐,將所學(xué)的跟實(shí)踐操作結(jié)合起來才能更好地鞏固所學(xué),才能提高自己實(shí)踐能力.通過這次的設(shè)計(jì)使我認(rèn)識(shí)到只停留在表面理解問題是很難使問題得到很好的解決的,實(shí)踐能力與理論知識(shí)同樣重要??梢哉f此課程設(shè)計(jì)的理論難度并不大,但是若要深入發(fā)掘其中的東西,并且實(shí)際去編程實(shí)現(xiàn),就遇到了相當(dāng)大的難度。因?yàn)榕c之涉及的很多方面并沒有學(xué)過,需要自己去自學(xué)和實(shí)踐檢驗(yàn)。通過模擬磁盤調(diào)度及進(jìn)程排隊(duì)算法來加深對(duì)操作系統(tǒng)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論