版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> *********大學(xué)</p><p> 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院</p><p><b> 課程設(shè)計(jì)報(bào)告 </b></p><p> ?。?2012 ~2013 學(xué)年度 秋季學(xué)期 )</p><p> 課程名稱(chēng)操作系統(tǒng)課程設(shè)計(jì)</p><p> 項(xiàng)目名稱(chēng)模擬磁盤(pán)調(diào)度算法系
2、統(tǒng)的設(shè)計(jì)</p><p><b> 目錄</b></p><p> 一、設(shè)計(jì)任務(wù)及主要技術(shù)3</p><p> 二、設(shè)計(jì)方案及論證結(jié)果4</p><p> 三、系統(tǒng)的原理框圖5</p><p><b> 四、設(shè)計(jì)程序12</b></p><
3、;p><b> 五、實(shí)驗(yàn)結(jié)果20</b></p><p> 六、調(diào)試分析及故障處理24</p><p><b> 七、設(shè)計(jì)結(jié)論25</b></p><p><b> 八、心得體會(huì)26</b></p><p><b> 設(shè)計(jì)任務(wù)及主要技術(shù)<
4、/b></p><p> 1.整體功能概述(設(shè)計(jì)任務(wù)):</p><p> 磁盤(pán)是外設(shè)中一個(gè)很常用的部分,所以,對(duì)磁盤(pán)數(shù)據(jù)的尋道時(shí)間的長(zhǎng)短可以直接影響機(jī)器的整體運(yùn)行速度的快慢。本設(shè)計(jì)為一個(gè)模擬磁盤(pán)調(diào)度算法的磁盤(pán)調(diào)度模擬系統(tǒng),能夠模擬先來(lái)先服務(wù)(FCFS)算法、最短尋道時(shí)間(SSTF)算法、電梯(SCAN)算法、環(huán)形掃描(C_SCAN)算法及N_SCAN算法五個(gè)磁盤(pán)調(diào)度算法,輸入為
5、一組作業(yè)的磁道請(qǐng)求,輸出為按選擇的算法執(zhí)行時(shí)的磁頭移動(dòng)軌跡。其中,先來(lái)先服務(wù)(FCFS)算法、最短尋道時(shí)間(SSTF)算法、電梯(SCAN)算法為基本算法,環(huán)形掃描(C_SCAN)算法及N_SCAN算法為擴(kuò)展算法。</p><p><b> 2.運(yùn)行環(huán)境:</b></p><p> ?。?)硬件環(huán)境 Intel core i5 CPU </p>
6、<p> (2)軟件環(huán)境 Windows 7 Microsoft Visual C++ 6.0</p><p><b> 3.主要技術(shù):</b></p><p> ?。?)用C語(yǔ)言編寫(xiě)程序;</p><p> (2)對(duì)編程軟件Microsoft Visual C++ 6.0的了解和使用;</p><p
7、> ?。?)操作系統(tǒng)基礎(chǔ)知識(shí)(主要是對(duì)先來(lái)先服務(wù)(FCFS)算法、最短尋道時(shí)間(SSTF)算法、電梯(SCAN)算法的了解);</p><p> (4)操作系統(tǒng)擴(kuò)展知識(shí)(通過(guò)網(wǎng)絡(luò)自學(xué)環(huán)形掃描(C_SCAN)算法及N_SCAN算法)。</p><p> 二、設(shè)計(jì)方案及論證結(jié)果</p><p><b> 1.設(shè)計(jì)方案:</b></
8、p><p> ?。?)先來(lái)先服務(wù)算法(First-Come,F(xiàn)irst-Served,F(xiàn)CFS)</p><p> 此算法為一種最簡(jiǎn)單的磁盤(pán)調(diào)度算法。它直接根據(jù)作業(yè)請(qǐng)求磁盤(pán)的先后順序?qū)Υ疟P(pán)進(jìn)行尋訪。此算法公平、簡(jiǎn)單,每個(gè)作業(yè)的磁盤(pán)請(qǐng)求都可以得到處理,不會(huì)出現(xiàn)某個(gè)作業(yè)的請(qǐng)求長(zhǎng)期得不到滿(mǎn)足的情況。但此算法未對(duì)尋道方案進(jìn)行優(yōu)化,故平均周轉(zhuǎn)時(shí)間及帶權(quán)周轉(zhuǎn)時(shí)間都會(huì)較長(zhǎng)。</p><
9、p> ?。?)最短尋道時(shí)間優(yōu)先算法(Shortest Seek Time First,SSTF)</p><p> 此算法優(yōu)先選擇距離當(dāng)前磁頭位置最近的作業(yè)磁道請(qǐng)求。此算法可以使得每次尋道時(shí)所用的時(shí)間都最短,但不能保證平均周轉(zhuǎn)時(shí)間及帶權(quán)周轉(zhuǎn)時(shí)間最短。</p><p> (3)電梯算法(SCAN)</p><p> 此算法同時(shí)考慮下一個(gè)作業(yè)磁道請(qǐng)求與當(dāng)前磁
10、頭位置的距離和當(dāng)前磁頭移動(dòng)方向。本設(shè)計(jì)默認(rèn)磁頭當(dāng)前移動(dòng)方向?yàn)樽詢(xún)?nèi)向外,故SCAN算法先選擇當(dāng)前磁頭之外距離其最近的磁道進(jìn)行訪問(wèn),直到再無(wú)更外的磁道請(qǐng)求,再將磁臂換向,訪問(wèn)磁頭內(nèi)側(cè)距離當(dāng)前磁頭位置最近的作業(yè)磁道請(qǐng)求。此算法避免了饑餓現(xiàn)象的出現(xiàn),每個(gè)作業(yè)的磁盤(pán)請(qǐng)求都可以得到處理,且使每次尋道時(shí)間相對(duì)較短。</p><p> ?。?)環(huán)形掃描算法(C_SCAN)</p><p> 此算法磁頭移
11、動(dòng)方向一直為自?xún)?nèi)向外,同時(shí)考慮下一個(gè)作業(yè)磁道請(qǐng)求與當(dāng)前磁頭位置的距離最短。先選擇當(dāng)前磁頭之外距離其最近的磁道進(jìn)行訪問(wèn),直到再無(wú)更外的磁道請(qǐng)求,再直接將磁頭移到最內(nèi)側(cè)磁道(此過(guò)程快速移動(dòng),并不訪問(wèn)任何磁道),再由內(nèi)向外順次訪問(wèn)距離當(dāng)前磁頭位置最近的作業(yè)磁道請(qǐng)求。此算法每個(gè)作業(yè)的磁盤(pán)請(qǐng)求都可以得到處理,且使每次尋道時(shí)間相對(duì)較短。由于該方法一直保持磁頭移動(dòng)尋訪方向不變,對(duì)兩端磁道請(qǐng)求比較有利。</p><p> ?。?
12、)N_SCAN算法</p><p> 此算法同時(shí)考慮下一個(gè)作業(yè)磁道請(qǐng)求與當(dāng)前磁頭位置的距離和當(dāng)前磁頭移動(dòng)方向,但每次磁臂調(diào)轉(zhuǎn)方向時(shí),將同時(shí)處理在磁頭向一側(cè)移動(dòng)過(guò)程當(dāng)中輸入的作業(yè)請(qǐng)求。本設(shè)計(jì)默認(rèn)磁頭當(dāng)前移動(dòng)方向?yàn)樽詢(xún)?nèi)向外,先選擇當(dāng)前磁頭之外距離其最近的磁道進(jìn)行訪問(wèn),直到再無(wú)更外的磁道請(qǐng)求,接下來(lái)一并考慮在磁頭向外側(cè)移動(dòng)過(guò)程當(dāng)中輸入的作業(yè)請(qǐng)求與磁頭內(nèi)側(cè)未被處理的作業(yè)磁道請(qǐng)求。此算法對(duì)中間磁道請(qǐng)求比較有利。</
13、p><p><b> 2.論證結(jié)果:</b></p><p> 本設(shè)計(jì)輸入當(dāng)前磁頭位置及一組作業(yè)磁道請(qǐng)求。選擇所需的算法,輸出相應(yīng)結(jié)果:</p><p> ?。?)先來(lái)先服務(wù)算法(FCFS)</p><p> 按輸入順序輸出訪問(wèn)序列。</p><p> (2)最短尋道時(shí)間優(yōu)先算法(SSTF)&
14、lt;/p><p> 依次輸出距離當(dāng)前磁頭位置最近的磁道請(qǐng)求。</p><p> (3)電梯算法(SCAN)</p><p> 先按照從小到大的順序輸出所輸入的當(dāng)前磁頭位置外側(cè)的磁道請(qǐng)求,再按照從大到小的順序輸出所輸入的當(dāng)前磁頭位置內(nèi)側(cè)的磁道請(qǐng)求。</p><p> (4)環(huán)形掃描算法(C_SCAN)</p><p&g
15、t; 先按照從小到大的順序輸出所輸入的當(dāng)前磁頭位置外側(cè)的磁道請(qǐng)求,再按照從小到大的順序輸出所輸入的當(dāng)前磁頭位置內(nèi)側(cè)的磁道請(qǐng)求。</p><p> ?。?)N_SCAN算法</p><p> 先按照從小到大的順序輸出所輸入的當(dāng)前磁頭位置外側(cè)的磁道請(qǐng)求,再按照從大到小的順序輸出在磁頭向外側(cè)移動(dòng)過(guò)程當(dāng)中輸入的作業(yè)請(qǐng)求與所輸入的當(dāng)前磁頭位置內(nèi)側(cè)的磁道請(qǐng)求。</p><p&g
16、t;<b> 三、系統(tǒng)的原理框圖</b></p><p><b> 1.總體框圖:</b></p><p> 本系統(tǒng)劃分為五個(gè)模塊:先來(lái)先服務(wù)算法模塊FCFS(int track[])、最短尋道時(shí)間算法模塊SSTF(int correnttrack,int track[])、電梯算法模塊SCAN(int correnttrack,int t
17、rack[])、環(huán)形掃描算法模塊C_SCAN(int correnttrack,int track[])及N_SCAN算法模塊N_SCAN(int correnttrack,int track[])。</p><p><b> 總體框圖:</b></p><p><b> 圖1 總體框圖</b></p><p><
18、;b> 2.模塊框圖:</b></p><p> (1)先來(lái)先服務(wù)算法模塊void FCFS(int track[])</p><p> 直接根據(jù)作業(yè)請(qǐng)求磁盤(pán)的先后順序?qū)Υ疟P(pán)進(jìn)行尋訪。此算法公平、簡(jiǎn)單,每個(gè)作業(yè)的磁盤(pán)請(qǐng)求都可以得到處理,不會(huì)出現(xiàn)某個(gè)作業(yè)的請(qǐng)求長(zhǎng)期得不到滿(mǎn)足的情況。</p><p> 先來(lái)先服務(wù)算法流程圖:</p>
19、<p> 圖2 先來(lái)先服務(wù)算法模塊流程圖</p><p> (2)最短尋道時(shí)間優(yōu)先算法模塊void SSTF(int correnttrack,int track[])</p><p> 優(yōu)先選擇距離當(dāng)前磁頭位置最近的作業(yè)磁道請(qǐng)求,可以使得每次尋道時(shí)所用的時(shí)間都最短。</p><p> 最短尋道時(shí)間優(yōu)先算法流程圖:</p><
20、;p> 圖3最短尋道時(shí)間優(yōu)先算法模塊流程圖</p><p> ?。?)電梯算法模塊void SCAN(int correnttrack,int track[])</p><p> 默認(rèn)磁頭當(dāng)前移動(dòng)方向?yàn)樽詢(xún)?nèi)向外,先選擇當(dāng)前磁頭之外距離其最近的磁道進(jìn)行訪問(wèn),直到再無(wú)更外的磁道請(qǐng)求,再將磁臂換向,訪問(wèn)磁頭內(nèi)側(cè)距離當(dāng)前磁頭位置最近的作業(yè)磁道請(qǐng)求。</p><p>
21、;<b> 電梯算法流程圖:</b></p><p> 圖4 電梯算法模塊流程圖</p><p> ?。?)環(huán)形掃描算法模塊void C_SCAN(int correnttrack,int track[])</p><p> 先選擇當(dāng)前磁頭之外距離其最近的磁道進(jìn)行訪問(wèn),直到再無(wú)更外的磁道請(qǐng)求,再直接將磁頭移到最內(nèi)側(cè)磁道(此過(guò)程快速移動(dòng),并
22、不訪問(wèn)任何磁道),再由內(nèi)向外順次訪問(wèn)距離當(dāng)前磁頭位置最近的作業(yè)磁道請(qǐng)求。一直保持磁頭移動(dòng)尋訪方向不變,對(duì)兩端磁道請(qǐng)求比較有利。</p><p> 環(huán)形掃描算法流程圖:</p><p> 圖5 環(huán)形掃描算法模塊流程圖</p><p> (5)N_SCAN算法模塊void N_SCAN(int correnttrack,int track[])</p>
23、<p> 本設(shè)計(jì)默認(rèn)磁頭當(dāng)前移動(dòng)方向?yàn)樽詢(xún)?nèi)向外,先選擇當(dāng)前磁頭之外距離其最近的磁道進(jìn)行訪問(wèn),直到再無(wú)更外的磁道請(qǐng)求,接下來(lái)一并考慮在磁頭向外側(cè)移動(dòng)過(guò)程當(dāng)中輸入的作業(yè)請(qǐng)求與磁頭內(nèi)側(cè)未被處理的作業(yè)磁道請(qǐng)求。此算法對(duì)中間磁道請(qǐng)求比較有利。</p><p> N_SCAN算法流程圖:</p><p> 圖6 N_SCAN算法模塊流程圖(1)</p><p&
24、gt; 圖7 N_SCAN算法模塊流程圖(2)</p><p><b> 四、設(shè)計(jì)程序</b></p><p><b> 1.主要模塊代碼:</b></p><p> (1)先來(lái)先服務(wù)算法void FCFS(int track[])</p><p> 直接根據(jù)作業(yè)請(qǐng)求磁盤(pán)的先后順序?qū)Υ疟P(pán)
25、進(jìn)行尋訪。</p><p> 先來(lái)先服務(wù)算法代碼:</p><p> void FCFS(int track[])</p><p><b> {</b></p><p><b> int k;</b></p><p> for(k=0;k<9;k++)<
26、/p><p><b> {</b></p><p> printf("%d->",track[k]);</p><p><b> }</b></p><p> printf("%d",track[9]);</p><p>&l
27、t;b> }</b></p><p> ?。?)最短尋道時(shí)間優(yōu)先算法void SSTF(int correnttrack,int track[])</p><p> 優(yōu)先選擇距離當(dāng)前磁頭位置最近的作業(yè)磁道請(qǐng)求。</p><p> 最短尋道時(shí)間優(yōu)先算法代碼:</p><p> void SSTF(int corrent
28、track,int track[])</p><p><b> {</b></p><p> int Line[10];</p><p><b> int i;</b></p><p><b> int j;</b></p><p><b&
29、gt; int d;</b></p><p> int min_d;</p><p><b> int k;</b></p><p> int corrent;</p><p> min_d=abs(correnttrack-track[0]);</p><p><b&
30、gt; k=0;</b></p><p> corrent=correnttrack;</p><p> for(i=0;i<10;i++)</p><p><b> {</b></p><p> for(j=0;j<10;j++)</p><p><b&g
31、t; {</b></p><p> if(track[j]!=-1)</p><p><b> {</b></p><p> d=abs(corrent-track[j]);</p><p> if(d<min_d)</p><p><b> {</b
32、></p><p><b> min_d=d;</b></p><p><b> k=j;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }&
33、lt;/b></p><p> Line[i]=track[k];</p><p> corrent=Line[i];</p><p> track[k]=-1;</p><p> min_d=65536;</p><p><b> }</b></p><p&g
34、t; printf("%d->",correnttrack);</p><p> Print(Line);</p><p><b> }</b></p><p> (3)電梯算法void SCAN(int correnttrack,int track[])</p><p> 默認(rèn)磁頭當(dāng)
35、前移動(dòng)方向?yàn)樽詢(xún)?nèi)向外,先選擇當(dāng)前磁頭之外距離其最近的磁道進(jìn)行訪問(wèn),直到再無(wú)更外的磁道請(qǐng)求,再將磁臂換向,訪問(wèn)磁頭內(nèi)側(cè)距離當(dāng)前磁頭位置最近的作業(yè)磁道請(qǐng)求。</p><p><b> 電梯算法代碼:</b></p><p> void SCAN(int correnttrack,int track[])</p><p><b> {
36、</b></p><p> int Line[10];</p><p> int dLine[10];</p><p><b> int i;</b></p><p><b> int j;</b></p><p><b> int k;<
37、;/b></p><p><b> int min;</b></p><p><b> k=0;</b></p><p> min=track[0];</p><p> for(i=0;i<10;i++)</p><p><b> {</
38、b></p><p> for(j=0;j<10;j++)</p><p><b> {</b></p><p> if(track[j]!=-1)</p><p><b> {</b></p><p> if(track[j]<min)</
39、p><p><b> {</b></p><p> min=track[j];</p><p><b> k=j;</b></p><p><b> }</b></p><p><b> }</b></p>&l
40、t;p><b> }</b></p><p> dLine[i]=track[k];</p><p> track[k]=-1;</p><p> min=65536;</p><p><b> }</b></p><p><b> k=0;<
41、;/b></p><p> for(i=0;i<10;i++)</p><p><b> {</b></p><p> if(correnttrack>dLine[i])</p><p><b> {</b></p><p><b> k
42、=k+1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> j=k;</b></p><p> for(i=0;i<10-k;i++)</p><p><b&g
43、t; {</b></p><p> Line[i]=dLine[j];</p><p><b> j=j+1;</b></p><p><b> }</b></p><p><b> j=k-1;</b></p><p> for
44、(i=10-k;i<10;i++)</p><p><b> {</b></p><p> Line[i]=dLine[j];</p><p><b> j=j-1;</b></p><p><b> }</b></p><p> Pri
45、nt(Line);</p><p><b> }</b></p><p> (4)環(huán)形掃描算法void C_SCAN(int correnttrack,int track[])</p><p> 先選擇當(dāng)前磁頭之外距離其最近的磁道進(jìn)行訪問(wèn),直到再無(wú)更外的磁道請(qǐng)求,再直接將磁頭移到最內(nèi)側(cè)磁道(此過(guò)程快速移動(dòng),并不訪問(wèn)任何磁道),再由內(nèi)向外順
46、次訪問(wèn)距離當(dāng)前磁頭位置最近的作業(yè)磁道請(qǐng)求。</p><p><b> 環(huán)形掃描算法代碼:</b></p><p> void C_SCAN(int correnttrack,int track[])</p><p><b> {</b></p><p> int Line[10];</
47、p><p> int dLine[10];</p><p><b> int i;</b></p><p><b> int j;</b></p><p><b> int k;</b></p><p><b> int min;<
48、/b></p><p><b> k=0;</b></p><p> min=track[0];</p><p> for(i=0;i<10;i++)</p><p><b> {</b></p><p> for(j=0;j<10;j++)<
49、;/p><p><b> {</b></p><p> if(track[j]!=-1)</p><p><b> {</b></p><p> if(track[j]<min)</p><p><b> {</b></p>&
50、lt;p> min=track[j];</p><p><b> k=j;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p&g
51、t; dLine[i]=track[k];</p><p> track[k]=-1;</p><p> min=65536;</p><p><b> }</b></p><p><b> k=0;</b></p><p> for(i=0;i<10;i+
52、+)</p><p><b> {</b></p><p> if(correnttrack>dLine[i])</p><p><b> {</b></p><p><b> k=k+1;</b></p><p><b> }
53、</b></p><p><b> }</b></p><p><b> j=k;</b></p><p> for(i=0;i<10-k;i++)</p><p><b> {</b></p><p> Line[i]=dL
54、ine[j];</p><p><b> j=j+1;</b></p><p><b> }</b></p><p><b> j=0;</b></p><p> for(i=10-k;i<10;i++)</p><p><b>
55、 {</b></p><p> Line[i]=dLine[j];</p><p><b> j=j+1;</b></p><p><b> }</b></p><p> Print(Line);</p><p><b> }</b&g
56、t;</p><p> ?。?)N_SCAN算法void N_SCAN(int correnttrack,int track[])</p><p> 默認(rèn)磁頭當(dāng)前移動(dòng)方向?yàn)樽詢(xún)?nèi)向外,先選擇當(dāng)前磁頭之外距離其最近的磁道進(jìn)行訪問(wèn),直到再無(wú)更外的磁道請(qǐng)求,接下來(lái)一并考慮在磁頭向外側(cè)移動(dòng)過(guò)程當(dāng)中輸入的作業(yè)請(qǐng)求與磁頭內(nèi)側(cè)未被處理的作業(yè)磁道請(qǐng)求。</p><p><b&
57、gt; N_SCAN算法</b></p><p> void N_SCAN(int correnttrack,int track[])</p><p><b> {</b></p><p> int Line[10];</p><p> int dLine[10];</p><p
58、> int lLine[10];</p><p><b> int i;</b></p><p><b> int j;</b></p><p><b> int k;</b></p><p> int min,max;</p><p>
59、 int choice;</p><p> for(k=0;k<10;k++)</p><p><b> {</b></p><p> lLine[k]=-1;</p><p><b> }</b></p><p><b> k=0;</b&
60、gt;</p><p> min=track[0];</p><p> for(i=0;i<10;i++)</p><p><b> {</b></p><p> for(j=0;j<10;j++)</p><p><b> {</b></p>
61、;<p> if(track[j]!=-1)</p><p><b> {</b></p><p> if(track[j]<min)</p><p><b> {</b></p><p> min=track[j];</p><p><b
62、> k=j;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> dLine[i]=track[k];</p><p> trac
63、k[k]=-1;</p><p> min=65536;</p><p><b> }</b></p><p><b> k=0;</b></p><p> for(i=0;i<10;i++)</p><p><b> {</b><
64、/p><p> if(correnttrack>dLine[i])</p><p><b> {</b></p><p><b> k=k+1;</b></p><p><b> }</b></p><p><b> }</b
65、></p><p><b> j=k;</b></p><p> for(i=0;i<10-k;i++)</p><p><b> {</b></p><p> Line[i]=dLine[j];</p><p> printf("%d->
66、;",Line[i]);</p><p> Line[i]=-1;</p><p><b> j=j+1;</b></p><p><b> }</b></p><p><b> j=k-1;</b></p><p> for(i=1
67、0-k;i<10;i++)</p><p><b> {</b></p><p> Line[i]=dLine[j];</p><p><b> j=j-1;</b></p><p><b> }</b></p><p> printf(
68、"\n是否還有作業(yè)請(qǐng)求(1-是;0-否):\n");</p><p> scanf("%d",&choice);</p><p><b> k=9-k;</b></p><p> while(choice==1)</p><p><b> {</b&
69、gt;</p><p> printf("\n請(qǐng)輸入作業(yè)的磁道請(qǐng)求:\n");</p><p> scanf("%d",&Line[k]);</p><p><b> k=k-1;</b></p><p> printf("\n是否還有作業(yè)請(qǐng)求(1-是;0
70、-否):\n");</p><p> scanf("%d",&choice);</p><p><b> }</b></p><p> printf("\n磁頭繼續(xù)移動(dòng)軌跡為:\n");</p><p><b> k=9;</b>&l
71、t;/p><p> max=Line[9];</p><p> for(i=0;i<10;i++)</p><p><b> {</b></p><p> for(j=0;j<10;j++)</p><p><b> {</b></p>&l
72、t;p> if(Line[j]>max)</p><p><b> {</b></p><p> max=Line[j];</p><p><b> k=j;</b></p><p><b> }</b></p><p><b
73、> }</b></p><p> lLine[i]=Line[k];</p><p> Line[k]=-1;</p><p><b> max=0;</b></p><p><b> }</b></p><p> for(i=0;i<9;
74、i++)</p><p><b> {</b></p><p> if(lLine[i]!=-1)</p><p><b> {</b></p><p> printf("%d->",lLine[i]);</p><p><b>
75、 }</b></p><p><b> }</b></p><p> printf("%d",lLine[9]);</p><p><b> }</b></p><p><b> 2.總模塊代碼:</b></p><p
76、> void main()</p><p><b> {</b></p><p> int track[10];</p><p><b> int n;</b></p><p> int correnttrack;</p><p> int choice=1
77、;</p><p> printf("\n******磁盤(pán)調(diào)度模擬系統(tǒng)******");</p><p> while(choice==1)</p><p><b> {</b></p><p> printf("\n請(qǐng)輸入當(dāng)前磁道號(hào):");</p><
78、p> scanf("%d",&correnttrack);</p><p> printf("\n請(qǐng)輸入一組作業(yè)的磁道請(qǐng)求<以回車(chē)分隔>:\n");</p><p> scanf("%d %d %d %d %d %d %d %d %d %d",</p><p> &
79、track[0],&track[1],&track[2],&track[3],&track[4],</p><p> &track[5],&track[6],&track[7],&track[8],&track[9]);</p><p> printf("\n請(qǐng)選擇算法:\n");</p&
80、gt;<p> printf("\t1.先來(lái)先服務(wù)算法(FCFS)\n");</p><p> printf("\t2.最短尋道時(shí)間優(yōu)先算法(SSTF)\n");</p><p> printf("\t3.電梯算法(SCAN)\n");</p><p> printf("\t
81、4.環(huán)形掃描算法(C_SCAN)\n");</p><p> printf("\t5.(N_SCAN)\n");</p><p> scanf("%d",&n);</p><p> printf("\n\n");</p><p><b> swit
82、ch(n)</b></p><p><b> {</b></p><p><b> case 1:</b></p><p> printf("********先來(lái)先服務(wù)算法(FCFS)*********\n磁頭移動(dòng)軌跡為:\n");</p><p> FCFS
83、(track);</p><p><b> break;</b></p><p><b> case 2:</b></p><p> printf("*****最短尋道時(shí)間優(yōu)先算法(SSTF)******\n磁頭移動(dòng)軌跡為:\n");</p><p> SSTF(corr
84、enttrack,track);</p><p><b> break;</b></p><p><b> case 3:</b></p><p> printf("************電梯算法(SCAN)***********\n磁頭移動(dòng)軌跡為:\n");</p><p&
85、gt; SCAN(correnttrack,track);</p><p><b> break;</b></p><p><b> case 4:</b></p><p> printf("*********環(huán)形掃描算法(C_SCAN)********\n磁頭移動(dòng)軌跡為:\n");</p
86、><p> C_SCAN(correnttrack,track);</p><p><b> break;</b></p><p><b> case 5:</b></p><p> printf("****************N_SCAN***************\n磁頭移動(dòng)
87、軌跡為:\n");</p><p> N_SCAN(correnttrack,track);</p><p><b> break;</b></p><p><b> }</b></p><p> printf("\n請(qǐng)問(wèn)是否繼續(xù)?(1-繼續(xù);0-退出)\n"
88、);</p><p> scanf("%d",&choice);</p><p><b> }</b></p><p><b> }</b></p><p><b> 五、實(shí)驗(yàn)結(jié)果</b></p><p> 1.總模
89、塊實(shí)驗(yàn)結(jié)果:</p><p> 程序開(kāi)始運(yùn)行,將出現(xiàn)輸入選擇界面;</p><p><b> 圖8 主界面</b></p><p> 2.基礎(chǔ)模塊實(shí)驗(yàn)結(jié)果:</p><p> ?。?)先來(lái)先服務(wù)算法(First-Come,F(xiàn)irst-Served,F(xiàn)CFS)</p><p> 按輸入順序輸
90、出訪問(wèn)序列。</p><p> 選擇該算法后,將輸出相應(yīng)磁頭移動(dòng)軌跡:</p><p> 圖9 先來(lái)先服務(wù)算法0</p><p> 輸出結(jié)果為69-> 23-> 120-> 45-> 77-> 31-> 55-> 99-> 150-> 2 滿(mǎn)足要求。</p><p> (2)最短
91、尋道時(shí)間優(yōu)先算法(Shortest Seek Time First,SSTF)</p><p> 依次輸出距離當(dāng)前磁頭位置最近的磁道請(qǐng)求。</p><p> 選擇該算法后,將輸出相應(yīng)磁頭移動(dòng)軌跡:</p><p> 圖10 最短尋道優(yōu)先算法</p><p> 輸出結(jié)果為45-> 55-> 69-> 77-> 9
92、9-> 120-> 150-> 31-> 23-> 2 滿(mǎn)足要求。</p><p> ?。?)電梯算法(SCAN)</p><p> 先按照從小到大的順序輸出所輸入的當(dāng)前磁頭位置外側(cè)的磁道請(qǐng)求,再按照從大到小的順序輸出所輸入的當(dāng)前磁頭位置內(nèi)側(cè)的磁道請(qǐng)求。</p><p> 選擇該算法后,將輸出相應(yīng)磁頭移動(dòng)軌跡:</p>
93、<p><b> 圖11 電梯算法</b></p><p> 輸出結(jié)果為55-> 69-> 77-> 99-> 120-> 150-> 45-> 31-> 23-> 2 滿(mǎn)足要求。</p><p> 3.?dāng)U展模塊實(shí)驗(yàn)結(jié)果:</p><p> ?。?)環(huán)形掃描算法(C_S
94、CAN)</p><p> 先按照從小到大的順序輸出所輸入的當(dāng)前磁頭位置外側(cè)的磁道請(qǐng)求,再按照從小到大的順序輸出所輸入的當(dāng)前磁頭位置內(nèi)側(cè)的磁道請(qǐng)求。</p><p> 選擇該算法后,將輸出相應(yīng)磁頭移動(dòng)軌跡:</p><p> 圖12 環(huán)形掃描算法</p><p> 輸出結(jié)果為55-> 69-> 77-> 99->
95、; 120-> 150-> 2-> 23-> 31-> 45 滿(mǎn)足要求。</p><p> (2)N_SCAN算法</p><p> 先按照從小到大的順序輸出所輸入的當(dāng)前磁頭位置外側(cè)的磁道請(qǐng)求,再按照從大到小的順序輸出在磁頭向外側(cè)移動(dòng)過(guò)程當(dāng)中輸入的作業(yè)請(qǐng)求與所輸入的當(dāng)前磁頭位置內(nèi)側(cè)的磁道請(qǐng)求。</p><p> 選擇該算法后,將
96、輸出相應(yīng)磁頭移動(dòng)軌跡:</p><p> 圖13 N_SCAN算法</p><p> 輸出結(jié)果為55-> 69-> 77-> 99-> 120-> 150-> 88-> 45-> 31-> 23-> 8 -> 2-> 1 滿(mǎn)足要求。</p><p> 六、調(diào)試分析及故障處理</p&
97、gt;<p><b> 1.調(diào)試分析:</b></p><p> (1)在代碼中錯(cuò)誤的使用了中文括號(hào)“)”,導(dǎo)致程序出錯(cuò)。</p><p><b> 圖14 錯(cuò)誤報(bào)告</b></p><p> (2)在定義函數(shù)時(shí)誤在結(jié)尾處加分號(hào)“;”,導(dǎo)致調(diào)試過(guò)程中出錯(cuò)。</p><p>&l
98、t;b> 圖15 錯(cuò)誤報(bào)告</b></p><p> ?。?)由于未對(duì)變量初始化,導(dǎo)致錯(cuò)誤:</p><p><b> 圖16 錯(cuò)誤警告</b></p><p> 未對(duì)k初始化,如下圖:</p><p><b> 圖17 變量表</b></p><p&g
99、t;<b> 2.故障處理:</b></p><p> 重新檢查代碼,發(fā)現(xiàn)錯(cuò)誤,并及時(shí)修正。</p><p><b> 調(diào)試后無(wú)誤:</b></p><p> 圖18 無(wú)錯(cuò)誤及警告</p><p> 發(fā)生故障時(shí),可采取單步調(diào)試的方法,逐條語(yǔ)句檢查,修正錯(cuò)誤。</p><
100、p> 圖19 故障處理過(guò)程</p><p><b> 七、設(shè)計(jì)結(jié)論</b></p><p> 磁盤(pán),是一種很重要也很常用的外設(shè),其分配也有一定的分配策略。在操作系統(tǒng)中,作業(yè)對(duì)磁盤(pán)的請(qǐng)求常常要排隊(duì),由此需要一些高效率的磁盤(pán)分配策略算法。本系統(tǒng)設(shè)計(jì)了五種尋道策略,其中先來(lái)先服務(wù)算法為一種最簡(jiǎn)單的磁盤(pán)調(diào)度算法,它直接根據(jù)作業(yè)請(qǐng)求磁盤(pán)的先后順序?qū)Υ疟P(pán)進(jìn)行尋訪,公平
101、、簡(jiǎn)單,每個(gè)作業(yè)的磁盤(pán)請(qǐng)求都可以得到處理,不會(huì)出現(xiàn)某個(gè)作業(yè)的請(qǐng)求長(zhǎng)期得不到滿(mǎn)足的情況,但未對(duì)尋道方案進(jìn)行優(yōu)化,故平均周轉(zhuǎn)時(shí)間及帶權(quán)周轉(zhuǎn)時(shí)間都會(huì)較長(zhǎng);最短尋道時(shí)間優(yōu)先算法優(yōu)先選擇距離當(dāng)前磁頭位置最近的作業(yè)磁道請(qǐng)求,可以使得每次尋道時(shí)所用的時(shí)間都最短,但不能保證平均周轉(zhuǎn)時(shí)間及帶權(quán)周轉(zhuǎn)時(shí)間最短;電梯算法同時(shí)考慮下一個(gè)作業(yè)磁道請(qǐng)求與當(dāng)前磁頭位置的距離和當(dāng)前磁頭移動(dòng)方向先選擇當(dāng)前磁頭之外距離其最近的磁道進(jìn)行訪問(wèn),直到再無(wú)更外的磁道請(qǐng)求,再將磁臂換
102、向,訪問(wèn)磁頭內(nèi)側(cè)距離當(dāng)前磁頭位置最近的作業(yè)磁道請(qǐng)求,避免了饑餓現(xiàn)象的出現(xiàn),每個(gè)作業(yè)的磁盤(pán)請(qǐng)求都可以得到處理,且使每次尋道時(shí)間相對(duì)較短;環(huán)形掃描算法的磁頭移動(dòng)方向一直為自?xún)?nèi)向外,同時(shí)考慮下一個(gè)作業(yè)磁道請(qǐng)求與當(dāng)前磁頭位置的距離最短,先選擇當(dāng)前磁頭之外距離其最近的磁道進(jìn)行訪問(wèn),直到再無(wú)更外的磁道請(qǐng)求,</p><p><b> 八、心得體會(huì)</b></p><p> 本
103、次操作系統(tǒng)課程設(shè)計(jì),我不僅完成了課程要求中的任務(wù),更在中期檢查后聽(tīng)取了老師的建議,自己上網(wǎng)查找了其他兩種磁盤(pán)調(diào)度算法加入了程序當(dāng)中,使系統(tǒng)更加完善和完整。在這過(guò)程中,我不僅加深了對(duì)操作系統(tǒng)的了解,進(jìn)一步熟悉了C語(yǔ)言編程和Microsoft Visual C++ 6.0的使用,更加了解了很多之前在課本中和課程學(xué)習(xí)中并不了解和知道的知識(shí),擴(kuò)展了視野,豐富了體驗(yàn)。</p><p> 由于自己的知識(shí)和能力還不到位,在這
104、兩周的時(shí)間里也經(jīng)歷了很多困難和挑戰(zhàn),但我認(rèn)為,在這過(guò)程中的每一次的錯(cuò)誤和故障,都使我收獲頗豐,使我成長(zhǎng)了很多。</p><p> 當(dāng)然,這個(gè)磁盤(pán)調(diào)度系統(tǒng)的設(shè)計(jì)遠(yuǎn)非完美,還有很多地方可以改進(jìn),例如界面可以更加友好,資源可以更加節(jié)約,算法也還有優(yōu)化的余地,但是時(shí)間有限,本人經(jīng)歷也有限,在課程設(shè)計(jì)時(shí)間允許的范圍內(nèi)只能做到這樣,我會(huì)在課余時(shí)間自行完善該磁盤(pán)調(diào)度算法程序。</p><p> 最后
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 模擬磁盤(pán)調(diào)度算法系統(tǒng)的設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 課程設(shè)計(jì)報(bào)告--磁盤(pán)調(diào)度算法的模擬實(shí)現(xiàn)
- 磁盤(pán)調(diào)度算法程序課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)---磁盤(pán)調(diào)度算法
- 磁盤(pán)調(diào)度算法程序課程設(shè)計(jì)報(bào)告
- 磁盤(pán)調(diào)度算法程序課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤(pán)調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤(pán)調(diào)度算法
- 操作系統(tǒng)磁盤(pán)調(diào)度算法課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)--磁盤(pán)調(diào)度算法實(shí)踐
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤(pán)調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤(pán)調(diào)度算法
- 磁盤(pán)調(diào)度算法的模擬
- cscan磁盤(pán)調(diào)度算法---操作系統(tǒng)課程設(shè)計(jì)
- 磁盤(pán)調(diào)度課程設(shè)計(jì)
- 磁盤(pán)調(diào)度算法及模擬
- 磁盤(pán)調(diào)度課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)-磁盤(pán)調(diào)度模擬法
- 操作系統(tǒng)課程設(shè)計(jì)---磁盤(pán)調(diào)度報(bào)告
- c語(yǔ)言磁盤(pán)調(diào)度課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論