操作系統(tǒng)課程設(shè)計(jì)-磁盤(pán)調(diào)度算法_第1頁(yè)
操作系統(tǒng)課程設(shè)計(jì)-磁盤(pán)調(diào)度算法_第2頁(yè)
操作系統(tǒng)課程設(shè)計(jì)-磁盤(pán)調(diào)度算法_第3頁(yè)
操作系統(tǒng)課程設(shè)計(jì)-磁盤(pán)調(diào)度算法_第4頁(yè)
操作系統(tǒng)課程設(shè)計(jì)-磁盤(pán)調(diào)度算法_第5頁(yè)
已閱讀5頁(yè),還剩20頁(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、前 言摘要:本課程設(shè)計(jì)的目的是通過(guò)設(shè)計(jì)一個(gè)磁盤(pán)調(diào)度模擬系統(tǒng),從而使磁盤(pán)調(diào)度算法更加形象化,使磁盤(pán)調(diào)度的特點(diǎn)更簡(jiǎn)單明了,這里主要實(shí)現(xiàn)磁盤(pán)調(diào)度的四種算法,分別是:1、先來(lái)先服務(wù)算法(FCFS) 2、最短尋道時(shí)間優(yōu)先算法(SSTF) 3、掃描算法(SCAN) 4、循環(huán)掃描算法(CSCAN)。 啟動(dòng)磁盤(pán)執(zhí)行輸入輸出操作時(shí),要把移動(dòng)臂移動(dòng)到指定的柱面,再等待指定扇區(qū)的旋轉(zhuǎn)到磁頭位置下,然后讓指定的磁頭進(jìn)行讀寫(xiě),完成信息傳送;因此,執(zhí)行一次輸入輸出所花的時(shí)間有: 尋找時(shí)間磁頭在移動(dòng)臂帶動(dòng)下移動(dòng)到指定柱面所花的時(shí)間。 延遲時(shí)間指定扇區(qū)旋轉(zhuǎn)到磁頭下所需的時(shí)間。 傳送時(shí)間由磁頭進(jìn)程讀寫(xiě)完成信息傳送的時(shí)間,尋道時(shí)

2、間指計(jì)算機(jī)在發(fā)出一個(gè)尋址命令,到相應(yīng)目標(biāo)數(shù)據(jù)被找到所需時(shí)間;其中傳送信息所花的時(shí)間,是在硬件設(shè)計(jì)時(shí)固定的,而尋找時(shí)間和延遲時(shí)間是與信息在磁盤(pán)上的位置有關(guān);然后設(shè)計(jì)出磁盤(pán)調(diào)度的設(shè)計(jì)方式,包括算法思路、步驟,以及要用到的主要數(shù)據(jù)結(jié)構(gòu)、函數(shù)模塊及其之間的調(diào)用關(guān)系等,并給出詳細(xì)的算法設(shè)計(jì),對(duì)編碼進(jìn)行了測(cè)試與分析。 最后進(jìn)行個(gè)人總結(jié)與設(shè)計(jì)體會(huì)。關(guān)鍵詞:最短尋道時(shí)間優(yōu)先算法、掃描算法、總尋道長(zhǎng)度.25目 錄前 言22. 課程設(shè)計(jì)任務(wù)及要求42.1 設(shè)計(jì)任務(wù)42.2 設(shè)計(jì)要求43. 算法及數(shù)據(jù)結(jié)構(gòu)53.1算法的總體思想(流程)53.2 實(shí)現(xiàn)過(guò)程中用到的數(shù)據(jù)結(jié)構(gòu)63.3 實(shí)現(xiàn)過(guò)程中用到的系統(tǒng)調(diào)用114. 程序

3、設(shè)計(jì)與實(shí)現(xiàn)114.1 最短尋道時(shí)間優(yōu)先算法(SSTF)模塊114.1.1程序流程圖114.1.2 程序說(shuō)明134.1.3 程序關(guān)鍵代碼134.2掃描算法(SCAN)模塊144.2.1 程序流程圖144.2.2 程序說(shuō)明164.2.3 程序關(guān)鍵代碼164.3 實(shí)驗(yàn)結(jié)果175. 結(jié)論266. 參考文獻(xiàn)267. 收獲、體會(huì)和建議272. 課程設(shè)計(jì)任務(wù)及要求2.1 設(shè)計(jì)任務(wù) 1.熟悉并掌握磁盤(pán)調(diào)度算法管理系統(tǒng)的設(shè)計(jì)方法,加強(qiáng)對(duì)所學(xué)各種調(diào)度算法及相應(yīng)算法的特點(diǎn)了解。 2.掌握磁盤(pán)調(diào)度的基本概念,深刻體會(huì)各個(gè)算法的優(yōu)缺點(diǎn),以及算法間的相似點(diǎn)。 2.2 設(shè)計(jì)要求 1)定義與算法相關(guān)的數(shù)據(jù)結(jié)構(gòu),如PCB、隊(duì)列

4、等;2) 實(shí)現(xiàn)2種不同的調(diào)度算法(可使用偽代碼或流程圖進(jìn)行分析);3) 算法執(zhí)行結(jié)束時(shí),應(yīng)給出總的尋道長(zhǎng)度;4) 磁道訪問(wèn)序列隨機(jī)生成,且要滿足一定的數(shù)量要求(不少于100個(gè));5)系統(tǒng)實(shí)現(xiàn)必須提供一定的交互性,所需測(cè)試數(shù)據(jù)應(yīng)當(dāng)以文件形式提供或者由用戶在測(cè)試過(guò)程中給出,不可將測(cè)試數(shù)據(jù)“寫(xiě)死”在系統(tǒng)實(shí)現(xiàn)代碼中;6)必須給出足夠的注釋,注釋量不得少于代碼量的一半;7)對(duì)于系統(tǒng)中所使用到的系統(tǒng)調(diào)用(API函數(shù)),必須給出函數(shù)的定義原型、使用方法,參數(shù)較為復(fù)雜的,還應(yīng)該給出參數(shù)的具體描述;3. 算法及數(shù)據(jù)結(jié)構(gòu) 3.1算法的總體思想(流程) 開(kāi)始輸入磁道的個(gè)數(shù)生成隨機(jī)的磁道號(hào)用戶輸入所選擇的算法進(jìn)行磁盤(pán)

5、調(diào)度輸入數(shù)字為1-2?輸出排序后的磁盤(pán)序列用戶輸入當(dāng)前磁道號(hào)顯示磁盤(pán)調(diào)度順序輸入為3?退出程序 結(jié)束總流程圖 Y N Y N 3.2 實(shí)現(xiàn)過(guò)程中用到的數(shù)據(jù)結(jié)構(gòu) 1.最短尋道時(shí)間優(yōu)先(SSTF)(從100號(hào)磁道開(kāi)始)被訪問(wèn)的下一個(gè)磁道號(hào)移動(dòng)距離(磁道數(shù))5545583391918219072160701501038112184146平均尋道長(zhǎng)度:55.3 圖a SSTF調(diào)度算法示例圖ciidao=55,58,39,18,90,160,150,38,184(可隨機(jī)生成多個(gè))用戶輸入當(dāng)前磁道號(hào)now,比較當(dāng)前磁道到每個(gè)磁道的移動(dòng)距離,選擇最短距離的磁道進(jìn)行移動(dòng)。now指向當(dāng)前磁道號(hào),計(jì)算尋道長(zhǎng)度su

6、m。用冒泡法對(duì)磁道數(shù)組進(jìn)行排序 返回內(nèi)側(cè)(外側(cè))掃描 將當(dāng)前磁道號(hào)與剩余沒(méi)有訪問(wèn)的磁道號(hào)進(jìn)行比較,重復(fù)上述操作。并計(jì)算平均尋道長(zhǎng)度ave。 圖b SSTF算法流程示例圖原磁道號(hào)隨機(jī)組成的數(shù)組:cidao=55,58,39,18,90,160,150,38,184;排序后的數(shù)組=18,38,39,5,58,90,150,160,184;輸入當(dāng)前磁道號(hào):now=100; 38 39 39 55 55 55 58 58 58 58 90 90 90 90 90now值:100 90 58 55 39 184 160 160 150 150 150 18 18 18 18 38 38 38 38 39

7、 39 39 39 55 55 55 55 58 58 58 58 90 90 90 90 now值:18 150 160 184 圖c SSTF算法隊(duì)列示意圖(按磁道訪問(wèn)順序)2.掃描(SCAN)算法(從100號(hào)磁道開(kāi)始,向磁道號(hào)增加方向訪問(wèn))被訪問(wèn)的下一個(gè)磁道號(hào)移動(dòng)距離(磁道數(shù))1505016010184249094583255339163811820平均尋道長(zhǎng)度:27.8 圖d SCAN算法示例圖原磁道號(hào)隨機(jī)組成的數(shù)組:cidao=55,58,39,18,90,160,150,38,184;排序后的數(shù)組=18,38,39,5,58,90,150,160,184;輸入當(dāng)前磁道號(hào):now=1

8、00;選擇磁道移動(dòng)方向;以磁道號(hào)增加的方向移動(dòng)為例: 55 58 58 90 90 90 184 184 184 184 160 160 160 160 160 150 150 150 150 150 150now值:100 150 160 184 90 58 18 38 38 39 39 39 55 55 55 58 58 58 90 90 90 184 184 184 160 160 160 150 150 150 now值:55 39 38 圖e SCAN算法隊(duì)列示意圖(按磁道訪問(wèn)順序) 3.3 實(shí)現(xiàn)過(guò)程中用到的系統(tǒng)調(diào)用系統(tǒng)模塊調(diào)用關(guān)系圖磁盤(pán)調(diào)度算法模擬系統(tǒng)最短尋道時(shí)間優(yōu)先掃描算法退出

9、4. 程序設(shè)計(jì)與實(shí)現(xiàn) 4.1 最短尋道時(shí)間優(yōu)先算法(SSTF)模塊 4.1.1程序流程圖輸入磁道號(hào)串用冒泡法將磁道號(hào)從大到小排序判斷now的大小調(diào)用SSTF()函數(shù)輸入當(dāng)前磁道號(hào)now開(kāi)始結(jié)束優(yōu)先服務(wù)離now最近的 磁道移動(dòng)方向,再掉頭服務(wù)計(jì)算總尋道長(zhǎng)度,并輸出移動(dòng)的平均尋道長(zhǎng)度直接從大到小給予磁道服務(wù)直接從小到大給予磁道服務(wù)找到離now尋道時(shí)間最短的磁道now<=cidao0 cidao0<now<cidaom-1 now>=cidaom-14.1.2 程序說(shuō)明算法分析 優(yōu)點(diǎn):相較于先來(lái)先服務(wù)算法(FCFS)有更好的尋道性能,使每次的尋道時(shí)間最短。 缺點(diǎn):易造成某個(gè)進(jìn)

10、程發(fā)生“饑餓”現(xiàn)象。 最短尋找時(shí)間優(yōu)先調(diào)度算法總是從等待訪問(wèn)者中挑選尋找時(shí)間最短的那個(gè)請(qǐng)求先執(zhí)行的,而不管訪問(wèn)者到來(lái)的先后次序。例如,如果現(xiàn)在讀寫(xiě)磁頭正在100號(hào)柱面上執(zhí)行輸出操作,而等待訪問(wèn)者依次要訪問(wèn)的柱面為55,58,39,18,90,160,150,38,184,那么,當(dāng)100號(hào)柱面的操作結(jié)束后,應(yīng)該先處理90號(hào)柱面的請(qǐng)求,然后到達(dá)58號(hào)柱面執(zhí)行操作,隨后處理55號(hào)柱面請(qǐng)求,后繼操作的次序應(yīng)該是39,38,18,150,160,184.采用最短尋找時(shí)間優(yōu)先算法決定等待訪問(wèn)者執(zhí)行操作的次序時(shí),讀寫(xiě)磁頭總共移動(dòng)多個(gè)柱面的距離,與先來(lái)先服務(wù)、算法比較,大幅度地減少了尋找時(shí)間,具有更好的尋道性

11、能,因而縮短了為各訪問(wèn)者請(qǐng)求服務(wù)的平均時(shí)間,也就提高了系統(tǒng)效率。但最短查找時(shí)間優(yōu)先(SSTF)調(diào)度,F(xiàn)CFS會(huì)引起讀寫(xiě)頭在盤(pán)面上的大范圍移動(dòng),SSTF查找距離磁頭最短(也就是查找時(shí)間最短)的請(qǐng)求作為下一次服務(wù)的對(duì)象。SSTF查找模式有高度局部化的傾向,會(huì)推遲一些請(qǐng)求的服務(wù),甚至引起無(wú)限拖延(又稱饑餓)。 算法流程:輸入磁頭初始磁道號(hào),序列長(zhǎng)度,磁道號(hào)序列。選擇磁盤(pán)調(diào)度算法(最短尋道時(shí)間優(yōu)先調(diào)度(SSTF))或(掃描調(diào)度算法(SCAN))中的任意一個(gè),若選擇SSTF,則輸出各進(jìn)程被調(diào)度的順序,并計(jì)算總的尋道長(zhǎng)度和平均尋道長(zhǎng)度,選擇關(guān)閉則結(jié)束磁盤(pán)調(diào)度。4.1.3 程序關(guān)鍵代碼for(i=0;i&l

12、t;m;i+) /*使用冒泡法按從小到大順序排列*/for(j=i+1;j<m;j+) if(arrayi>arrayj) temp=arrayi; arrayi=arrayj; arrayj=temp; if(arraym-1<=now) /*若當(dāng)前磁道號(hào)大于請(qǐng)求序列中最大者,則直接由外向內(nèi)依次給予各請(qǐng)求服務(wù)*/ for(i=m-1;i>=0;i-) cout<<arrayi<<" " sum=now-array0;else if(array0>=now) /*若當(dāng)前磁道號(hào)小于請(qǐng)求序列中最小者,則直接由內(nèi)向外依次給予各

13、請(qǐng)求服務(wù)*/ while(l>=0)&&(r<m) /*當(dāng)前磁道在請(qǐng)求序列范圍內(nèi)*/ if(now-arrayl)<=(arrayr-now) /*選擇與當(dāng)前磁道最近的請(qǐng)求給予服務(wù)*/ cout<<arrayl<<" " sum+=now-arrayl; now=arrayl; l=l-1; 4.2掃描算法(SCAN)模塊 4.2.1 程序流程圖開(kāi)始輸入磁道號(hào)串調(diào)用SCAN()函數(shù)調(diào)用冒泡排序法進(jìn)行排序輸入當(dāng)前磁道號(hào)now從磁道最外端開(kāi)始向內(nèi)掃描計(jì)算總尋道長(zhǎng)度,并輸出平均尋道長(zhǎng)度從磁道最內(nèi)端開(kāi)始向外掃描向內(nèi)掃描向外掃

14、描選擇磁道掃描方向結(jié)束 d=1 d=04.2.2 程序說(shuō)明算法分析 優(yōu)點(diǎn):排除了磁頭在盤(pán)面局部位置上的往復(fù)移動(dòng),SCAN算法在很大程度上消除了SSTF算法的不公平性,但仍有利于對(duì)中間磁道的請(qǐng)求。 缺點(diǎn):新進(jìn)來(lái)的訪問(wèn)此磁道的進(jìn)程的請(qǐng)求會(huì)被大大地推遲。增加延遲。 SCAN 算法又稱電梯調(diào)度算法。SCAN算法是磁頭前進(jìn)方向上的最短查找時(shí)間優(yōu)先算法。 注:“電梯調(diào)度”算法是從移動(dòng)臂當(dāng)前位置開(kāi)始沿著臂的移動(dòng)方向去選擇離當(dāng)前移動(dòng)臂最近的那個(gè)柱訪問(wèn)者,如果沿臂的移動(dòng)方向無(wú)請(qǐng)求訪問(wèn)時(shí),就改變臂的移動(dòng)方向再選擇。這好比乘電梯,如果電梯已向上運(yùn)動(dòng)到4層時(shí),依次有3位乘客張一、張二、張三在等候乘電梯。他們的要求是:

15、張一在2層等待去10層;張二在5層等待去底層;張三在8層等待去15層。由于電梯目前運(yùn)動(dòng)方向是向上,所以電梯的形成是先把乘客張三從8層帶到15層,然后電梯換成下行方向,把乘客張二從5層帶到底層,電梯最后再調(diào)換方向,把乘客張一從2層送到10層。 我們?nèi)杂们笆龅耐焕觼?lái)討論采用“電梯調(diào)度”算法的情況。由于磁盤(pán)移動(dòng)臂的初始方向有兩個(gè),而該算法是與移動(dòng)臂方向有關(guān),所以分成兩種情況來(lái)討論。這里是:移動(dòng)臂先由里向外移動(dòng),再由外向里移動(dòng)。開(kāi)始時(shí),在100號(hào)柱面執(zhí)行操作的讀寫(xiě)磁頭的移動(dòng)臂方向是由里向外,趨向32號(hào)柱面的位置,因此,當(dāng)訪問(wèn)100號(hào)柱面的操作結(jié)束后,沿臂移動(dòng)方向最近的柱面是150號(hào)柱面。所以應(yīng)先為

16、150號(hào)柱面的訪問(wèn)者服務(wù),然后是為160號(hào)柱面的訪問(wèn)者服務(wù)。之后,由于在向外移方向已無(wú)訪問(wèn)等待者,故改變移動(dòng)臂的方向,由外向里依次為各訪問(wèn)者服務(wù)。在這種情況下為等待訪問(wèn)者服務(wù)的次序是184,90,58,55,39,38,18。 算法流程:輸入磁頭初始磁道號(hào),序列長(zhǎng)度,磁道號(hào)序列。選擇磁盤(pán)調(diào)度算法(最短尋道時(shí)間優(yōu)先調(diào)度(SSTF))或(掃描調(diào)度算法(SCAN))中的任意一個(gè),若選擇SCAN,則需要選擇磁頭移動(dòng)方向是“向磁道號(hào)增加方向訪問(wèn)”或“向磁道號(hào)減少方向訪問(wèn)”,之后,輸出各進(jìn)程被調(diào)度的順序,并計(jì)算總的尋道長(zhǎng)度和平均尋道長(zhǎng)度,選擇關(guān)閉則結(jié)束磁盤(pán)調(diào)度。4.2.3 程序關(guān)鍵代碼if(d=0) /*

17、選擇移動(dòng)臂方向向內(nèi),則先向內(nèi)掃描*/ for(j=l;j>=0;j-) cout<<arrayj<<" " /*輸出向內(nèi)掃描的序列*/ for(j=r;j<m;j+) /*磁頭移動(dòng)到最小號(hào),則改變方向向外掃描未掃描的磁道*/ cout<<arrayj<<" " /*輸出向外掃描的序列*/ sum=now-2*array0+arraym-1; else /*選擇移動(dòng)臂方向向外,則先向外掃描*/ for(j=r;j<m;j+) cout<<arrayj<<"

18、" /*輸出向外掃描的序列*/ for(j=l;j>=0;j-) /*磁頭移動(dòng)到最大號(hào),則改變方向向內(nèi)掃描未掃描的磁道*/ cout<<arrayj<<" " sum=-now-array0+2*arraym-1; ave=(float)(sum)/(float)(m);4.3 實(shí)驗(yàn)結(jié)果 運(yùn)行界面截圖及相應(yīng)代碼1. 主界面void display() cout<<"nnnn Operating Systems Curriculum Designn" cout<<"n "c

19、out<<"n "cout<<"n 名稱: 磁盤(pán)調(diào)度 " cout<<"n "cout<<"n 工具: Visual Studio 2010 " cout<<"n "cout<<"n 班級(jí):1205 " cout<<"n "cout<<"n 作者:施靜 " cout<<"n "cout<<"

20、;n 學(xué)號(hào):211214020 " cout<<"n "cout<<"n n" system("pause");system("cls");2. 前言 提示用戶此程序?qū)崿F(xiàn)的算法cout<<"【載入完成】"<<endl<<endl;cout<<" 前言"<<endl<<endl;cout<<" 歡迎使用磁盤(pán)調(diào)度算法系統(tǒng),本程序?qū)崿F(xiàn)了常用的磁盤(pán)調(diào)度算法如

21、下所示:nn"cout<<" 最短尋道時(shí)間優(yōu)先(SSTF):最短尋道時(shí)間優(yōu)先算法要求訪問(wèn)的磁盤(pán)與當(dāng)前磁頭所在的n"cout<<" 磁盤(pán)距離最近,以使每次的尋道時(shí)間最短。nn"cout<<" 掃描算法(SCAN)電梯調(diào)度:掃描算法不僅考慮到欲訪問(wèn)的磁道與當(dāng)前磁道的距離n"cout<<" 更優(yōu)先考慮的是磁頭的當(dāng)前移動(dòng)方向。nn" system("pause");system("cls");/清屏3. 用戶選擇所使用的算法(

22、先隨機(jī)生成101個(gè)磁道號(hào))void showMenu(int cidao,int n) int choice; while(true) cout<<"請(qǐng)您選擇喜歡的算法來(lái)實(shí)現(xiàn)調(diào)度(輸入1-3):" cout<<"n " cout<<"n " cout<<"n 1.最短尋道時(shí)間優(yōu)先(SSTF) |" cout<<"n " cout<<"n 2.掃描算法(SCAN) " cout<<"n

23、 " cout<<"n 3.退出(EXIT) " cout<<"n " cout<<"n n" cout<<endl; while(true) cout<<"現(xiàn)在您選擇的算法號(hào)是(1-3):" cin>>choice; switch(choice) /*case 1: FCFS(a,n); break;*/ case 1: SSTF(cidao,n); break; case 2: SCAN(cidao,n); break; case

24、 3: cout<<"n要退出系統(tǒng)了歡迎使用本系統(tǒng)n" exit(0); 4. 最短尋道時(shí)間優(yōu)先算法/*最短尋道時(shí)間優(yōu)先調(diào)度算法*/void SSTF(int cidao,int m) system("cls"); int k=1; int now,l,r; int i,j,sum=0; int a; char str100; float ave; cidao=bubble(cidao,m); /調(diào)用冒泡排序算法排序 cout<<"請(qǐng)輸入當(dāng)前的磁道號(hào):" C: cin>>str; /對(duì)輸入數(shù)據(jù)進(jìn)行有

25、效性判斷 a=decide(str); if(a=0) cout<<"輸入數(shù)據(jù)的類(lèi)型錯(cuò)誤,請(qǐng)重新輸入!"<<endl; goto C; else now=trans(str,a); /輸入當(dāng)前磁道號(hào) if(cidaom-1<=now) /若當(dāng)前磁道號(hào)大于請(qǐng)求序列中最大者,則直接由外向內(nèi)依次給予各請(qǐng)求服務(wù) cout<<"磁盤(pán)掃描序列為:" for(i=m-1;i>=0;i-) cout<<cidaoi<<" " sum=now-cidao0; if(cidao0&g

26、t;=now) /若當(dāng)前磁道號(hào)小于請(qǐng)求序列中最小者,則直接由內(nèi)向外依次給予各請(qǐng)求服務(wù) cout<<"磁盤(pán)掃描序列為:" for(i=0;i<m;i+) cout<<cidaoi<<" " sum=cidaom-1-now; if(now>cidao0&&now<cidaom-1) /若當(dāng)前磁道號(hào)大于請(qǐng)求序列中最小者且小于最大者 cout<<"磁盤(pán)掃描序列為:" while(cidaok<now) /確定當(dāng)前磁道在已排的序列中的位置,后面的算法都用到

27、了,可以直接復(fù)制后少量修改,節(jié)省時(shí)間。 k+; l=k-1; r=k; while(l>=0)&&(r<m) /當(dāng)前磁道在請(qǐng)求序列范圍內(nèi) if(now-cidaol)<=(cidaor-now) /選擇與當(dāng)前磁道最近的請(qǐng)求給予服務(wù) cout<<cidaol<<" " sum+=now-cidaol; now=cidaol; l=l-1; else cout<<cidaor<<" " sum+=cidaor-now; now=cidaor; r=r+1; if(l=-1) /

28、磁頭移動(dòng)到序列的最小號(hào),返回外側(cè)掃描仍未掃描的磁道 for(j=r;j<m;j+) cout<<cidaoj<<" " sum+=cidaom-1-cidao0; else /磁頭移動(dòng)到序列的最大號(hào),返回內(nèi)側(cè)掃描仍未掃描的磁道 for(j=l;j>=0;j-) cout<<cidaoj<<" " sum+=cidaom-1-cidao0; ave=(float)(sum)/(float)(m);/求平均尋道長(zhǎng)度 cout<<endl; cout<<"總的尋道長(zhǎng)度

29、: "<<sum<<endl; cout<<"平均尋道長(zhǎng)度: "<<ave<<endl; cout<<"請(qǐng)按任意鍵返回系統(tǒng)菜單"<<endl; getch(); showMenu(cidao,m); /回到主界面最短尋道時(shí)間優(yōu)先(SSTF)算法實(shí)現(xiàn)界面 (2) 掃描(SCAN)算法/*掃描調(diào)度算法*/void SCAN(int cidao,int n)/先要給出當(dāng)前磁道號(hào)和移動(dòng)臂的移動(dòng)方向int temp;int i,j;int now;int sum;for(

30、i=0;i<n;i+) /給磁道號(hào)排序 for(j=i+1;j<n;j+) if(cidaoi>cidaoj) temp=cidaoi; cidaoi=cidaoj; cidaoj=temp; cout<<"n按非遞減順序排列好的磁道: n"for(i=0;i<n;i+) /輸出排好序的磁道號(hào) cout<<cidaoi<<" "cout<<endl;cout<<"n請(qǐng)輸入當(dāng)前的磁道號(hào): "cin>>now; /用戶自定義當(dāng)前磁道號(hào)if(ci

31、daon-1<=now) for(i=n-1;i>=0;i-) cout<<cidaoi<<" " sum=now-cidao0; else /cidaon-1>now if(cidao0>=now) for(i=0;i<n;i+) cout<<cidaoi<<" " sum=cidaon-1-now; else /cidao0<now && cidaon-1>now int pointer; int location=1; int left,rig

32、ht; while(cidaolocation<now) location+; left=location-1; right=location; cout<<"n請(qǐng)輸入當(dāng)前磁頭想要移動(dòng)的方向(1 磁道號(hào)增加方向,0 磁道號(hào)減小方向): " loop: cin>>pointer; cout<<"n磁盤(pán)調(diào)度順序?yàn)? n" if(pointer=0 | pointer=1) if(pointer=0)/磁頭向左移動(dòng)到最小號(hào),再改變方向向外掃描未掃描的磁道 for(j=left;j>=0;j-) cout<<cidaoj<<" " for(j=right;j<n;j+) cout<<cidaoj<<" " sum=now+cidaon-1-2*cidao0; cout<<endl; if(pointer=1)/磁頭向右移動(dòng)到最大號(hào),再改變方向向內(nèi)掃描未掃描的磁道 for(j=right;j<n;j+) cout<<cidaoj<

溫馨提示

  • 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)論