操作系統(tǒng)課程設計-磁盤調(diào)度算法_第1頁
操作系統(tǒng)課程設計-磁盤調(diào)度算法_第2頁
操作系統(tǒng)課程設計-磁盤調(diào)度算法_第3頁
操作系統(tǒng)課程設計-磁盤調(diào)度算法_第4頁
操作系統(tǒng)課程設計-磁盤調(diào)度算法_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上目 錄3 題目分析24 概要設計2 4.1 先來先服務(FCFS)的設計思想.2 4.2 最短尋道時間優(yōu)先調(diào)度(SSTF)的設計思想.2 4.3 掃描算法(SCAN)的設計思想2 4.4 循環(huán)掃描(CSCAN)的設計思想.25 代碼及流程3 5.1 流程圖.3 5.2 源代碼.86 運行結(jié)果167 設計心得19專心-專注-專業(yè)1 課程設計目的及要求設計目的:加深對操作系統(tǒng)原理的進一步認識,加強實踐動手能力和程序開發(fā)能力的培養(yǎng),提高分析問題解決問題的能力,培養(yǎng)合作精神,以鞏固和加深磁盤調(diào)度的概念。操作系統(tǒng)是一門工程性很強的課程,它不僅要求學生掌握操作系統(tǒng)的工作原理和理論

2、知識,也要求學生的實際動手能力,以加深對所學習內(nèi)容的理解,使學生熟練地掌握計算機的操作方法,使用各種軟件工具,加強對課程內(nèi)容的理解。這次課程設計,就是通過模擬磁臂調(diào)度來加深對操作系統(tǒng)中磁臂調(diào)度概念的理解。使學生熟悉磁盤管理系統(tǒng)的設計方法;加深對所學各種磁盤調(diào)度算法的了解及其算法的特點。設計要求:編程序?qū)崿F(xiàn)下述磁盤調(diào)度算法,并求出每種算法的平均尋道長度;要求設計主界面可以靈活選擇某算法,且以下算法都要實現(xiàn)1、先來先服務算法(FCFS)2、最短尋道時間優(yōu)先算法(SSTF)3、掃描算法(SCAN)4、循環(huán)掃描算法(CSCAN)2 相關知識數(shù)據(jù)結(jié)構(gòu):數(shù)組now:當前磁道號;array:放置磁道號的數(shù)組

3、;void FCFS(int array,int m )先來先服務算法(FCFS)void SSTF(int array,int m)最短尋道時間優(yōu)先算法(SSTF)void SCAN(int array,int m) 掃描算法(SCAN)void CSCAN(int array,int m)循環(huán)掃描算法(CSCAN) 磁盤調(diào)度:當有多個進程都請求訪問磁盤時,采用一種適當?shù)尿?qū)動調(diào)度算法,使各進程對磁盤的平均訪問(主要是尋道)時間最小。目前常用的磁盤調(diào)度算法有:1)閑來先服務2)最短尋道時間優(yōu)先3)掃描算法4)循環(huán)掃描算法等3 題目分析選擇一個自己熟悉的計算機系統(tǒng)和程序設計語言模擬操作系統(tǒng)基本功

4、能的設計方法及其實現(xiàn)過程 完成各分項功能。在算法的實現(xiàn)過程中,要求可決定變量應是動態(tài)可變的;同時模塊應該有一個合理的輸出結(jié)果。具體可參照實驗的程序模擬 .各功能程序要求自行編寫程序?qū)崿F(xiàn),不得調(diào)用現(xiàn)有操作系統(tǒng)提供的模塊或功能函數(shù)。磁盤調(diào)度程序模擬。先來先服務調(diào)度算法. 最短尋道時間優(yōu)先調(diào)度,循環(huán)(SCAN)調(diào)度算法。程序設計語言自選,最終以軟件(含源代碼以及執(zhí)行程序)和設計報告的形式提交課程設計結(jié)果.。磁盤調(diào)度讓有限的資源發(fā)揮更大的作用。在多道程序設計的計算機系統(tǒng)中,各個進程可能會不斷提出不同的對磁盤進行讀/寫操作的請求。由于有時候這些進程的發(fā)送請求的速度比磁盤響應的還要快,因此我們有必要為每個

5、磁盤設備建立一個等待隊列。4 概要設計1.先來先服務(FCFS)的設計思想即先來的請求先被響應。FCFS策略看起來似乎是相當"公平"的,但是當請求的頻率過高的時候FCFS策略的響應時間就會大大延長。FCFS策略為我們建立起一個隨機訪問機制的模型,但是假如用這個策略反復響應從里到外的請求,那么將會消耗大量的時間。為了盡量降低尋道時間,看來我們需要對等待著的請求進行適當?shù)呐判?,而不是簡單的使用FCFS策略。這個過程就叫做磁盤調(diào)度管理。有時候fcfs也被看作是最簡單的磁盤調(diào)度算法。2.最短尋道時間優(yōu)先調(diào)度(SSTF)的設計思想最短時間優(yōu)先算法選擇這樣的進程。要求訪問的磁道,與當前

6、磁頭所在的磁道距離最近,以使每次的尋道時間最短。3.掃描算法(SCAN)的設計思想掃描(SCAN)調(diào)度算法:該算法不僅考慮到欲訪問 的磁道與當前磁道間的距離,更優(yōu)先考慮的是磁頭當前的移動方向。例如,當磁頭正在自里向外移動時,SCAN算法所考慮的下一個訪問對象,應是其欲訪問的磁道,既在當前磁道之外,又是距離最近的。這樣自里向外的訪問,直至再無更外的磁道需要訪問時,才將磁道換向自外向里移動。這時,同樣也是每次選擇這樣的進程來調(diào)度,也就是要訪問的當前位置內(nèi)距離最近者,這樣,磁頭又逐步地從外向里移動,直至再無更里面的磁道要訪問,從而避免了出現(xiàn)“饑餓”現(xiàn)像。4.循環(huán)掃描(CSACN)的設計思想循環(huán)掃描(

7、CSCAN)算法:當磁頭剛從里向外移動而越過了某一磁道時,恰好又有一進程請求訪問此磁道,這時,該里程就必須等待,為了減少這種延遲,CSCAN算法規(guī)定磁頭單向移動,而本實驗過程中我們所設計的是磁頭從里向外移動,而從外向里移動時只須改方向而已,本實驗未實現(xiàn)。但本實驗已完全能演示循環(huán)掃描的全過程。5 代碼及流程1.先來先服務(FCFS)圖 11 FCFS的流程圖2.最短尋道時間優(yōu)先調(diào)度(SSTF) 圖12 SSTF的流程圖3.掃描算法(SCAN) 圖13 SCAN的流程圖 4.循環(huán)掃描(CSCAN)圖14 CSCAN的流程圖 圖15 主函數(shù)的流程圖源代碼:#include"stdio.h&

8、quot;#include"stdlib.h"/#include"iostream.h"#define maxsize 100 /定義最大數(shù)組域/先來先服務調(diào)度算法void FCFS(int array,int m)int sum=0,j,i;int avg;printf("n FCFS調(diào)度結(jié)果: ");for(i=0;i<m;i+)/輸出FCFS磁盤調(diào)度結(jié)果printf("%d ",arrayi);for(i=0,j=1;j<m;i+,j+)sum+=abs(arrayj-arrayi);/累計總的移

9、動距離avg=sum/(m-1);/計算平均尋道長度printf("n 移動的總道數(shù): %d n",sum);printf(" 平均尋道長度: %d n",avg);/最短尋道時間優(yōu)先調(diào)度算法void SSTF(int array,int m)int temp;int k=1;int now,l,r;int i,j,sum=0;int avg;for(i=0;i<m;i+)for(j=i+1;j<m;j+)/對磁道號進行從小到大排列if(arrayi>arrayj)/兩磁道號之間比較temp=arrayi;arrayi=arrayj;a

10、rrayj=temp;for( i=0;i<m;i+)/輸出排序后的磁道號數(shù)組printf("%d ",arrayi);printf("n 請輸入當前的磁道號:");scanf("%d",&now);printf("n SSTF調(diào)度結(jié)果: ");if(arraym-1<=now)/判斷整個數(shù)組里的數(shù)是否都小于當前磁道號 for(i=m-1;i>=0;i-)/將數(shù)組磁道號從大到小輸出printf("%d ",arrayi);sum=now-array0;/計算移動距離el

11、se if(array0>=now)/判斷整個數(shù)組里的數(shù)是否都大于當前磁道號 for(i=0;i<m;i+)/將磁道號從小到大輸出printf("%d ",arrayi);sum=arraym-1-now;/計算移動距離elsewhile(arrayk<now)/逐一比較以確定K值k+;l=k-1;r=k;/確定當前磁道在已排的序列中的位置while(l>=0)&&(r<m)if(now-arrayl)<=(arrayr-now)/判斷最短距離 printf("%d ",arrayl);sum+=now

12、-arrayl;/計算移動距離now=arrayl;l=l-1;else printf("%d ",arrayr);sum+=arrayr-now;/計算移動距離now=arrayr;r=r+1;if(l=-1) for(j=r;j<m;j+) printf("%d ",arrayj);sum+=arraym-1-array0;/計算移動距離else for(j=l;j>=0;j-) printf("%d ",arrayj);sum+=arraym-1-array0;/計算移動距離avg=sum/m;printf(&quo

13、t;n 移動的總道數(shù): %d n",sum);printf(" 平均尋道長度: %d n",avg);/掃描算法void SCAN(int array,int m)/先要給出當前磁道號和移動臂的移動方向int temp;int k=1;int now,l,r,d;int i,j,sum=0;int avg;for(i=0;i<m;i+)for(j=i+1;j<m;j+)if(arrayi>arrayj)/對磁道號進行從小到大排列temp=arrayi;arrayi=arrayj;arrayj=temp;for( i=0;i<m;i+)pri

14、ntf("%d ",arrayi);/輸出排序后的磁道號數(shù)組printf("n 請輸入當前的磁道號:");scanf("%d",&now);if(arraym-1<=now)/判斷整個數(shù)組里的數(shù)是否都小于當前磁道號 printf("n SCAN調(diào)度結(jié)果: ");for(i=m-1;i>=0;i-)printf("%d ",arrayi);/將數(shù)組磁道號從大到小輸出sum=now-array0;/計算移動距離else if(array0>=now)/判斷整個數(shù)組里的數(shù)是否

15、都大于當前磁道號 printf("n SCAN調(diào)度結(jié)果: ");for(i=0;i<m;i+)printf("%d ",arrayi);/將磁道號從小到大輸出sum=arraym-1-now;/計算移動距離elsewhile(arrayk<now)/逐一比較以確定K值k+;l=k-1;r=k;printf("n 請輸入當前移動臂的移動的方向 (1 磁道號增加方向,0磁道號減小方向) : ");scanf("%d",&d);printf("n SCAN調(diào)度結(jié)果: ");if(d

16、=0)for(j=l;j>=0;j-)printf("%d ",arrayj);for(j=r;j<m;j+)printf("%d ",arrayj);sum=now-2*array0+arraym-1;/計算移動距離/磁道號減小方向elsefor(j=r;j<m;j+)printf("%d ",arrayj);for(j=l;j>=0;j-)printf("%d ",arrayj);sum=-now-array0+2*arraym-1;/計算移動距離/磁道號增加方向avg=sum/m;pr

17、intf("n 移動的總道數(shù): %d n",sum);printf(" 平均尋道長度: %d n",avg);/循環(huán)掃描算法void CSCAN(int array,int m)int temp;int k=1;int now,l,r,d;int i,j,sum=0;int avg;for(i=0;i<m;i+)for(j=i+1;j<m;j+)if(arrayi>arrayj)/對磁道號進行從小到大排列temp=arrayi;arrayi=arrayj;arrayj=temp;for( i=0;i<m;i+)printf(&qu

18、ot;%d ",arrayi);/輸出排序后的磁道號數(shù)組printf("n 請輸入當前的磁道號:");scanf("%d",&now);if(arraym-1<=now)/判斷整個數(shù)組里的數(shù)是否都小于當前磁道號 printf("n CSCAN調(diào)度結(jié)果: ");for(i=0;i<m;i+) printf("%d ",arrayi);/將磁道號從小到大輸出sum=now-array0+arraym-1;/計算移動距離else if(array0>=now)/判斷整個數(shù)組里的數(shù)是否都

19、大于當前磁道號 printf("n CSCAN調(diào)度結(jié)果: ");for(i=0;i<m;i+) printf("%d ",arrayi);/將磁道號從小到大輸出sum=arraym-1-now;/計算移動距離elsewhile(arrayk<now)/逐一比較以確定K值k+;l=k-1;r=k;printf("n 請輸入當前移動臂的移動的方向 (1 磁道號增加方向,0磁道號減小方向) : ");scanf("%d",&d);printf("n CSCAN調(diào)度結(jié)果: ");if

20、(d=0)for(j=l;j>=0;j-)printf("%d ",arrayj);for(j=m-1;j>=r;j-)printf("%d ",arrayj);sum=2*(arraym-1-array0)-arrayr+now;/計算移動距離/磁道號減小方向elsefor(j=r;j<m;j+)printf("%d ",arrayj);for(j=0;j<r;j+)printf("%d ",arrayj);sum=2*(arraym-1-array0)+arrayr-1-now;/計算移

21、動距離/磁道號增加方向avg=sum/m;printf("n 移動的總道數(shù): %d n",sum);printf(" 平均尋道長度: %d n",avg);/ 操作界面int main()int c;FILE *fp;/定義指針文件int cidaomaxsize;/定義磁道號數(shù)組int i=0,count;fp=fopen("cidao.txt","r+");/讀取cidao.txt文件if(fp=NULL)/判斷文件是否存在printf("n 請 先 設 置 磁 道! n");exit(0)

22、;while(!feof(fp)/如果磁道文件存在fscanf(fp,"%d",&cidaoi);/調(diào)入磁道號i+;count=i-1;printf("n -n");printf(" 10-11年度OS課程設計-磁盤調(diào)度算法系統(tǒng)n");printf(" 計算機科學與技術(shù)二班n");printf(" 姓名:宋思揚n");printf(" 學號:n");printf(" 電話:*n");printf(" 2010年12月29日n")

23、;printf("n -n");printf("n 磁道讀取結(jié)果:n");for(i=0;i<count;i+)printf("%5d",cidaoi);/輸出讀取的磁道的磁道號printf("n "); while(1)printf("n 算法選擇:n");printf(" 1、先來先服務算法(FCFS)n");printf(" 2、最短尋道時間優(yōu)先算法(SSTF)n");printf(" 3、掃描算法(SCAN)n");pri

24、ntf(" 4、循環(huán)掃描算法(CSCAN)n");printf(" 5. 退出n");printf("n");printf("請選擇:");scanf("%d",&c);if(c>5)break;switch(c)/算法選擇case 1:FCFS(cidao,count);/先來先服務算法printf("n");break;case 2:SSTF(cidao,count);/最短尋道時間優(yōu)先算法printf("n");break;case 3:SCAN(cidao,count);/掃描算法printf("n");break;case 4:CSCAN(cidao,count);/循環(huán)掃描算法printf("n");break;case 5:exit(0);return 0;6 運行結(jié)

溫馨提示

  • 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

提交評論