磁盤調(diào)度算法文檔_第1頁(yè)
磁盤調(diào)度算法文檔_第2頁(yè)
磁盤調(diào)度算法文檔_第3頁(yè)
磁盤調(diào)度算法文檔_第4頁(yè)
磁盤調(diào)度算法文檔_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)操作系統(tǒng)原理及應(yīng)用課程設(shè)計(jì)報(bào)告磁盤調(diào)度算法 學(xué)院(系): 計(jì)算機(jī)科學(xué)與工程學(xué)院 班 級(jí): 37-5 學(xué)號(hào) 學(xué)生姓名: 時(shí)間: 從 2013 年 12 月16日 到 2013 年12月20日1、課程設(shè)計(jì)的目的本課程設(shè)計(jì)是學(xué)生學(xué)習(xí)完操作系統(tǒng)原理及應(yīng)用課程后,進(jìn)行的一次全面的綜合訓(xùn)練,通過(guò)課程設(shè)計(jì),讓學(xué)生更好地掌握操作系統(tǒng)的原理及實(shí)現(xiàn)方法,加深對(duì)操作系統(tǒng)基礎(chǔ)理論和重要算法的理解,加強(qiáng)學(xué)生的動(dòng)手能力。2、課程設(shè)計(jì)的內(nèi)容及要求編程序?qū)崿F(xiàn)下述磁盤調(diào)度算法,并求出每種算法的平均尋道長(zhǎng)

2、度:要求設(shè)計(jì)主界面以靈活選擇某算法,且以下算法都要實(shí)現(xiàn)1、先來(lái)先服務(wù)算法(FCFS)2、最短尋道時(shí)間優(yōu)先算法(SSTF)3、掃描算法(SCAN)4、循環(huán)掃描算法(CSCAN)3、實(shí)現(xiàn)原理磁盤是可供多個(gè)進(jìn)程共享的設(shè)備,當(dāng)有多個(gè)進(jìn)程都要求訪問(wèn)磁盤時(shí),應(yīng)采用一種最佳調(diào)度算法,以使各進(jìn)程對(duì)磁盤的平均訪問(wèn)時(shí)間最小。由于在訪問(wèn)磁盤的時(shí)間中,主要是尋道時(shí)間,因此,磁盤調(diào)度的目標(biāo)是使磁盤的平均尋道時(shí)間最少。目前常用的磁盤調(diào)度算法有先來(lái)先服務(wù)、最短尋道時(shí)間優(yōu)先、掃描和循環(huán)掃描等算法。其中,平均尋道長(zhǎng)度(L)為所有磁道所需移動(dòng)距離之和除以總的所需訪問(wèn)的磁道數(shù)(N),即:L=(M1+M2+Mi+MN)/N其中Mi為

3、磁頭從上一各磁道到這個(gè)磁道所需移動(dòng)的距離。4、算法1.先來(lái)先服務(wù)算法(FCFS)這是一種最簡(jiǎn)單的磁盤調(diào)度算法。它根據(jù)進(jìn)程請(qǐng)求訪問(wèn)磁盤的先后次序進(jìn)行調(diào)度。此算法只考慮訪問(wèn)者提出訪問(wèn)請(qǐng)求的先后次序,按照先后次序依次訪問(wèn)磁道號(hào)。移動(dòng)距離等于上一個(gè)被訪問(wèn)的磁道號(hào)減去當(dāng)前訪問(wèn)的磁道號(hào)的絕對(duì)值,平均尋道長(zhǎng)度等于所有移動(dòng)距離之和除以磁道被訪問(wèn)的次數(shù)。2.短尋道時(shí)間優(yōu)先算法(SSTF)該算法選擇這樣的進(jìn)程,其要求訪問(wèn)的磁道與當(dāng)前磁頭所在的磁道距離最近,以使每次的尋道時(shí)間最短,而不管訪問(wèn)者到來(lái)的先后次序。實(shí)現(xiàn)時(shí)可以先對(duì)磁道號(hào)進(jìn)行從小到大排序保存在數(shù)組里,然后與當(dāng)前磁道號(hào)比較,選擇離自己最近的訪問(wèn),每比較一次,當(dāng)

4、前磁道號(hào)也跟著變化,移動(dòng)距離等于上一個(gè)被訪問(wèn)的磁道號(hào)減去當(dāng)前訪問(wèn)的磁道號(hào)的絕對(duì)值。但當(dāng)數(shù)組里的最大值小于當(dāng)前磁道號(hào)時(shí),就逆序訪問(wèn),此時(shí)移動(dòng)距離的和就等于當(dāng)前磁道號(hào)減去數(shù)組中最小數(shù);當(dāng)數(shù)組中最小的數(shù)大于當(dāng)前磁道號(hào)時(shí),就正序訪問(wèn),此時(shí)移動(dòng)距離的和等于數(shù)組中最大值減當(dāng)前磁道號(hào),平均尋道長(zhǎng)度等于所有移動(dòng)距離之和除以磁道被訪問(wèn)的次數(shù)。3.掃描算法(SCAN)SCAN 算法又稱電梯調(diào)度算法。該算法先考慮磁頭的移動(dòng)方向,再考慮距離近的訪問(wèn)。所以可以對(duì)即將訪問(wèn)的磁道號(hào)進(jìn)行從小到大排序保存在數(shù)組里,然后與當(dāng)前磁道號(hào)比較,當(dāng)磁頭移動(dòng)方向向磁道號(hào)增加的方向移動(dòng)時(shí),就先依次訪問(wèn)比當(dāng)前磁道號(hào)大的數(shù),再逆向訪問(wèn)比自己小的

5、數(shù);當(dāng)磁頭移動(dòng)方向是向磁道號(hào)減小的方向時(shí)就先訪問(wèn)比自己的小的,然后逆向訪問(wèn)比自己大的,移動(dòng)距離等于上一個(gè)被訪問(wèn)的磁道號(hào)減去當(dāng)前訪問(wèn)的磁道號(hào)的絕對(duì)值。但當(dāng)數(shù)組里的最大值小于當(dāng)前磁道號(hào)時(shí),兩種方向都是逆序?qū)Υ诺捞?hào)訪問(wèn),此時(shí)移動(dòng)距離的和就等于當(dāng)前磁道號(hào)減去數(shù)組中最小數(shù);當(dāng)數(shù)組中最小的數(shù)大于當(dāng)前磁道號(hào)時(shí),兩種方向都是正序?qū)Υ诺捞?hào)訪問(wèn),此時(shí)移動(dòng)距離的和等于數(shù)組中最大值減當(dāng)前磁道號(hào),平均尋道長(zhǎng)度等于所有移動(dòng)距離之和除以磁道被訪問(wèn)的次數(shù)。4.循環(huán)掃描算法(CSCAN)CSCAN算法是在SCAN算法的基礎(chǔ)上規(guī)定磁頭單向移動(dòng),即掃描時(shí)要么向磁道號(hào)增加的方向的訪問(wèn),要么向磁道號(hào)減小的方向訪問(wèn)。所以可以對(duì)即將訪問(wèn)的

6、磁道號(hào)進(jìn)行從小到大排序保存在數(shù)組里,然后與當(dāng)前磁道號(hào)比較,當(dāng)磁頭移動(dòng)方向向磁道號(hào)增加的方向移動(dòng)時(shí),就先依次訪問(wèn)比當(dāng)前磁道號(hào)大的數(shù),再返回磁道最里面朝增加的方向訪問(wèn)比自己小的數(shù);當(dāng)磁頭移動(dòng)方向是向磁道號(hào)減小的方向時(shí)就先訪問(wèn)比自己的小的,然后返回到磁道最外層訪問(wèn)比自己大的,移動(dòng)距離等于上一個(gè)被訪問(wèn)的磁道號(hào)減去當(dāng)前訪問(wèn)的磁道號(hào)的絕對(duì)值。但當(dāng)向磁道號(hào)增加的方向時(shí),數(shù)組里的最大值小于當(dāng)前磁道號(hào)或數(shù)組中最小的數(shù)大于當(dāng)前磁道號(hào)時(shí),都是正序訪問(wèn);而當(dāng)向磁道號(hào)減小的方向時(shí),數(shù)組里的最大值小于當(dāng)前磁道號(hào)或數(shù)組中最小的數(shù)大于當(dāng)前磁道號(hào)時(shí),都是逆序訪問(wèn);此時(shí)移動(dòng)距離的和等于數(shù)組中最大值減當(dāng)前磁道號(hào),平均尋道長(zhǎng)度等于所

7、有移動(dòng)距離之和除以磁道被訪問(wèn)的次數(shù)。5、程序中使用的數(shù)據(jù)結(jié)構(gòu)及使用的變量說(shuō)明和作用int cidao = new int1000;/將被訪問(wèn)的磁道號(hào)存入cidao數(shù)組int sum = 0;/求移動(dòng)距離之和double avg = 0;/求平均尋道時(shí)間string str = txtnum.Text.Split(,);/從txtnum里面獲取訪問(wèn)的磁道號(hào)int now = Convert.ToInt32(txtnow.Text);/獲取當(dāng)前的磁道號(hào)for (int i = 0; i str.Length; i+)/將獲取的磁道號(hào)存入磁道號(hào)數(shù)組cidaoi = Convert.ToInt32(s

8、tri);private void btnFCFS_Click(object sender, EventArgs e)先來(lái)先服務(wù)FCFS算法private void btnSSTF_Click(object sender, EventArgs e)最短尋道時(shí)間優(yōu)先SSTFprivate void btnSCANhigh_Click(object sender, EventArgs e)從里向外掃描private void btnSCANlow_Click(object sender, EventArgs e)從外向里掃描private void btnCSCANhigh_Click(objec

9、t sender, EventArgs e)從里向外循環(huán)掃描private void btnCSCANlow_Click(object sender, EventArgs e)從外向里循環(huán)掃描private void btnexit_Click(object sender, EventArgs e)退出窗體private void txtnum_KeyDown(object sender, KeyEventArgs e)快捷鍵Tab選擇輸入框關(guān)鍵算法實(shí)現(xiàn)流程圖先來(lái)先服務(wù)FCFS算法:最短尋道時(shí)間算法:掃描算法:向磁道號(hào)增加的方向:從磁道號(hào)減小的方向:循環(huán)掃描算法: 從磁道號(hào)增加的方向:從磁道號(hào)

10、減小的方向:實(shí)現(xiàn)代碼 / / 先來(lái)先服務(wù)FCFS / / / private void btnFCFS_Click(object sender, EventArgs e) txtresult.Clear();/清除顯示 int cidao = new int1000;/被訪問(wèn)的磁道號(hào)數(shù)組 int sum = 0;/移動(dòng)距離之和 double avg = 0;/平均尋道時(shí)間 string str = txtnum.Text.Split(,);/從txtnum里面獲取訪問(wèn)的磁道號(hào) int now = Convert.ToInt32(txtnow.Text);/當(dāng)前的磁道號(hào) for (int i =

11、 0; i str.Length; i+) /將獲取的磁道號(hào)存入磁道號(hào)數(shù)組 cidaoi = Convert.ToInt32(stri); sum += Math.Abs(now - cidao0);/當(dāng)前的磁道號(hào)減去磁道號(hào)數(shù)組中的第一個(gè)值取絕對(duì)值 for (int i = 0; i str.Length; i+) /輸出FCFS磁盤調(diào)度結(jié)果 txtresult.Text = txtresult.Text + cidaoi + ,; for (int i = 0, j = 1; j str.Length; i+, j+) /累計(jì)總的移動(dòng)距離 sum += Math.Abs(cidaoj - c

12、idaoi); avg = (double)sum / str.Length;/平均尋道長(zhǎng)度 lblsum.Text = 總移動(dòng)距離: + sum.ToString();/在Label中顯示總移動(dòng)距離 lblavg.Text = 平均尋道長(zhǎng)度: + avg.ToString(0.00);/在Label中顯示平均尋道時(shí)間 / / 最短尋道時(shí)間優(yōu)先SSTF / / / private void btnSSTF_Click(object sender, EventArgs e) txtresult.Clear();/清除顯示 int cidao = new int1000;/被訪問(wèn)的磁道號(hào)數(shù)組 in

13、t sum = 0;/移動(dòng)距離之和 double avg = 0;/平均尋道時(shí)間 int temp;/中間變量 int k = 1; int m, n; string str = txtnum.Text.Split(,);/從txtnum里面獲取訪問(wèn)的磁道號(hào) int now = Convert.ToInt32(txtnow.Text);/當(dāng)前的磁道號(hào) for (int i = 0; i str.Length; i+) /將獲取的磁道號(hào)存入磁道號(hào)數(shù)組 cidaoi = Convert.ToInt32(stri); /對(duì)磁道號(hào)進(jìn)行從小到大排列 for (int i = 0; i str.Lengt

14、h; i+) for (int j = i + 1; j cidaoj) temp = cidaoi; cidaoi = cidaoj; cidaoj = temp; /數(shù)組的最后一個(gè)小于當(dāng)前磁道號(hào),則數(shù)組逆序輸出,此時(shí)的移動(dòng)距離之和等于當(dāng)前磁道號(hào)減去最小的磁道號(hào) if (cidaostr.Length - 1 = 0; i-) txtresult.Text = txtresult.Text + cidaoi + ,; sum = now - cidao0;/移動(dòng)距離之和 /數(shù)組的第一個(gè)數(shù)大于當(dāng)前磁道號(hào),正序輸出,此時(shí)的移動(dòng)距離之和等于最大的磁道號(hào)減去當(dāng)前磁道號(hào) else if (cidao0

15、 = now) for (int i = 0; i str.Length; i+) txtresult.Text = txtresult.Text + cidaoi + ,; sum = cidaostr.Length - 1 - now;/移動(dòng)距離之和 /當(dāng)前磁道號(hào)的大小介于數(shù)組的最大值與最小值之間 else /k的初始值為,從數(shù)組的第二個(gè)數(shù)開始逐一與當(dāng)前磁道號(hào)比較 while (cidaok = 0) & (n str.Length) /當(dāng)前位置的前一個(gè)磁道號(hào)離當(dāng)前磁道號(hào)近 if (now - cidaom) = (cidaon - now) txtresult.Text = txtres

16、ult.Text + cidaom + ,;/輸出 sum += now - cidaom;/移動(dòng)距離之和 now = cidaom;/當(dāng)前磁道號(hào)改變 m = m - 1;/與數(shù)組的前半部分比較 /當(dāng)前位置的后一個(gè)磁道號(hào)離當(dāng)前磁道號(hào)近 else txtresult.Text = txtresult.Text + cidaon + ,; ;/輸出 sum += cidaon - now;/移動(dòng)距離之和 now = cidaon;/當(dāng)前磁道號(hào)改變 n = n + 1;/與數(shù)組的后半部分比較 /數(shù)組的第一個(gè)數(shù)比當(dāng)前磁道號(hào)大 if (m = -1) for (int j = n; j = 0; j-)

17、/輸出 txtresult.Text = txtresult.Text + cidaoj + ,; sum += cidaostr.Length - 1 - cidao0;/移動(dòng)距離之和 avg = (double)sum / str.Length;/平均尋道長(zhǎng)度 lblsum.Text = 總移動(dòng)距離: + sum.ToString();/在Label中顯示總移動(dòng)距離 lblavg.Text = 平均尋道長(zhǎng)度: + avg.ToString(0.00);/在Label中顯示平均尋道時(shí)間 / / 磁道號(hào)增加的方向掃描 / / / private void btnSCANhigh_Click(o

18、bject sender, EventArgs e) txtresult.Clear();/清除顯示 int cidao = new int1000;/被訪問(wèn)的磁道號(hào)數(shù)組 int sum = 0;/移動(dòng)距離之和 double avg = 0;/平均尋道時(shí)間 int temp;/中間變量 int k = 1; int m, n; string str = txtnum.Text.Split(,);/從txtnum里面獲取訪問(wèn)的磁道號(hào) int now = Convert.ToInt32(txtnow.Text);/當(dāng)前的磁道號(hào) for (int i = 0; i str.Length; i+) /

19、將獲取的磁道號(hào)存入磁道號(hào)數(shù)組 cidaoi = Convert.ToInt32(stri); /對(duì)磁道號(hào)進(jìn)行從小到大排列 for (int i = 0; i str.Length; i+) for (int j = i + 1; j cidaoj) temp = cidaoi; cidaoi = cidaoj; cidaoj = temp; /數(shù)組的最后一個(gè)小于當(dāng)前磁道號(hào),則數(shù)組逆序輸出,此時(shí)的移動(dòng)距離之和等于當(dāng)前磁道號(hào)減去最小的磁道號(hào) if (cidaostr.Length - 1 = 0; i-) txtresult.Text = txtresult.Text + cidaoi + ,;

20、/移動(dòng)距離之和 sum = now - cidao0; /數(shù)組的第一個(gè)數(shù)大于當(dāng)前磁道號(hào),正序輸出,此時(shí)的移動(dòng)距離之和等于最大的磁道號(hào)減去當(dāng)前磁道號(hào) else if (cidao0 = now) for (int i = 0; i str.Length; i+) txtresult.Text = txtresult.Text + cidaoi + ,; sum = cidaostr.Length - 1 - now;/移動(dòng)距離之和 /當(dāng)前磁道號(hào)的大小介于數(shù)組的最大值與最小值之間 else /k的初始值為,從數(shù)組的第二個(gè)數(shù)開始逐一與當(dāng)前磁道號(hào)比較 while (cidaok now) k+; /k

21、+1比當(dāng)前磁道號(hào)大的時(shí)候 m = k - 1; n = k; for (int j = n; j = 0; j-) txtresult.Text = txtresult.Text + cidaoj + ,; /sum = cidaostr.Length - 1 - cidao0; sum =2 * cidaostr.Length - 1 - now - cidao0; avg = (double)sum / str.Length;/平均尋道長(zhǎng)度 lblsum.Text = 總移動(dòng)距離: + sum.ToString();/在Label中顯示總移動(dòng)距離 lblavg.Text = 平均尋道長(zhǎng)度:

22、 + avg.ToString(0.00);/在Label中顯示平均尋道時(shí)間 / / 磁道號(hào)減小的方向掃描 / / / private void btnSCANlow_Click(object sender, EventArgs e) txtresult.Clear();/清除顯示 int cidao = new int1000;/被訪問(wèn)的磁道號(hào)數(shù)組 int sum = 0;/移動(dòng)距離之和 double avg = 0;/平均尋道時(shí)間 int temp;/中間變量 int k = 1; int m, n; string str = txtnum.Text.Split(,);/從txtnum里面

23、獲取訪問(wèn)的磁道號(hào) int now = Convert.ToInt32(txtnow.Text);/當(dāng)前的磁道號(hào) for (int i = 0; i str.Length; i+) /將獲取的磁道號(hào)存入磁道號(hào)數(shù)組 cidaoi = Convert.ToInt32(stri); /對(duì)磁道號(hào)進(jìn)行從小到大排列 for (int i = 0; i str.Length; i+) for (int j = i + 1; j cidaoj) temp = cidaoi; cidaoi = cidaoj; cidaoj = temp; /數(shù)組的最后一個(gè)小于當(dāng)前磁道號(hào),則數(shù)組逆序輸出,此時(shí)的移動(dòng)距離之和等于當(dāng)前

24、磁道號(hào)減去最小的磁道號(hào) if (cidaostr.Length - 1 = 0; i-) txtresult.Text = txtresult.Text + cidaoi + ,; sum = now - cidao0;/移動(dòng)距離之和 /數(shù)組的第一個(gè)數(shù)大于當(dāng)前磁道號(hào),正序輸出,此時(shí)的移動(dòng)距離之和等于最大的磁道號(hào)減去當(dāng)前磁道號(hào) else if (cidao0 = now) for (int i = 0; i str.Length; i+) txtresult.Text = txtresult.Text + cidaoi + ,; sum = cidaostr.Length - 1 - now;/

25、移動(dòng)距離之和 /當(dāng)前磁道號(hào)的大小介于數(shù)組的最大值與最小值之間 else /k的初始值為,從數(shù)組的第二個(gè)數(shù)開始逐一與當(dāng)前磁道號(hào)比較 while (cidaok = 0; j-)/比當(dāng)前磁道號(hào)小的磁道數(shù)組的左邊輸出 txtresult.Text = txtresult.Text + cidaoj + ,; /sum = now - cidao0; for (int j = n; j str.Length; j+)/比當(dāng)前磁道號(hào)大的磁道數(shù)組的右邊輸出 txtresult.Text = txtresult.Text + cidaoj + ,; /sum = cidaostr.Length - 1 -

26、cidao0; sum = now - cidao0 + cidaostr.Length - 1 - cidao0; avg = (double)sum / str.Length;/平均尋道長(zhǎng)度 lblsum.Text = 總移動(dòng)距離: + sum.ToString();/在Label中顯示總移動(dòng)距離 lblavg.Text = 平均尋道長(zhǎng)度: + avg.ToString(0.00);/在Label中顯示平均尋道時(shí)間 / / 磁道號(hào)增加的方向循環(huán)掃描 / / / private void btnCSCANhigh_Click(object sender, EventArgs e) txtre

27、sult.Clear();/清除顯示 int cidao = new int1000;/被訪問(wèn)的磁道號(hào)數(shù)組 int sum = 0;/移動(dòng)距離之和 double avg = 0;/平均尋道時(shí)間 int temp;/中間變量 int k = 1; int m, n; string str = txtnum.Text.Split(,);/從txtnum里面獲取訪問(wèn)的磁道號(hào) int now = Convert.ToInt32(txtnow.Text);/當(dāng)前的磁道號(hào) for (int i = 0; i str.Length; i+) /將獲取的磁道號(hào)存入磁道號(hào)數(shù)組 cidaoi = Convert.

28、ToInt32(stri); /對(duì)磁道號(hào)進(jìn)行從小到大排列 for (int i = 0; i str.Length; i+) for (int j = i + 1; j cidaoj) temp = cidaoi; cidaoi = cidaoj; cidaoj = temp; /數(shù)組的最后一個(gè)小于當(dāng)前磁道號(hào),則數(shù)組正序輸出,此時(shí)的移動(dòng)距離之和等于最大的磁道號(hào)減去當(dāng)前磁道號(hào) if (cidaostr.Length - 1 = now) for (int i = 0; i = now) for (int i = 0; i str.Length; i+) txtresult.Text = txtr

29、esult.Text + cidaoi + ,; sum = cidaostr.Length - 1 - now;/移動(dòng)距離之和 /當(dāng)前磁道號(hào)的大小介于數(shù)組的最大值與最小值之間 else /k的初始值為,從數(shù)組的第二個(gè)數(shù)開始逐一與當(dāng)前磁道號(hào)比較 while (cidaok now) k+; /k+1比當(dāng)前磁道號(hào)大的時(shí)候 m = k - 1; n = k; for (int j = n; j str.Length; j+)/輸出 txtresult.Text = txtresult.Text + cidaoj + ,; /sum = cidaostr.Length - 1 - now;cidao

30、str.Length - 1 - cidao0 + cidaon - cidao0; for (int j = 0; j n; j+) txtresult.Text = txtresult.Text + cidaoj + ,; /sum = cidaostr.Length - 1 - cidao0 + cidaon-1 - cidao0; sum = cidaon-1 + 2 * (cidaostr.Length - 1 - cidao0) - now; avg = (double)sum / str.Length;/平均尋道長(zhǎng)度 lblsum.Text = 總移動(dòng)距離: + sum.ToSt

31、ring();/在Label中顯示總移動(dòng)距離 lblavg.Text = 平均尋道長(zhǎng)度: + avg.ToString(0.00);/在Label中顯示平均尋道時(shí)間 / / 磁道號(hào)減小的方向循環(huán)掃描 / / / private void btnCSCANlow_Click(object sender, EventArgs e) txtresult.Clear();/清除顯示 int cidao = new int1000;/被訪問(wèn)的磁道號(hào)數(shù)組 int sum = 0;/移動(dòng)距離之和 double avg = 0;/平均尋道時(shí)間 int temp;/中間變量 int k = 1; int m,

32、n; string str = txtnum.Text.Split(,);/從txtnum里面獲取訪問(wèn)的磁道號(hào) int now = Convert.ToInt32(txtnow.Text);/當(dāng)前的磁道號(hào) for (int i = 0; i str.Length; i+) /將獲取的磁道號(hào)存入磁道號(hào)數(shù)組 cidaoi = Convert.ToInt32(stri); /對(duì)磁道號(hào)進(jìn)行從小到大排列 for (int i = 0; i str.Length; i+) for (int j = i + 1; j cidaoj) temp = cidaoi; cidaoi = cidaoj; cidao

33、j = temp; /數(shù)組的最后一個(gè)小于當(dāng)前磁道號(hào),則數(shù)組逆序輸出,此時(shí)的移動(dòng)距離之和等于當(dāng)前磁道號(hào)減去最小的磁道號(hào) if (cidaostr.Length - 1 = 0; i-) txtresult.Text = txtresult.Text + cidaoi + ,; sum = now - cidao0;/移動(dòng)距離之和 /數(shù)組的第一個(gè)數(shù)大于當(dāng)前磁道號(hào),逆序輸出,此時(shí)的移動(dòng)距離之和等于當(dāng)前磁道號(hào)減去最小的磁道號(hào) else if (cidao0 = now) for (int i = str.Length - 1; i = 0; i-) txtresult.Text = txtresult

34、.Text + cidaoi + ,; sum = cidaostr.Length - 1 - now;/移動(dòng)距離之和 /當(dāng)前磁道號(hào)的大小介于數(shù)組的最大值與最小值之間 else /k的初始值為,從數(shù)組的第二個(gè)數(shù)開始逐一與當(dāng)前磁道號(hào)比較 while (cidaok = 0; j-)/輸出 txtresult.Text = txtresult.Text + cidaoj + ,; for (int j = str.Length-1; j = n; j-) txtresult.Text = txtresult.Text + cidaoj + ,; sum = now - cidaon + 2 * (

35、cidaostr.Length - 1 - cidao0); avg = (double)sum / str.Length;/平均尋道長(zhǎng)度 lblsum.Text = 總移動(dòng)距離: + sum.ToString();/在Label中顯示總移動(dòng)距離 lblavg.Text = 平均尋道長(zhǎng)度: + avg.ToString(0.00);/在Label中顯示平均尋道時(shí)間 / / 退出 / / / private void btnexit_Click(object sender, EventArgs e) Application.Exit(); / / 快捷鍵Tab選擇輸入框 / / / privat

36、e void txtnum_KeyDown(object sender, KeyEventArgs e) if (e.KeyCode = Keys.Return) this.txtnum.Focus(); 8、軟件運(yùn)行環(huán)境及限制Microsoft Visual Studio 2005 C# Windows應(yīng)用程序9、結(jié)果輸出及分析編譯并運(yùn)行程序,彈出來(lái)磁盤調(diào)度算法窗體,輸入當(dāng)前磁道號(hào)和寫一個(gè)被訪問(wèn)的磁道號(hào)(磁道號(hào)間用逗號(hào)隔開),然后可以根據(jù)提供的空間選擇不同的算法實(shí)現(xiàn)對(duì)輸入的磁道號(hào)的訪問(wèn);按照教材196頁(yè)的例題輸入相應(yīng)的數(shù)據(jù);2、點(diǎn)擊先來(lái)先服務(wù)(FCFS)按鈕實(shí)現(xiàn)算法,顯示結(jié)果如下:此算法按照請(qǐng)求訪問(wèn)的先后順序訪問(wèn)磁道號(hào),所以輸出結(jié)果和輸入結(jié)果的順序一致,平均尋道長(zhǎng)度為訪問(wèn)的磁道號(hào)之間的移動(dòng)距離之和除以被訪問(wèn)的磁道數(shù)。3、點(diǎn)擊最短尋道時(shí)間優(yōu)先(SSTF)按鈕實(shí)現(xiàn)算法,顯示結(jié)果如下:此算法首先按照距離當(dāng)前磁道號(hào)最近的先訪問(wèn),然后以才被訪問(wèn)的磁道號(hào)為基準(zhǔn),又找離其最近的訪問(wèn),以此類推。平均尋道長(zhǎng)度為訪問(wèn)的磁道號(hào)之間的移動(dòng)距離之和除以被訪問(wèn)的磁道數(shù)。4、點(diǎn)擊磁道增加的方向掃描(SCAN)按鈕實(shí)現(xiàn)算法,顯示結(jié)果如下:此算法首先按照請(qǐng)求訪問(wèn)的磁道號(hào)從小到大排序,然后以當(dāng)前磁道號(hào)為基準(zhǔn),向磁

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論