C語言 磁碟排程模擬

2021-08-11 15:11:56 字數 1812 閱讀 1181

//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 使用高階語言實現演算法,並比較不同演算法的優缺點。磁碟排程在多道程式設計的計算機系統中,各個程序可能會不斷提出不同的對磁碟進行讀 寫操作的請求。由於有時候這些程序的傳送請求的速度比磁碟響應的還要快,因此我們有必要為每個磁碟裝置建立乙個等待佇列...