操作系統(tǒng)課程設(shè)計報告-10_第1頁
操作系統(tǒng)課程設(shè)計報告-10_第2頁
操作系統(tǒng)課程設(shè)計報告-10_第3頁
操作系統(tǒng)課程設(shè)計報告-10_第4頁
操作系統(tǒng)課程設(shè)計報告-10_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

課程設(shè)計報告課程名稱:操作系統(tǒng)實驗題目:姓名類凱學院信息與電氣工程學院專業(yè)計算機科學與技術(shù)年級1302學號201322139082015年7月1日課程設(shè)計選題編程序?qū)崿F(xiàn)下述磁盤調(diào)度算法、編程序?qū)崿F(xiàn)下述磁盤調(diào)度算法,并求出每種算法的平均尋道長度。設(shè)計要求:設(shè)計主界面以靈活選擇某算法,且以下算法都要實現(xiàn)。

1)先來先服務算法(FCFS)

2)最短尋道時間優(yōu)先算法(SSTF)

3)掃描算法(SCAN)

4)循環(huán)掃描算法(CSCAN)課程設(shè)計需求分析通過實驗加深對操作系統(tǒng)基礎(chǔ)理論和重要算法的理解,加強動手能力,加強實踐動手能力和程序開發(fā)能力的培養(yǎng),提高分析問題解決問題的能力,培養(yǎng)合作精神。通過模擬磁臂調(diào)度來加深對操作系統(tǒng)中磁臂調(diào)度概念的理解。熟悉磁盤管理系統(tǒng)的設(shè)計方法,加深對所學各種磁盤調(diào)度算法的了解。概要設(shè)計編程序?qū)崿F(xiàn)下述磁盤調(diào)度算法、編程序?qū)崿F(xiàn)下述磁盤調(diào)度算法,并求出每種算法的平均尋道長度。平均尋道長度(L)為所有磁道所需移動距離之和除以總的所需訪問的磁道數(shù)(N),即:L=(M1+M2+……+Mi+……+MN)/N其中Mi為所需訪問的磁道號所需移動的磁道數(shù)。各模塊的基本算法1.先來先服務(FCFS)的設(shè)計思想即先來的請求先被響應。這個算法實際上不考慮訪問者要求訪問的物理位置,而只是考慮訪問者提出訪問請求的先后次序。FCFS策略看起來似乎是相當"公平"的,但是當請求的頻率過高的時候FCFS策略的響應時間就會大大延長。

2.最短尋道時間優(yōu)先調(diào)度(SSTF)的設(shè)計思想最短時間優(yōu)先算法選擇這樣的進程。要求訪問的磁道,與當前磁頭所在的磁道距離最近,以使每次的尋道時間最短。最短尋找時間優(yōu)先調(diào)度算法總是從等待訪問者中挑選尋找時間最短的那個請求先執(zhí)行的,而不管訪問者到來的先后次序。

掃描算法(SCAN)的設(shè)計思想SCAN算法又稱電梯調(diào)度算法。SCAN算法是磁頭前進方向上的最短查找時間優(yōu)先算法,它排除了磁頭在盤面局部位置上的往復移動,SCAN算法在很大程度上消除了SSTF算法的不公平性,但仍有利于對中間磁道的請求。“電梯調(diào)度”算法是從移動臂當前位置開始沿著臂的移動方向去選擇離當前移動臂最近的那個柱訪問者,如果沿臂的移動方向無請求訪問時,就改變臂的移動方向再選擇?!半娞菡{(diào)度”算法在實現(xiàn)時,不僅要記住讀寫磁頭的當前位置,還必須記住移動臂的當前前進方向。4.循環(huán)掃描(CSACN)的設(shè)計思想循環(huán)掃描(CSCAN)算法:CSCAN算法單項掃描調(diào)度算法的基本思想是,不考慮訪問者等待的先后次序,總是從0號柱面開始向里道掃描,按照各自所要訪問的柱面位置的次序去選擇訪問者。在移動臂到達最后一個柱面后,立即快速返回到0號柱面,返回時不為任何的訪問者等待服務。在返回到0號柱面后,再次進行掃描。系統(tǒng)實現(xiàn):流程圖、代碼源程序#include<stdio.h>#include<stdlib.h>#definemaxsize1001.先來先服務算法(FCFS)源程序:intFCFS(intarray[],intn){intsum=0,j,i;intavervage;printf("\nFCFS調(diào)度結(jié)果:");for(i=0;i<n;i++){printf("%d",array[i]);}for(i=0,j=1;j<n;i++,j++){sum+=abs(array[j]-array[i])}avervasge=sum/(n-1);printf("\n移動的總道數(shù):%d\n",sum);printf("平均尋道長度:%d\n",avervage);2.最短尋道時間優(yōu)先調(diào)度算法intSSTF(intarray[],intm){inttemp;intk=1;intnow,l,r;inti,j,sum=0;intaverage;for(i=0;i<m;i++){for(j=i+1;j<m;j++){if(array[i]>array[j]){temp=array[i];array[i]=array[j];array[j]=temp;}}}for(i=0;i<m;i++){printf("%d",array[i]);}printf("\n請輸入當前的磁道號:");scanf("%d",&now);printf("\nSSTF調(diào)度結(jié)果:");if(array[m-1]<=now){for(i=m-1;i>=0;i--)printf("%d",array[i]);sum=now-array[0];}elseif(array[0]>=now){for(i=0;i<m;i++)printf("%d",array[i]);sum=array[m-1]-now;}else{while(array[k]<now){k++;}l=k-1;r=k;while((l>=0)&&(r<m)){if((now-array[l])<=(array[r]-now)){printf("%d",array[l]);sum+=now-array[l];now=array[l];l=l-1;}else{printf("%d",array[r]);sum+=array[r]-now;now=array[r];r=r+1;}}if(l=-1){for(j=r;j<m;j++){printf("%d",array[j]);}sum+=array[m-1]-array[0];}else{for(j=l;j>=0;j--){printf("%d",array[j]);}sum+=array[m-1]-array[0];}averageg=sum/m;printf("\n移動的總道數(shù):%d\n",sum);printf("平均尋道長度:%d\n",avg);}電梯算法源程序:intSCAN(intarray[],intm){inttemp;intk=1;intnow,l,r,d;inti,j,sum=0;intaverage;for(i=0;i<m;i++){for(j=i+1;j<m;j++){if(array[i]>array[j]){temp=array[i];array[i]=array[j];array[j]=temp;}}}for(i=0;i<m;i++){printf("%d",array[i]);}printf("\n請輸入當前的磁道號:");scanf("%d",&now);if(array[m-1]<=now){printf("\nSCAN調(diào)度結(jié)果:");for(i=m-1;i>=0;i--){printf("%d",array[i]);}sum=now-array[0];}elseif(array[0]>=now){printf("\nSCAN調(diào)度結(jié)果:");for(i=0;i<m;i++){printf("%d",array[i]);}sum=array[m-1]-now;}else{while(array[k]<now){k++;}l=k-1;r=k;printf("\n請輸入當前移動臂的移動的方向(1磁道號增加方向,0磁道號減小方向):");scanf("%d",&d);printf("\nSCAN調(diào)度結(jié)果:");if(d==0){for(j=l;j>=0;j--){printf("%d",array[j]);}for(j=r;j<m;j++){printf("%d",array[j]);}sum=now-2*array[0]+array[m-1];//計算移動距離}//磁道號減小方向else{for(j=r;j<m;j++){printf("%d",array[j]);}for(j=l;j>=0;j--){printf("%d",array[j]);}sum=-now-array[0]+2*array[m-1];//計算移動距離}//磁道號增加方向}average=sum/m;printf("\n移動的總道數(shù):%d\n",sum);printf("平均尋道長度:%d\n",average);}循環(huán)掃描算法(CSCAN)IntCSCAN(intarray[],intm){inttemp;intk=1;intnow,l,r,d;inti,j,sum=0;intaverage;for(i=0;i<m;i++){for(j=i+1;j<m;j++){if(array[i]>array[j]){temp=array[i];array[i]=array[j];array[j]=temp;}}}for(i=0;i<m;i++){printf("%d",array[i]);}printf("\n請輸入當前的磁道號:");scanf("%d",&now);if(array[m-1]<=now){printf("\nCSCAN調(diào)度結(jié)果:");for(i=0;i<m;i++){printf("%d",array[i]);}sum=now-array[0]+array[m-1];}elseif(array[0]>=now){printf("\nCSCAN調(diào)度結(jié)果:");for(i=0;i<m;i++){printf("%d",array[i]);}sum=array[m-1]-now;}else{while(array[k]<now){k++;}l=k-1;r=k;printf("\n請輸入當前移動臂的移動的方向(1磁道號增加方向,0磁道號減小方向):");scanf("%d",&d);printf("\nCSCAN調(diào)度結(jié)果:");if(d==0){for(j=l;j>=0;j--){printf("%d",array[j]);}for(j=m-1;j>=r;j--){printf("%d",array[j]);}sum=2*(array[m-1]-array[0])-array[r]+now;}else{for(j=r;j<m;j++){printf("%d",array[j]);}for(j=0;j<r;j++){printf("%d",array[j]);}sum=2*(array[m-1]-array[0])+array[r-1]-now;}}average=sum/m;printf("\n移動的總道數(shù):%d\n",sum);printf("平均尋道長度:%d\n",average);}主界面intmain(){intc;FILE*fp;intcidao[maxsize];inti=0,count;fp=fopen("cidao.txt","r+");if(fp==NULL){printf("\n請先設(shè)置磁道!\n");exit(0);}while(!feof(fp)){fscanf(fp,"%d",&cidao[i]);i++;}count=i-1;printf("\n磁道讀取結(jié)果:\n");for(i=0;i<count;i++){printf("%5d",cidao[i]);}printf("\n");while(1){printf("\n算法選擇:\n");printf("1.先來先服務算法(FCFS)\n");printf("2.最短尋道時間優(yōu)先算法(SSTF)\n");printf("3.電梯算法(SCAN)\n");printf("4.循環(huán)掃描算法(CSCAN)\n");printf("5.退出\n");printf("\n");

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論