

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p> 1.操作系統(tǒng)課程設(shè)計(jì)任務(wù)描述2</p><p> 2.問題定義與需求分析2</p><p> 2.1算法的描述2</p><p> 2.2程序要做什么3</p><p><b> 3.概要設(shè)計(jì)4<
2、/b></p><p><b> 4.詳細(xì)設(shè)計(jì)5</b></p><p> 4.1抽象數(shù)據(jù)類型的定義5</p><p> 4.2程序流程圖以及核心代碼5</p><p> 4.2.1先來先服務(wù)調(diào)度算法5</p><p> 4.2.2最短尋道時(shí)間優(yōu)先調(diào)度算法6</p&
3、gt;<p> 4.2.3掃描算法8</p><p> 4.2.4循環(huán)掃描算法10</p><p><b> 5運(yùn)行結(jié)果12</b></p><p><b> 6測試15</b></p><p><b> 7結(jié)論16</b></p>
4、<p><b> 8參考文獻(xiàn)17</b></p><p> 9附錄(源代碼)17</p><p> 操作系統(tǒng)課程設(shè)計(jì)任務(wù)描述</p><p> 設(shè)計(jì)目的:加深對(duì)磁盤調(diào)度算法的進(jìn)一步認(rèn)識(shí),加強(qiáng)實(shí)踐動(dòng)手能力和程序開發(fā)能力的培養(yǎng),提高分析問題解決問題的能力,培養(yǎng)代碼編寫能力,以鞏固和加深磁盤調(diào)度的概念。操作系統(tǒng)是一門工程性很
5、強(qiáng)的課程,它不僅要求學(xué)生掌握操作系統(tǒng)的工作原理和理論知識(shí),也要求學(xué)生的實(shí)際動(dòng)手能力,以加深對(duì)所學(xué)習(xí)內(nèi)容的理解,使學(xué)生熟練地掌握計(jì)算機(jī)的操作方法,使用各種軟件工具,加強(qiáng)對(duì)課程內(nèi)容的理解。這次課程設(shè)計(jì),就是通過模擬磁臂調(diào)度來加深對(duì)操作系統(tǒng)中磁臂調(diào)度概念的理解。</p><p> 設(shè)計(jì)要求:編程序?qū)崿F(xiàn)下述磁盤調(diào)度算法,并求出每種算法的平均尋道長度;要求設(shè)計(jì)主界面可以靈活選擇某算法,且以下算法都要實(shí)現(xiàn)</p>
6、;<p> 1、先來先服務(wù)算法(FCFS)</p><p> 2、最短尋道時(shí)間優(yōu)先算法(SSTF)</p><p> 3、掃描算法(SCAN)</p><p> 4、循環(huán)掃描算法(CSCAN)</p><p> 2.問題定義與需求分析</p><p><b> 2.1算法的描述<
7、;/b></p><p> 先來先服務(wù)FCFS:公平,簡單,每個(gè)進(jìn)程的請(qǐng)求都能依次得到處理。沒有對(duì)尋道優(yōu)化,平均尋道時(shí)間長。</p><p> 最短時(shí)間優(yōu)先調(diào)度算法SSTF:要求訪問的磁道是當(dāng)前磁頭所在的磁道最近,每次尋道時(shí)間最短,但不能保證平均尋道時(shí)間最短??赡軐?dǎo)致一些請(qǐng)求無限期推延,產(chǎn)生饑餓現(xiàn)象。</p><p> 掃描算法SCAN:不僅考慮當(dāng)前磁道
8、的距離,優(yōu)先考慮在磁道前進(jìn)方向的最短時(shí)間,排除磁頭在盤面上的往復(fù)運(yùn)動(dòng),避免了出現(xiàn)“饑餓”現(xiàn)象。電梯原理。</p><p> 循環(huán)掃描算法:是SCAN的改良。磁頭改變方向時(shí),以到達(dá)請(qǐng)求服務(wù)的最短時(shí)間。對(duì)中間請(qǐng)求服務(wù)更有利。</p><p><b> 2.2程序要做什么</b></p><p> 通過模擬設(shè)計(jì)磁盤驅(qū)動(dòng)調(diào)度程序,觀察驅(qū)動(dòng)調(diào)度程序
9、的動(dòng)態(tài)運(yùn)行過程.且實(shí)現(xiàn)以下算法:</p><p> 1、先來先服務(wù)算法(FCFS)</p><p> 2、最短尋道時(shí)間優(yōu)先算法(SSTF)</p><p> 3、掃描算法(SCAN)</p><p> 4、循環(huán)掃描算法(CSCAN)</p><p> (1)輸入的形式和范圍:輸入為數(shù)字類型</p>
10、<p> (2)輸出形式:數(shù)組和字符串</p><p> (3)程序的功能:實(shí)現(xiàn)磁盤調(diào)度算法的演示</p><p><b> (4)測試數(shù)據(jù):</b></p><p> 正確的輸入:合法的整數(shù)類型.</p><p> 期望輸出:正確輸出結(jié)果</p><p> 錯(cuò)誤的輸入:
11、字符型,浮點(diǎn)數(shù)型</p><p><b> 期望輸出:提示錯(cuò)誤</b></p><p> (5)開發(fā)環(huán)境及語言的選擇</p><p> Visual studio 2010</p><p><b> C#語言</b></p><p><b> 3.概要設(shè)計(jì)
12、</b></p><p> 1.先來先服務(wù)(FCFS)的設(shè)計(jì)思想</p><p> 即先來的請(qǐng)求先被響應(yīng)。FCFS策略看起來似乎是相當(dāng)"公平"的,但是當(dāng)請(qǐng)求的頻率過高的時(shí)候FCFS策略的響應(yīng)時(shí)間就會(huì)大大延長。FCFS策略為我們建立起一個(gè)隨機(jī)訪問機(jī)制的模型,但是假如用這個(gè)策略反復(fù)響應(yīng)從里到外的請(qǐng)求,那么將會(huì)消耗大量的時(shí)間。為了盡量降低尋道時(shí)間,看來我們需要
13、對(duì)等待著的請(qǐng)求進(jìn)行適當(dāng)?shù)呐判颍皇呛唵蔚氖褂肍CFS策略。這個(gè)過程就叫做磁盤調(diào)度管理。有時(shí)候fcfs也被看作是最簡單的磁盤調(diào)度算法</p><p> 2.最短尋道時(shí)間優(yōu)先調(diào)度(SSTF)的設(shè)計(jì)思想</p><p> 最短時(shí)間優(yōu)先算法選擇這樣的進(jìn)程。要求訪問的磁道,與當(dāng)前磁頭所在的磁道距離最近,以使每次的尋道時(shí)間最短。</p><p> 3.掃描算法(SCAN
14、)的設(shè)計(jì)思想</p><p> 掃描(SCAN)調(diào)度算法:該算法不僅考慮到欲訪問 的磁道與當(dāng)前磁道間的距離,更優(yōu)先考慮的是磁頭當(dāng)前的移動(dòng)方向。例如,當(dāng)磁頭正在自里向外移動(dòng)時(shí),SCAN算法所考慮的下一個(gè)訪問對(duì)象,應(yīng)是其欲訪問的磁道,既在當(dāng)前磁道之外,又是距離最近的。這樣自里向外的訪問,直至再無更外的磁道需要訪問時(shí),才將磁道換向自外向里移動(dòng)。這時(shí),同樣也是每次選擇這樣的進(jìn)程來調(diào)度,也就是要訪問的當(dāng)前位置內(nèi)距離最近者
15、,這樣,磁頭又逐步地從外向里移動(dòng),直至再無更里面的磁道要訪問,從而避免了出現(xiàn)“饑餓”現(xiàn)像。</p><p> 4.循環(huán)掃描(CSACN)的設(shè)計(jì)思想</p><p> 循環(huán)掃描(CSCAN)算法:當(dāng)磁頭剛從里向外移動(dòng)而越過了某一磁道時(shí),恰好又有一進(jìn)程請(qǐng)求訪問此磁道,這時(shí),該里程就必須等待,為了減少這種延遲,CSCAN算法規(guī)定磁頭單向移動(dòng),而本實(shí)驗(yàn)過程中我們所設(shè)計(jì)的是磁頭從里向外移動(dòng),而從
16、外向里移動(dòng)時(shí)只須改方向而已,本實(shí)驗(yàn)未實(shí)現(xiàn)。但本實(shí)驗(yàn)已完全能演示循環(huán)掃描的全過程。</p><p><b> 4.詳細(xì)設(shè)計(jì)</b></p><p> 4.1抽象數(shù)據(jù)類型的定義</p><p> int num1,num2,num3; //分別存儲(chǔ)最大磁道號(hào)、當(dāng)前磁道數(shù)、磁道個(gè)數(shù)</p><p> int[] arr
17、ay//存儲(chǔ)隨機(jī)生成的數(shù)組</p><p> 4.2程序流程圖以及核心代碼</p><p> 4.2.1先來先服務(wù)調(diào)度算法</p><p><b> 程序流程圖如下:</b></p><p><b> 核心代碼如下:</b></p><p> for (int
18、 i = 0; i < array.Length;i++ )//輸出數(shù)組到listbox1</p><p><b> {</b></p><p> listBox1.Items.Add(array[i]);</p><p><b> }</b></p><p> num3 = Conv
19、ert.ToInt32(textBox3.Text);</p><p> int[] remove=new int[array.Length]; //申明動(dòng)態(tài)數(shù)組保存移動(dòng)距離</p><p> remove[0] = Math.Abs(num3-array[0]);</p><p> sum += remove[0];</p><p
20、> for (int i = 1; i < array.Length;i++ )//計(jì)算移動(dòng)距離保存到數(shù)組中</p><p><b> {</b></p><p> remove[i] = Math.Abs(array[i]-array[i-1]);</p><p> sum += remove[i];</p>
21、<p><b> }</b></p><p> 4.2.2最短尋道時(shí)間優(yōu)先調(diào)度算法</p><p><b> 程序流程圖如下:</b></p><p><b> 核心代碼如下:</b></p><p> while (array[k] < num3)
22、 //確定當(dāng)前磁道在已排的序列中的位置</p><p><b> {</b></p><p><b> k++;</b></p><p><b> }</b></p><p> post1 = k - 1;</p><p> post2 =
23、 k;</p><p> while ((post1 >= 0) && (post2 < num2)) //邊界條件</p><p><b> {</b></p><p> if ((num3 - array[post1]) <= (array[post2] - num3))//判斷哪個(gè)位置離當(dāng)前磁道號(hào)最
24、近</p><p><b> {</b></p><p> array2[l] = Math.Abs(num3-array[post1]);//求出尋道距離</p><p> listBox1.Items.Add(array[post1]);</p><p> sum += num3 - array[post1]
25、;</p><p> num3 = array[post1];</p><p> post1 = post1 - 1;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b><
26、;/p><p> array2[l] = Math.Abs(num3 - array[post2]);</p><p> listBox1.Items.Add(array[post2]);</p><p> sum += array[post2] - num3;</p><p> num3 = array[post2];</p>
27、;<p> post2 = post2 + 1;</p><p><b> }</b></p><p><b> l++;</b></p><p><b> }</b></p><p> if (post1 == -1)//判斷是否移動(dòng)到最左&l
28、t;/p><p><b> {</b></p><p> for (int j = post2,i=l; j < num2; j++,i++)</p><p><b> {</b></p><p> array2[i] = Math.Abs(array[j] - array[j - 1])
29、;</p><p> listBox1.Items.Add(array[j]);//輸出磁道序列</p><p><b> }</b></p><p> sum += array[num2 - 1] - array[0];</p><p><b> }</b></p><
30、;p><b> else</b></p><p><b> {</b></p><p> for (int j = post1,i=l; j >= 0; j--,i++)</p><p><b> {</b></p><p> array2[i] = Ma
31、th.Abs(array[j+1]-array[j]);</p><p> listBox1.Items.Add(array[j]);</p><p><b> }</b></p><p> sum += array[num2 - 1] - array[0];</p><p><b> }</b&
32、gt;</p><p><b> }</b></p><p><b> 4.2.3掃描算法</b></p><p><b> 程序流程圖如下:</b></p><p><b> 核心代碼如下:</b></p><p> w
33、hile (array[k] < num3) //逐一比較以確定K值確定位置</p><p><b> {</b></p><p><b> k++;</b></p><p><b> }</b></p><p> post1 = k - 1;</p>
34、<p> post2 = k;</p><p> if (comboBox1.Text == "磁道號(hào)減小方向")//判斷選擇方向</p><p><b> {</b></p><p> for (int j = post1; j >= 0; j--)</p><p>&l
35、t;b> {</b></p><p> array2[post1-j] = array[j];</p><p> listBox1.Items.Add(array[j]);</p><p><b> }</b></p><p> for (int j = post2; j < num2;
36、 j++)</p><p><b> {</b></p><p> array2[j] = array[j];</p><p> listBox1.Items.Add(array[j]);</p><p><b> }</b></p><p> array3[0]
37、= Math.Abs(num3 - array2[0]);</p><p> for (int i = 1; i < array2.Length; i++)</p><p><b> {</b></p><p> array3[i] = Math.Abs(array2[i] - array2[i - 1]);</p>
38、<p><b> }</b></p><p> for (int i = 0; i < array.Length; i++)</p><p><b> {</b></p><p> sum += array3[i];</p><p><b> }</b>
39、;</p><p><b> }</b></p><p> else if (comboBox1.Text == "磁道號(hào)增加方向")//判斷選擇方向</p><p><b> {</b></p><p> for (int j = post2; j < num2;
40、 j++)</p><p><b> {</b></p><p> array2[j - post2] = array[j];</p><p> listBox1.Items.Add(array[j]);</p><p><b> }</b></p><p> fo
41、r (int j = post1; j >= 0; j--)</p><p><b> {</b></p><p> array2[num2 - 1 - j] = array[j];</p><p> listBox1.Items.Add(array[j]);</p><p><b> }<
42、/b></p><p> array3[0] = Math.Abs(num3 - array2[0]);</p><p> for (int i = 1; i < array2.Length; i++)</p><p><b> {</b></p><p> array3[i] = Math.Abs(
43、array2[i] - array2[i - 1]);</p><p><b> }</b></p><p> for (int i = 0; i < array.Length; i++)</p><p><b> {</b></p><p> sum += array3[i];<
44、;/p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> MessageBox.Show("請(qǐng)選擇
45、移動(dòng)方向");//如果沒有選擇彈出對(duì)話框</p><p><b> return;</b></p><p><b> }</b></p><p><b> }</b></p><p> 4.2.4循環(huán)掃描算法</p><p> 程序流
46、程圖同掃描算法流程圖</p><p><b> 核心代碼如下:</b></p><p> while (array[k] < num3)</p><p><b> {</b></p><p><b> k++;</b></p><p>&l
47、t;b> }</b></p><p> post1 = k - 1;</p><p> post2 = k;</p><p> if (comboBox1.Text == "磁道號(hào)減小方向")</p><p><b> {</b></p><p>
48、 for (int j = post1; j >= 0; j--)</p><p><b> {</b></p><p> array2[post1 - j] = array[j];</p><p> listBox1.Items.Add(array[j]);</p><p><b> }<
49、/b></p><p> for (int j = num2-1,i=post2; j>=post2; j--,i++)</p><p><b> {</b></p><p> array2[i] = array[j];</p><p> listBox1.Items.Add(array[j]);&l
50、t;/p><p><b> }</b></p><p> array3[0] = Math.Abs(num3 - array2[0]);</p><p> for (int i = 1; i < array2.Length; i++)</p><p><b> {</b></p>
51、;<p> array3[i] = Math.Abs(array2[i] - array2[i - 1]);</p><p><b> }</b></p><p> for (int i = 0; i < array.Length; i++)</p><p><b> {</b></p&g
52、t;<p> sum += array3[i];</p><p><b> }</b></p><p><b> }</b></p><p> else if (comboBox1.Text == "磁道號(hào)增加方向")</p><p><b>
53、{</b></p><p> for (int j = post2; j < num2; j++)</p><p><b> {</b></p><p> array2[j - post2] = array[j];</p><p> listBox1.Items.Add(array[j]);&l
54、t;/p><p><b> }</b></p><p> for (int j = 0, i = num2 - post2 - 1; j < post2; j++, i++)</p><p><b> {</b></p><p> array2[i] = array[j];</p&g
55、t;<p> listBox1.Items.Add(array[j]);</p><p><b> }</b></p><p> array3[0] = Math.Abs(num3 - array2[0]);</p><p> for (int i = 1; i < array2.Length; i++)</p
56、><p><b> {</b></p><p> array3[i] = Math.Abs(array2[i] - array2[i - 1]);</p><p><b> }</b></p><p> for (int i = 0; i < array.Length; i++)</
57、p><p><b> {</b></p><p> sum += array3[i];</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p>
58、<p><b> {</b></p><p> MessageBox.Show("請(qǐng)選擇移動(dòng)方向");//如果沒有選擇彈出對(duì)話框</p><p><b> return;</b></p><p><b> }</b></p><p>&
59、lt;b> }</b></p><p><b> 5運(yùn)行結(jié)果</b></p><p> 先來先服務(wù)算法(FCFS)</p><p> 最短尋道時(shí)間優(yōu)先算法(SSTF)</p><p> 掃描算法(SCAN)</p><p><b> 磁道號(hào)增加方向</
60、b></p><p><b> 磁道號(hào)減小方向</b></p><p> 循環(huán)掃描算法(CSCAN)</p><p><b> 磁道號(hào)增加方向</b></p><p><b> 磁道號(hào)減小方向</b></p><p><b>
61、6測試</b></p><p> 1、輸入合法的整型數(shù)據(jù)</p><p><b> 輸出結(jié)果:</b></p><p> 結(jié)論:正常輸出,結(jié)果正確。</p><p><b> 2、輸入字符型數(shù)據(jù)</b></p><p><b> 輸出結(jié)果:&l
62、t;/b></p><p> 結(jié)論:彈出相應(yīng)的對(duì)話框,提示錯(cuò)誤信息。</p><p><b> 7結(jié)論</b></p><p><b> 心得體會(huì):</b></p><p> 此次操作系統(tǒng)的課程設(shè)計(jì)我寫的是磁盤調(diào)度算法,在僅僅一個(gè)星期的時(shí)間里,從理論到實(shí)踐,學(xué)到很多很多的的東西,同時(shí)不
63、僅可以鞏固了以前所學(xué)過的知識(shí),而且學(xué)到了很多在書本上所沒有學(xué)到過的知識(shí)。通過這次課程設(shè)計(jì)使我懂得了親自動(dòng)手編寫代碼和理論的差距。中間遇到了很多困難,代碼的各種出錯(cuò),程序的各種bug。但經(jīng)過自己的努力不斷調(diào)試解決了這些問題,感覺收獲很多。</p><p> 通過本次實(shí)驗(yàn)我知道了一個(gè)好的軟件工程需要做好設(shè)計(jì)前的準(zhǔn)備工作時(shí),先把這部分工作做完了。在設(shè)計(jì)總的程序框架的時(shí)候,要注意各功能模塊的位置,盡量做到簡潔、有序;各
64、功能模塊與主程序要正確銜接。不僅僅要寫計(jì)算機(jī)看懂的代碼,更重要的是要寫出其他人可以看懂的代碼。</p><p><b> 8參考文獻(xiàn)</b></p><p> [1]湯小丹、梁紅兵、哲鳳屏、湯子瀛. 計(jì)算機(jī)操作系統(tǒng)[M]. 西安電子科技大學(xué)出版社. 2007年</p><p> [2]張麗芬. 操作系統(tǒng)設(shè)計(jì)教程[M]. 清華大學(xué)出版社.2
65、006年</p><p> [3]湯巍、菀勛. 操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)書[M]. 沈陽理工大學(xué)出版社. 2009年</p><p><b> 9附錄(源代碼)</b></p><p> using System;</p><p> using System.Collections.Generic;</p>
66、<p> using System.ComponentModel;</p><p> using System.Data;</p><p> using System.Drawing;</p><p> using System.Linq;</p><p> using System.Text;</p>&
67、lt;p> using System.Windows.Forms;</p><p> namespace 磁盤調(diào)度算法</p><p><b> {</b></p><p> public partial class Form1 : Form</p><p><b> {</b>&l
68、t;/p><p><b> int num2;</b></p><p><b> int num1;</b></p><p><b> int num3;</b></p><p> int[] array;</p><p> int[] array
69、_n;</p><p> public Form1()</p><p><b> {</b></p><p> InitializeComponent();</p><p><b> }</b></p><p> private void label1_Click(
70、object sender, EventArgs e)</p><p><b> {</b></p><p><b> }</b></p><p> private void label2_Click(object sender, EventArgs e)</p><p><b>
71、 {</b></p><p><b> }</b></p><p> private void textBox4_TextChanged(object sender, EventArgs e)</p><p><b> {</b></p><p><b> }</
72、b></p><p> public void button1_Click(object sender, EventArgs e)</p><p><b> {</b></p><p> if (int.TryParse(textBox2.Text, out num1)==false) //判斷輸入是否合法</p>
73、<p><b> {</b></p><p> MessageBox.Show("最大磁道號(hào)不是合法數(shù)");</p><p><b> return;</b></p><p><b> }</b></p><p> else if (in
74、t.TryParse(textBox4.Text, out num2) == false) //判斷輸入是否合法</p><p><b> {</b></p><p> MessageBox.Show("磁道個(gè)數(shù)不是合法數(shù)");</p><p><b> return;</b></p>
75、<p><b> }</b></p><p> else if (int.TryParse(textBox3.Text, out num3) == false) //判斷輸入是否合法</p><p><b> {</b></p><p> MessageBox.Show("當(dāng)前磁道號(hào)不是合法
76、數(shù)");</p><p><b> return;</b></p><p><b> }</b></p><p> else if (num3 > num1)</p><p><b> {</b></p><p> Messag
77、eBox.Show("當(dāng)前磁道號(hào)超過最大磁道號(hào)"); //判斷輸入是否合法</p><p><b> return;</b></p><p><b> }</b></p><p> array = new int[num2]; //動(dòng)態(tài)數(shù)組</p><p> array_
78、n=new int[num2]; //一個(gè)用來存原始數(shù)組</p><p> Random rd = new Random();</p><p> String str = " ";</p><p> for (int i = 0; i < num2;i++ ) //生成隨機(jī)數(shù)組</p><p><b&
79、gt; {</b></p><p> array[i] = rd.Next(1,num1);</p><p><b> }</b></p><p> for (int i = 0; i < num2; i++)</p><p><b> {</b></p>
80、<p> array_n[i] = array[i];</p><p><b> }</b></p><p> for (int i=0; i<num2;i++)</p><p><b> {</b></p><p> str += " " + arra
81、y[i].ToString();//數(shù)組用空格隔開</p><p> label4.Text =str; //輸出到label4中</p><p><b> }</b></p><p><b> }</b></p><p> private void textB
82、ox2_TextChanged(object sender, EventArgs e)</p><p><b> {</b></p><p><b> }</b></p><p> private void textBox3_TextChanged(object sender, EventArgs e)</p&
83、gt;<p><b> {</b></p><p><b> }</b></p><p> private void Form1_Load(object sender, EventArgs e)</p><p><b> {</b></p><p><
84、;b> }</b></p><p> private void button2_Click(object sender, EventArgs e)//先來先服務(wù)算法</p><p><b> {</b></p><p> listBox1.Items.Clear(); //清空listbox</p
85、><p> listBox2.Items.Clear();</p><p> int sum = 0;</p><p> double aver = 0.0;</p><p> for (int i = 0; i < num2; i++)</p><p><b> {</b></
86、p><p> array[i] = array_n[i];</p><p><b> }</b></p><p> for (int i = 0; i < array.Length;i++ )//輸出數(shù)組到listbox1</p><p><b> {</b></p><
87、;p> listBox1.Items.Add(array[i]);</p><p><b> }</b></p><p> num3 = Convert.ToInt32(textBox3.Text);</p><p> int[] remove=new int[array.Length]; //申明動(dòng)態(tài)數(shù)組保存移動(dòng)距離&l
88、t;/p><p> remove[0] = Math.Abs(num3-array[0]);</p><p> sum += remove[0];</p><p> for (int i = 1; i < array.Length;i++ )//計(jì)算移動(dòng)距離保存到數(shù)組中</p><p><b> {</b>&l
89、t;/p><p> remove[i] = Math.Abs(array[i]-array[i-1]);</p><p> sum += remove[i];</p><p><b> }</b></p><p> for (int i = 0; i < array.Length; i++)</p>
90、<p><b> {</b></p><p> listBox2.Items.Add(remove[i]);</p><p><b> }</b></p><p> aver = Convert.ToDouble(sum) / Convert.ToDouble(array.Length);//計(jì)算平均
91、移動(dòng)距離</p><p> label6.Text = sum.ToString();</p><p> label8.Text = aver.ToString("0.00");</p><p><b> }</b></p><p> private void button3_Click(ob
92、ject sender, EventArgs e)//最短尋道算法</p><p><b> {</b></p><p> listBox1.Items.Clear();</p><p> listBox2.Items.Clear();</p><p> int temp=0;</p><p&
93、gt; int[] remove=new int[num2];</p><p> int sum = 0;</p><p><b> int k=0;</b></p><p> int post1,post2;</p><p> double aver = 0.0;</p><p>
94、int[] array2 = new int[num2];</p><p> int l = 0;</p><p> for (int i = 0; i < num2; i++)</p><p><b> {</b></p><p> array[i] = array_n[i];</p>&l
95、t;p><b> }</b></p><p> for (int i = 0; i < array.Length-1;i++ ) //冒泡排序從小到大</p><p><b> {</b></p><p> for (int j = 0; j < array.Length -1-i;j++ )
96、</p><p><b> {</b></p><p> if(array[j]>array[j+1])</p><p><b> {</b></p><p> temp = array[j];</p><p> array[j] = array[j + 1]
97、;</p><p> array[j + 1] = temp;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if (array[num2 - 1] <
98、= num3) //判斷當(dāng)前磁道號(hào)是否比最大的大</p><p><b> {</b></p><p> int o = 0;</p><p> array2[0]=num3-array[num2-1];</p><p><b> o++;</b></p><p>
99、 for (int i = num2 - 1; i >= 0; i--,o++)</p><p><b> {</b></p><p> listBox1.Items.Add(array[i]);</p><p> if (i > 0)</p><p><b> {</b>&l
100、t;/p><p> array2[o] = Math.Abs(array[i] - array[i - 1]);</p><p><b> }</b></p><p><b> }</b></p><p> sum = num3 - array[0];</p><p>&
101、lt;b> }</b></p><p> else if (array[0] >= num3) //判斷當(dāng)前磁道號(hào)是否比最小的小</p><p><b> {</b></p><p> for (int i = 0; i < num2; i++)</p><p><b>
102、 {</b></p><p> listBox1.Items.Add(array[i]);</p><p><b> }</b></p><p> array2[0] = Math.Abs(num3-array[0]);</p><p> for (int i = 1; i < array.Le
103、ngth; i++)</p><p><b> {</b></p><p> array2[i] = array[i] - array[i - 1];</p><p><b> }</b></p><p> sum = array[num2 - 1] - num3;</p>&
104、lt;p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> while (array[k] < num3) //確定當(dāng)前磁道在已排的序列中的位置</p><p><b>
105、 {</b></p><p><b> k++;</b></p><p><b> }</b></p><p> post1 = k - 1;</p><p> post2 = k;</p><p> while ((post1 >= 0) &am
106、p;& (post2 < num2)) //邊界條件</p><p><b> {</b></p><p> if ((num3 - array[post1]) <= (array[post2] - num3))//判斷哪個(gè)位置離當(dāng)前磁道號(hào)最近</p><p><b> {</b></p&g
107、t;<p> array2[l] = Math.Abs(num3-array[post1]);</p><p> listBox1.Items.Add(array[post1]);</p><p> sum += num3 - array[post1];</p><p> num3 = array[post1];</p><
108、p> post1 = post1 - 1;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> array2[l] = Math.Abs(num3 - array[post2]
109、);</p><p> listBox1.Items.Add(array[post2]);</p><p> sum += array[post2] - num3;</p><p> num3 = array[post2];</p><p> post2 = post2 + 1;</p><p><b&g
110、t; }</b></p><p><b> l++;</b></p><p><b> }</b></p><p> if (post1 == -1)</p><p><b> {</b></p><p> for (int j
111、= post2,i=l; j < num2; j++,i++)</p><p><b> {</b></p><p> array2[i] = Math.Abs(array[j] - array[j - 1]);</p><p> listBox1.Items.Add(array[j]);</p><p>&
112、lt;b> }</b></p><p> sum += array[num2 - 1] - array[0];</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p>
113、<p> for (int j = post1,i=l; j >= 0; j--,i++)</p><p><b> {</b></p><p> array2[i] = Math.Abs(array[j+1]-array[j]);</p><p> listBox1.Items.Add(array[j]);<
114、/p><p><b> }</b></p><p> sum += array[num2 - 1] - array[0];</p><p><b> }</b></p><p><b> }</b></p><p> for (int i = 0;
115、 i < array2.Length;i++ )</p><p><b> {</b></p><p> listBox2.Items.Add(array2[i]);</p><p><b> }</b></p><p> //計(jì)算平均尋道長度</p><p>
116、 aver = Convert.ToDouble(sum) / Convert.ToDouble(array.Length);</p><p> label6.Text = sum.ToString();</p><p> label8.Text = aver.ToString("0.00");</p><p><b> }&l
117、t;/b></p><p> private void button4_Click(object sender, EventArgs e)//掃描算法</p><p><b> {</b></p><p> listBox1.Items.Clear();</p><p> listBox2.Items.Cl
118、ear();</p><p> int temp=0;</p><p> int sum = 0;</p><p><b> int k=0;</b></p><p> int post1,post2;</p><p> double aver = 0.0;</p><
119、;p> int[] array2 = new int[num2];</p><p> int[] array3=new int[num2];</p><p> for (int i = 0; i < num2; i++)</p><p><b> {</b></p><p> array[i] =
120、array_n[i];</p><p><b> }</b></p><p> for (int i = 0; i < array.Length-1;i++ )</p><p><b> {</b></p><p> for (int j = 0; j < array.Lengt
121、h -1-i;j++ )</p><p><b> {</b></p><p> if(array[j]>array[j+1])</p><p><b> {</b></p><p> temp = array[j];</p><p> array[j] =
122、array[j + 1];</p><p> array[j + 1] = temp;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if (array[nu
123、m2 - 1] <= num3)</p><p><b> {</b></p><p> for (int i = num2 - 1,j=0; i >= 0; i--,j++)</p><p><b> {</b></p><p> array2[j] = array[i];&l
124、t;/p><p> listBox1.Items.Add(array[i]);</p><p><b> }</b></p><p> array3[0] = Math.Abs(num3-array2[0]);</p><p> for (int i = 1; i < array2.Length;i++ )&l
125、t;/p><p><b> {</b></p><p> array3[i] = Math.Abs(array2[i] - array2[i - 1]);</p><p><b> }</b></p><p> sum = num3 - array[0];</p><p>
126、;<b> }</b></p><p> else if (array[0] >= num3)</p><p><b> {</b></p><p> for (int i = 0; i < num2; i++)</p><p><b> {</b><
127、;/p><p> array2[i] = array[i];</p><p> listBox1.Items.Add(array[i]);</p><p><b> }</b></p><p> array3[0] = Math.Abs(num3 - array2[0]);</p><p>
128、 for (int i = 1; i < array.Length; i++)</p><p><b> {</b></p><p> array3[i] = array2[i] - array2[i - 1];</p><p><b> }</b></p><p> sum = ar
129、ray[num2 - 1] - num3;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> while (array[k] < num3) //逐一比較以確定K值</p
130、><p><b> {</b></p><p><b> k++;</b></p><p><b> }</b></p><p> post1 = k - 1;</p><p> post2 = k;</p><p> i
131、f (comboBox1.Text == "磁道號(hào)減小方向")//判斷選擇方向</p><p><b> {</b></p><p> for (int j = post1; j >= 0; j--)</p><p><b> {</b></p><p> arra
132、y2[post1-j] = array[j];</p><p> listBox1.Items.Add(array[j]);</p><p><b> }</b></p><p> for (int j = post2; j < num2; j++)</p><p><b> {</b>
133、;</p><p> array2[j] = array[j];</p><p> listBox1.Items.Add(array[j]);</p><p><b> }</b></p><p> array3[0] = Math.Abs(num3 - array2[0]);</p><p&
134、gt; for (int i = 1; i < array2.Length; i++)</p><p><b> {</b></p><p> array3[i] = Math.Abs(array2[i] - array2[i - 1]);</p><p><b> }</b></p><
135、p> for (int i = 0; i < array.Length; i++)</p><p><b> {</b></p><p> sum += array3[i];</p><p><b> }</b></p><p><b> }</b><
136、;/p><p> else if (comboBox1.Text == "磁道號(hào)增加方向")//判斷選擇方向</p><p><b> {</b></p><p> for (int j = post2; j < num2; j++)</p><p><b> {</b>
137、;</p><p> array2[j - post2] = array[j];</p><p> listBox1.Items.Add(array[j]);</p><p><b> }</b></p><p> for (int j = post1; j >= 0; j--)</p>&l
138、t;p><b> {</b></p><p> array2[num2 - 1 - j] = array[j];</p><p> listBox1.Items.Add(array[j]);</p><p><b> }</b></p><p> array3[0] = Math.A
139、bs(num3 - array2[0]);</p><p> for (int i = 1; i < array2.Length; i++)</p><p><b> {</b></p><p> array3[i] = Math.Abs(array2[i] - array2[i - 1]);</p><p>
140、;<b> }</b></p><p> for (int i = 0; i < array.Length; i++)</p><p><b> {</b></p><p> sum += array3[i];</p><p><b> }</b></p&
141、gt;<p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> MessageBox.Show("請(qǐng)選擇移動(dòng)方向");//如果沒有選擇彈出對(duì)話框</p><p>&
142、lt;b> return;</b></p><p><b> }</b></p><p><b> }</b></p><p> for (int i = 0; i < array.Length; i++)</p><p><b> {</b>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 磁盤調(diào)度課程設(shè)計(jì)報(bào)告
- 磁盤調(diào)度算法課程設(shè)計(jì)--模擬磁盤調(diào)度算法系統(tǒng)的設(shè)計(jì)
- 磁盤調(diào)度算法程序課程設(shè)計(jì)報(bào)告
- c語言磁盤調(diào)度課程設(shè)計(jì)報(bào)告
- 磁盤調(diào)度算法程序課程設(shè)計(jì)報(bào)告
- 磁盤調(diào)度算法程序課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)---磁盤調(diào)度報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)---磁盤調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤調(diào)度算法
- 操作系統(tǒng)磁盤調(diào)度算法課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)--磁盤調(diào)度算法實(shí)踐
- 課程設(shè)計(jì)報(bào)告--磁盤調(diào)度算法的模擬實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)-磁盤調(diào)度模擬法
- cscan磁盤調(diào)度算法---操作系統(tǒng)課程設(shè)計(jì)
- n-step-scan_磁盤調(diào)度_操作系統(tǒng)課程設(shè)計(jì)
- 磁盤調(diào)度
- 課程設(shè)計(jì)---操作系統(tǒng)課程設(shè)計(jì)之linux磁盤空間管理
評(píng)論
0/150
提交評(píng)論