//created by herbert on nov 24,2017
/*c語言 磁碟排程模擬
什麼是磁碟排程?
磁碟排程指待的是訪問的磁軌時,當前磁頭訪問的方式(也指待是演算法)。
磁碟的訪問也是一種i/o裝置的訪問,在資料訪問中需要知道如何去訪問從記憶體以及i/o傳輸過來的資料。
怎麼樣去儲存或者是讀取在磁碟上面的資料。磁碟的排程的演算法有很多種,例如:
fifo:先進先出的排程策略,這個策略具有公平的優點,因為每個請求都會得到處理,並且是按照接收到的順序進行處理。
sstf:選擇使磁頭從當前位置開始移動最少的磁碟i/o請求,所以sstf總是選擇導致最小尋道時間的請求。
scan:scan要求磁頭僅僅沿乙個方向移動,並在途中滿足所有未完成的請求,知道它到達這個方向上的最後乙個磁軌,或者在這個方向上沒有其他請求為止。
c-scan:把掃瞄限定在乙個方向,當訪問到某個方向的最後乙個磁軌時,磁軌返回磁碟相反方向磁軌的末端,並再次開始掃瞄。
模擬內容
程式設計序模擬磁碟移臂排程,假定磁碟有200個柱面,編號為0~199,當前訪問臂的位置在143號柱面上,並剛剛完成了128號柱面的服務請求,
如果請求的先後順序為:86,145,93,179,95,150,103,176,132。試分別採用:
(1) 先來先服務尋道演算法fcfs。(2) 最短尋道時間優先演算法sstf。(3) 掃瞄演算法scan。(4) 迴圈掃瞄演算法cscan。輸出訪問臂的移動順序,並分別計算出訪問臂的移動總量。
*///演算法實現:
#include
#include
void fcfs(int f,int );
void sstf(int m,int );
void scan(int d,int);
void cscan(int e,int);
void sort(int a,int);
int main()
; fcfs(a,now);
int aa=;
sstf(aa,now);
// int aaa=;
// scan(aaa,now);
int aaaa=;
cscan(aaaa,now);
return0;}
void fcfs(int f,int fnow)
printf("\nfcfs和為:%d\n",s);
}void sstf(int m,int mnow)
}printf("%d ",m[x]);
sum =sum +tmp;
mnow = m[x];
for(k=0;k<8-x-n;k++)
}printf("\nsstf道數和為:%d\n",sum);
}// void scan(int d,int dnow)
// }
// for(x = y; x < 8; x++)
// for(x = y-1;x>=0;x--)
// printf("\nscan道數和為:%d\n",sum);
// }
void cscan(int e,int enow)
}for(x = y; x < 8; x++ )
for(x = 0;x < y; x++)
printf("\n電梯演算法道數和為:%d\n",sum);
模擬磁碟排程演算法 c
測試結果 流程圖 實現 include include define inf 999999typedef struct seqlist sstf演算法 void sstf int n,seqlist l,int temp l k time false sum min printf d t t d t...
磁碟排程演算法設計與實現 C語言
一 設計分析 尋道時間ts是磁頭從當前磁軌移動到目標磁軌所需要的時間 旋轉延遲時間tw是當磁頭停留在目標磁軌後,目標物理塊從當前位置旋轉到磁頭位置的時間 讀寫時間trw是目標物理塊內容與記憶體中對應交換的時間。磁碟排程的原則是公平和高吞吐量,衡量指標有訪問時間t和平均訪問時間ta t ts tw t...
作業系統實驗6 磁碟排程模擬
1 掌握fcfs sstf scan等磁碟排程演算法 2 使用高階語言實現演算法,並比較不同演算法的優缺點。磁碟排程在多道程式設計的計算機系統中,各個程序可能會不斷提出不同的對磁碟進行讀 寫操作的請求。由於有時候這些程序的傳送請求的速度比磁碟響應的還要快,因此我們有必要為每個磁碟裝置建立乙個等待佇列...