操作系統實驗四(磁盤調度算法)實驗報告_第1頁
操作系統實驗四(磁盤調度算法)實驗報告_第2頁
操作系統實驗四(磁盤調度算法)實驗報告_第3頁
操作系統實驗四(磁盤調度算法)實驗報告_第4頁
操作系統實驗四(磁盤調度算法)實驗報告_第5頁
已閱讀5頁,還剩14頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、實驗四實驗報告實驗源碼:#include "stdio.h"#include <math.h>#include <stdlib.h> int a20;int i,n,k,init,flag1 = 1;/ 先來先服務 void FCFS(int a,int n,int init)int i,s,sum,temp = 0;int b20;for(i = 0;i < n;i + )bi = ai; s = init; sum = 0; printf("nFCFS 調度結果 :n"); for(i = 0;i < n;i +

2、) / 被訪問的磁道號 printf("%3dt",bi);/ 計算移動距離 temp = abs(s - bi);printf("%3dn",temp); sum += temp; s = bi;printf(" 平均尋道長度 :%.1f%nn",sum * 1.0 / n); / 最短尋道法 void SSTF(int a,int n,int init)int i,j,s,sum = 0,p,temp = 0;int b20;for(i = 0;i < n;i + ) bi = ai;printf("nSSTF 調

3、度結果 :n");for(i = n - 1;i >= 0;i - )s = b0;p = 0;for(j = 0;j <= i;j + ) if(abs(bj - init) < abs(s - init) s = bj;p = j;bp = bi;/ 被訪問的磁道號printf("%3dt",s);/ 計算移動距離temp = abs(s - init);printf("%3dn",temp);sum += temp;init = s;printf(" 平均尋道長度 :%.1f%nn",sum * 1.

4、0 / n); / 掃描算法void SCAN(int a,int n,int init)int i,j,s,sum = 0,p,biaoji,temp = 0,k1; int b20;for(i = 0;i < n;i + )bi = ai;printf("n*SCAN掃描算法*n");printf("1. 移動臂向磁道號減少的方向2.移動臂向磁道號增加的方向printf(" *printf(" 請在下面輸入您的選擇 :");scanf("%d",&k1);switch(k1)case 1: / 磁

5、道號減小方向printf("nSCAN( 磁道號減少的方向 )調度結果 :n");for(i = n - 1;i >= 0;i - )biaoji = 0;for(j = 0;j <= i;j + )if(bj - init < 0)biaoji = 1;p = j;break;if(biaoji = 1)s = bp;for(j = 0;j <= i;j + )if(bj < init && init - bj < init - s) s = bj; p = j;bp = bi;/ 被訪問的磁道號 printf(&quo

6、t;%3dt",s);/ 計算移動距離 temp = init - s;printf("%3dn",temp);sum += temp;init = s;elses = b0;for(j = 0;j <= i;j + )if(bj - init <= s - init)s = bj; p = j;bp = bi;/ 被訪問的磁道號printf("%3dt",s);/ 計算移動距離 temp = abs(init - s);printf("%3dn",temp);sum += temp;init = s;break

7、;case 2: / 磁道號增加方向printf("nSCAN( 磁道號增加方向 )調度結果 :n"); for(i = n - 1;i >= 0;i - )biaoji = 0;for(j = 0;j <= i;j + )if(bj - init > 0)biaoji = 1;p = j; break;if(biaoji = 1)s = bp;for(j = 0;j <= i;j + )if(bj > init && bj - init< s - init)s = bj;p = j;bp = bi;/ 被訪問的磁道號pr

8、intf("%3dt",s);/ 計算移動距離temp = s - init;printf("%3dn",temp);sum += s - init;init = s;elses = b0;for(j = 0;j <= i;j + )if(init - bj <= init - s)s = bj;p = j;bp = bi;/ 被訪問的磁道號printf("%3dt",s);/ 計算移動距離temp = abs(init - s);printf("%3dn",temp); sum += temp; in

9、it = s;break;default:printf("n 請輸入 1 - 2 之間的整數 !n");break;printf(" 平均尋道長度 :%.1f%nn",sum*1.0/n); / 循環算法void CSCAN(int a,int n,int init)int temp;int k = 1;int l,r,d;int b20;int i,j,sum = 0;int init_temp = init;for(i = 0;i < n;i + ) bi = ai;for(i = 0;i < n;i + )for(j = i + 1;j

10、 < n;j + ) if(bi > bj)/ 對磁道號進行從小到大排列 temp = bi;bi = bj; bj = temp; if(bn - 1 <= init)/ 判斷整個數組里的數是否都小于當前磁道號 printf("nCSCAN 調度結果 :n");for(i = 0;i < n;i + )/ 被訪問的磁道號printf("%3dt",bi); / 計算移動距離printf("%3dn",abs(init_temp - bi); init_temp = bi;sum = init - b0 + b

11、n - 1;/ 計算移動距離else if(b0 >= init)/ 判斷整個數組里的數是否都大于當前磁道號printf("nCSCAN 調度結果 :n");for(i = 0;i < n;i + )/ 被訪問的磁道號 printf("%3dt",bi);/ 計算移動距離 printf("%3dn",abs(init_temp - bi); init_temp = bi;sum = bn - 1 - init;/ 計算移動距離elsewhile(bk < init)/ 逐一比較以確定 K 值 k + ;l = k -

12、 1;r = k;printf("n*循環算法);n");printf("1. 移動臂向磁道號減少的方向2.移動臂向磁道號增加的方向*n");printf(printf(" 請在下面輸入您的選擇 :");scanf("%d",&d); printf("nCSCAN 調度結果 :n");switch(d)case 1:/ 磁道號減小方向for(j = l;j >= 0;j - ) / 被訪問的磁道號printf("%3dt",bj); / 計算移動距離printf

13、("%3dn",abs(init_temp - bj); init_temp = bj;for(j = n - 1;j >= r;j - )/ 被訪問的磁道號printf("%3dt",bj);/ 計算移動距離printf("%3dn",abs(init_temp - bj); init_temp = bj;sum = 2*(bn - 1 - b0) - br + init;/ 計算移動距離 break;case 2:/ 磁道號增加方向for(j = r;j < n;j + )/ 被訪問的磁道號printf("%

14、3dt",bj);/ 計算移動距離printf("%3dn",abs(init_temp - bj); init_temp = bj;for(j = 0;j < r;j + )/ 被訪問的磁道號printf("%3dt",bj);/ 計算移動距離printf("%3dn",abs(init_temp - bj); init_temp = bj;sum = 2 * (bn - 1 - b0) + br - 1 - init;/ 計算移動距離 break;default:printf("n 請輸入 1 - 2 之

15、間的整數 !n");break;printf("n 平均尋道長度: %.1f%nn",sum*1.0/n);void DataInput()printf(" 請輸入需要訪問的磁道總數: "); scanf("%d",&n);printf("n");for(i = 0;i < n;i + )printf(" 需要訪問的磁道 %d:",i + 1); scanf("%d",&ai);printf("n");printf(&quo

16、t; 請輸入指針所在磁道 :"); scanf("%d",&init);printf("n");system("cls");/ 顯示需要訪問的磁道printf(" 需要訪問的磁道序列為: ");for(i = 0;i < n;i + )printf("%d ",ai);printf("n");void main()DataInput();int menu=-1;while(true)n");*n");(SSTF)n");n

17、");n");n");*n");printf("n*n"); printf(" 磁盤調度算法 printf("*n"); printf("*printf("1. 先來先服務 (FCFS) 2.最短尋道時間優先 printf("3. 掃描算法 (SCAN) 4.循環算法 (CSCAN) printf("5. 退出 (EXIT)printf("0. 返回上一層 (RETURN) printf("* printf("*n"); pr

18、intf(" 請在下面輸入您的選擇 :"); scanf("%d",&menu);switch(menu)case 1:FCFS(a,n,init); break;case 2:SSTF(a,n,init); break;case 3:SCAN(a,n,init); break;case 4:CSCAN(a,n,init); break;case 5:exit(0); break;case 0: system("cls"); DataInput(); break;default:break;if(menu != 1 &

19、& menu != 2 && menu != 3 && menu != 4 && menu !=5 && menu !=0) system("cls");printf("n 請輸入 0 - 5 之間的整數! n"); continue;實驗結果截圖:程序運行:輸入相關數據:進入選擇算法界面:需要訪冋的磯道序列為磁盤調度算法<FCF£><SCAN)<EXIT>|XiM 鋼擁HtHtFXXKJOCiMiM眞遅泛疑負耳XXKXiMiMiM豪抵怔<:«耳耳<3<:算酬荼底怔:HEXX疑劌離峙KNNKX捕列猶賓耳耳)<)<址:摘轉1<*耳KX;KN;MIC恆耳 請在下面輸入您的選擇;口最短尋道時間優先算法:掃描算法: £:件業 操作系統實驗f i 口 i 5

溫馨提示

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

評論

0/150

提交評論