模擬磁盤調(diào)度算法操作系統(tǒng)課程設(shè)計(jì)_第1頁
模擬磁盤調(diào)度算法操作系統(tǒng)課程設(shè)計(jì)_第2頁
模擬磁盤調(diào)度算法操作系統(tǒng)課程設(shè)計(jì)_第3頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、某某大學(xué)課程設(shè)計(jì)報(bào)告操作系統(tǒng)課程名稱:設(shè)計(jì)題目:模擬磁盤調(diào)度算法系 別:計(jì)算機(jī)系專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)組 別:學(xué)生姓名:學(xué) 號(hào):起止日期:指導(dǎo)教師:目錄第一章 需求分析 11.1 課程設(shè)計(jì)的簡(jiǎn)介 11.2 課程設(shè)計(jì)的目的 11.3 磁盤調(diào)度主要思想 11.4 課程設(shè)計(jì)內(nèi)容 2第二章 概要設(shè)計(jì) 32.1 設(shè)計(jì)思想 32.2 數(shù)據(jù)結(jié)構(gòu) 32.3 模塊調(diào)用關(guān)系圖 32.4 子模塊程序流程圖 5第三章 詳細(xì)設(shè)計(jì) 63.1 模塊劃分 6第四章 代碼測(cè)試 94.1 先來先服務(wù) 94.1 最短尋道時(shí)間優(yōu)先 114.1 掃描算法 12第五章 心得體會(huì) 13第六章 致謝 13參考文獻(xiàn) 13附源代碼 1第一章

2、需求分析1.1 課程設(shè)計(jì)的簡(jiǎn)介這是一個(gè)用VC+6.0為工具、C+為編程語言而實(shí)現(xiàn)模擬先來先服務(wù)算法(FCFS、最短尋道時(shí)間優(yōu)先算法(SSTF、掃描算法(SCAN的一個(gè)磁盤調(diào)度程 序。該程序設(shè)計(jì)系統(tǒng)主界面可以靈活選擇某種算法并算出磁頭移動(dòng)的總磁道數(shù)以 及平均磁道數(shù)。1.2 課程設(shè)計(jì)的目的本課程設(shè)計(jì)的目的是通過設(shè)計(jì)一個(gè)磁盤調(diào)度模擬系統(tǒng), 從而使磁盤調(diào)度算法 更加形象化,容易使人理解, 使磁盤調(diào)度的特點(diǎn)更簡(jiǎn)單明了, 能使使用者加深對(duì) 先來先服務(wù)算法(FCFS、最短尋道時(shí)間優(yōu)先算法(SSTF、掃描算法(SCAN等 磁盤調(diào)度算法的理解。1.3 磁盤調(diào)度主要思想 設(shè)備的動(dòng)態(tài)分配算法與進(jìn)程調(diào)度相似,也是基于

3、一定的分配策略的。常用的分配策略有先請(qǐng)求先分配、 優(yōu)先級(jí)高者先分配等策略。 在多道程序系統(tǒng)中, 低效 率通常是由于磁盤類旋轉(zhuǎn)設(shè)備使用不當(dāng)造成的。 操作系統(tǒng)中,對(duì)磁盤的訪問要求 來自多方面,常常需要排隊(duì)。這時(shí),對(duì)眾多的訪問要求按一定的次序響應(yīng),會(huì)直 接影響磁盤的工作效率, 進(jìn)而影響系統(tǒng)的性能。 訪問磁盤的時(shí)間因子由 3 部分構(gòu) 成,它們是查找(查找磁道) 時(shí)間、等待(旋轉(zhuǎn)等待扇區(qū)) 時(shí)間和數(shù)據(jù)傳輸時(shí)間, 其中查找時(shí)間是決定因素。 因此,磁盤調(diào)度算法先考慮優(yōu)化查找策略, 需要時(shí)再 優(yōu)化旋轉(zhuǎn)等待策略。平均尋道長度(L)為所有磁道所需移動(dòng)距離之和除以總的所需訪問的磁道 數(shù)(N),即: L=(M1+M2

4、十+Mi+MN /N。其中Mi為所需訪問的磁道號(hào)所需移動(dòng)的磁道數(shù)。啟動(dòng)磁盤執(zhí)行輸入輸出操作時(shí), 要把移動(dòng)臂移動(dòng)到指定的柱面, 再等待指定 扇區(qū)的旋轉(zhuǎn)到磁頭位置下,然后讓指定的磁頭進(jìn)行讀寫,完成信息傳送。因此, 執(zhí)行一次輸入輸出所花的時(shí)間有:尋找時(shí)間磁頭在移動(dòng)臂帶動(dòng)下移動(dòng)到指定柱面所花的時(shí)間延遲時(shí)間指定扇區(qū)旋轉(zhuǎn)到磁頭下所需的時(shí)間。 傳送時(shí)間由磁頭進(jìn)程讀寫完成信息傳送的時(shí)間。 其中傳送信息所花的時(shí)間, 是在硬件設(shè)計(jì)就固定的。 而尋找時(shí)間和延遲時(shí)間 是與信息在磁盤上的位置有關(guān)。為了減少移動(dòng)臂進(jìn)行移動(dòng)花費(fèi)的時(shí)間, 每個(gè)文件的信息不是按盤面上的磁道 順序存放滿一個(gè)盤面后, 再放到下一個(gè)盤面上。 而是按柱

5、面存放, 同一柱面上的 各磁道被放滿信息后, 再放到下一個(gè)柱面上。 所以各磁盤的編號(hào)按柱面順序 (從 0 號(hào)柱面開始),每個(gè)柱面按磁道順序,每個(gè)磁道又按扇區(qū)順序進(jìn)行排序。1.4 課程設(shè)計(jì)內(nèi)容 系統(tǒng)主界面可以靈活選擇某種算法,算法包括:先來先服務(wù)算法(FCFS)、最短尋道時(shí)間優(yōu)先算法(SSTF、掃描算法(SCA)并計(jì)算及比較磁頭移動(dòng)總磁 道數(shù)和平均磁道數(shù)。1.4.1 、先來先服務(wù)算法( FCFS、 這是一種比較簡(jiǎn)單的磁盤調(diào)度算法。 它根據(jù)進(jìn)程請(qǐng)求訪問磁盤的先后次序進(jìn)行調(diào)度。此算法的優(yōu)點(diǎn)是公平、簡(jiǎn)單,且每個(gè)進(jìn)程的請(qǐng)求都能依次得到處理,不 會(huì)出現(xiàn)某一進(jìn)程的請(qǐng)求長期得不到滿足的情況。此算法由于未對(duì)尋道

6、進(jìn)行優(yōu)化, 在對(duì)磁盤的訪問請(qǐng)求比較多的情況下, 此算法將降低設(shè)備服務(wù)的吞吐量, 致使平 均尋道時(shí)間可能較長,但各進(jìn)程得到服務(wù)的響應(yīng)時(shí)間的變化幅度較小。1.4.2 、最短尋道時(shí)間優(yōu)先算法( SSTF、 該算法選擇這樣的進(jìn)程,其要求訪問的磁道與當(dāng)前磁頭所在的磁道距離最近,以使每次的尋道時(shí)間最短, 該算法可以得到比較好的吞吐量, 但卻不能保證 平均尋道時(shí)間最短。 其缺點(diǎn)是對(duì)用戶的服務(wù)請(qǐng)求的響應(yīng)機(jī)會(huì)不是均等的, 因而導(dǎo) 致響應(yīng)時(shí)間的變化幅度很大。 在服務(wù)請(qǐng)求很多的情況下, 對(duì)內(nèi)外邊緣磁道的請(qǐng)求 將會(huì)無限期的被延遲,有些請(qǐng)求的響應(yīng)時(shí)間將不可預(yù)期。1.4.3 、掃描算法( SCAN、 掃描算法不僅考慮到欲

7、訪問的磁道與當(dāng)前磁道的距離, 更優(yōu)先考慮的是磁頭的當(dāng)前移動(dòng)方向。 例如,當(dāng)磁頭正在自里向外移動(dòng)時(shí), 掃描算法所選擇的下一個(gè) 訪問對(duì)象應(yīng)是其欲訪問的磁道既在當(dāng)前磁道之外, 又是距離最近的。 這樣自里向 外地訪問,直到再無更外的磁道需要訪問才將磁臂換向,自外向里移動(dòng)。這時(shí), 同樣也是每次選擇這樣的進(jìn)程來調(diào)度, 即其要訪問的磁道, 在當(dāng)前磁道之內(nèi), 從 而避免了饑餓現(xiàn)象的出現(xiàn)。 由于這種算法中磁頭移動(dòng)的規(guī)律頗似電梯的運(yùn)行, 故 又稱為電梯調(diào)度算法。 此算法基本上克服了最短尋道時(shí)間優(yōu)先算法的服務(wù)集中于 中間磁道和響應(yīng)時(shí)間變化比較大的缺點(diǎn), 而具有最短尋道時(shí)間優(yōu)先算法的優(yōu)點(diǎn)即 吞吐量較大, 平均響應(yīng)時(shí)間

8、較小, 但由于是擺動(dòng)式的掃描方法, 兩側(cè)磁道被訪問 的頻率仍低于中間磁道。第二章 概要設(shè)計(jì)2.1 設(shè)計(jì)思想本次課程設(shè)計(jì)我們是以面向?qū)ο蟮乃枷霝橹鳎?Visual C 為工具實(shí) 現(xiàn)模擬磁盤調(diào)度。程序主要是利用冒泡排序函數(shù)、FCFS函數(shù)、SSTF函數(shù)、SCAN函數(shù)、CSCA函數(shù)實(shí)現(xiàn)函數(shù)的功能。禾U用菜單式的選擇界面,方便的用戶操作。 最終對(duì)每一種模擬磁盤調(diào)度輸出磁頭平均移動(dòng)的磁道數(shù)以及總磁道數(shù)。2.2 數(shù)據(jù)結(jié)構(gòu)該程序主要是利用7個(gè)函數(shù)。Panduan ()函數(shù):對(duì)輸入的字符進(jìn)行判斷是否合法,zhuanhua ()函數(shù):對(duì)輸入合法的字符進(jìn)行轉(zhuǎn)化,bubble ()函數(shù):對(duì) 輸入的磁道進(jìn)行冒泡排序

9、,F(xiàn)CFS()函數(shù),即先來先服務(wù)函數(shù),SSTF()函數(shù): 最短最短尋道時(shí)間函數(shù),SCAN()函數(shù):掃描函數(shù),CSCAN )函數(shù):循環(huán)掃描 函數(shù)。各函數(shù)之間有點(diǎn)可以相互調(diào)用,共同實(shí)現(xiàn)要求。本程序主要用到的數(shù)據(jù)結(jié)構(gòu)為數(shù)組、字符串,包括對(duì)字符串的合法性判斷, 利用數(shù)組算磁頭移動(dòng)的總磁道數(shù),平均移動(dòng)磁道數(shù)。2.3 模塊調(diào)用關(guān)系圖圖2-1磁盤調(diào)度模擬系統(tǒng)2.4子模塊程序流程圖先來先服務(wù)算法(FCFS流程圖:FCFS算法流程圖-開始輸入磁道號(hào)按輸入順序?qū)?序列輸岀與磁道求平均尋道長度"動(dòng)平輸岀移動(dòng)旳平 道數(shù)L均磁1結(jié)束最短尋道時(shí)間優(yōu)先算法(SSTF)流程圖243掃描算法(SCAN流程圖開始輸入磁

10、道號(hào)調(diào)用冒泡排序函數(shù)SCAN 算法流程圖輸出排好序的磁道一 序列 輸入當(dāng)前磁道號(hào)判斷當(dāng)前磁頭在序 列中的位置選擇與當(dāng)前磁道距離最近 的磁道進(jìn)行掃描移動(dòng)到最小(人丿號(hào),改向外"(內(nèi))移動(dòng)掃描未掃描的磁道1求平均尋道長度求總尋道長度結(jié)束第三章詳細(xì)設(shè)計(jì)3.1模塊劃分本系統(tǒng)劃分為四個(gè)模塊:先來先服務(wù)算法模塊int FCFS(i nt array,i ntm)、最短尋道時(shí)間優(yōu)先算法模塊int SSTF(int array,int m)、掃描算法模塊int SCAN(int array,int m)3.1.1 先來先服務(wù)算法模塊:int FCFS(i nt array,i nt m)輸入磁道號(hào),

11、按先來先服務(wù)的策略輸出磁盤請(qǐng)求序列,求平均尋道長度,輸出移動(dòng)平均磁道數(shù)。主要代碼:for(i=0,j=1;j<m;i+,j+)sum+=abs(arrayj-arrayi);ave=(float)(sum)/(float)(m);3.1.2 最短尋道時(shí)間優(yōu)先算法模塊:int SSTF(i nt array,i nt m)將磁道號(hào)用冒泡法從小到大排序, 輸出排好序的磁道序列, 輸入當(dāng)前磁道號(hào),根據(jù)前磁道在已排的序列中的位置, 動(dòng)的平均磁道數(shù)。主要代碼: for(i=0;i<m;i+) /*for(j=i+1;j<m;j+)if(arrayi>arrayj)temp=arr

12、ayi;arrayi=arrayj;arrayj=temp;if(arraym-1<=now) /*大者,則直接由外向內(nèi)依次給予各請(qǐng)求服務(wù) for(i=m-1;i>=0;i-)cout<<arrayi<<" "sum=now-array0;elseif(array0>=now) /*小者,則直接由內(nèi)向外依次給予各請(qǐng)求服務(wù)while(l>=0)&&(r<m) /*選擇掃描的順序, 求出平均尋道長度, 輸出移使用冒泡法按從小到大順序排列 */若當(dāng)前磁道號(hào)大于請(qǐng)求序列中最*/if(now-arrayl)<

13、=(arrayr-now) /*若當(dāng)前磁道號(hào)小于請(qǐng)求序列中最*/當(dāng)前磁道在請(qǐng)求序列范圍內(nèi) */選擇與當(dāng)前磁道最近的請(qǐng)求給予服務(wù) */cout<<arrayl<<" "sum+=now-arrayl;now=arrayl;l=l-1;3.1.3 掃描算法模塊: int SCAN(int array,int m) 將磁道號(hào)用冒泡法從小到大排序, 輸出排好序的序列, 輸入當(dāng)前磁道號(hào), 選 擇移動(dòng)臂的移動(dòng)方向,根據(jù)當(dāng)前磁道在已排的序列中的位置,選擇掃描的順序, 求出平均尋道長度,輸出移動(dòng)的平均磁道數(shù)。主要代碼: if(d=0) /* 選擇移動(dòng)臂方向向內(nèi),則先

14、向內(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<<" " /* 輸出

15、向外掃描的序列 * 、/* 磁頭移動(dòng)到最大號(hào), 則改變方向向內(nèi)for(j=l;j>=0;j-)掃描未掃描的磁道*/coutvvarrayjvv""sum=-no w-array0+2*arraym-1;ave=(float)(sum)/(float)(m);第四章測(cè)試4.1先來先服務(wù)算法輸入磁道序列:65 78 34 23 87 100 18 26當(dāng)前磁道號(hào):80磁盤掃描序列為:65 78 34 23 87 100 18 26平均尋到長度:31.25磁頭移動(dòng)總磁道數(shù):2504.2最短尋道時(shí)間優(yōu)先算法(1)當(dāng)前磁道號(hào)大于磁道序列中的最大的磁道號(hào)時(shí)3243d 07 55

16、232430?88砧口礎(chǔ)-2. :道.31數(shù) 為磁為列的列蠱 序前序舌心 求當(dāng)描道動(dòng) 盤聾均頭輸入磁道序列:65 78 34 23 87 100 18 26排序后的磁道序列為:18 23 26 34 65 78 87 100當(dāng)前磁道號(hào):200磁盤掃描序列為100 87 78 65 34 26 23 18平均尋到長度:22.75磁頭移動(dòng)總磁道數(shù):182001?887564362328132624356000 0 712 8為號(hào)10 列道* 農(nóng)為:道 盤的列脣 磁前序養(yǎng) 的當(dāng)描道動(dòng) 后入掃書(2)當(dāng)刖磁道號(hào)小于磁道序列中的最小的磁道號(hào)時(shí)輸入磁道序列:65 78 34 23 87 100 18 26

17、排序后的磁道序列為:18 23 26 34 65 78 87 100當(dāng)前磁道號(hào):10磁盤掃描序列為:18 23 26 34 65 78 87 100平均掃描長度:11.25磁道移動(dòng)總磁道數(shù):90436232 5 02 9 為號(hào)1B1-: 列道:丄教 蠱為希 盤的列富 磁前序 的當(dāng)描道動(dòng) 后入掃一62328 01 134 65 78 8765 78 87 100100(3)當(dāng)前磁道號(hào)大于磁道序列中的最小的磁道號(hào)且小于最大磁道號(hào)時(shí)輸入磁道序列:65 78 34 23 87 100 18 26排序后的磁道序列為:18 23 26 34 65 78 87 100當(dāng)前磁道號(hào):80磁盤掃描序列為:78 8

18、7 100 65 34 26 23 18平均掃描長度:13.25磁道移動(dòng)總磁道數(shù):106I!二盤的列匱 磁前序舌心 的當(dāng)描道動(dòng) 后入掃書均頭為號(hào)78洌道.:18 23 ;8087 1002510634 6587 10034 26 23 1S4.3掃描算法(1)當(dāng)前磁道號(hào)大于磁道序列中的最大的磁道號(hào)時(shí)輸入磁道序列:65 78 34 23 87 100 18 26排序后的磁道序列為:18 23 26 34 65 78 87 100當(dāng)前磁道號(hào):200磁盤掃描序列為100 87 78 65 34 26 23 18平均尋到長度:22.75磁頭移動(dòng)總磁道數(shù):182(2)當(dāng)前磁道號(hào)小于磁道序列中的最小的磁道

19、號(hào)時(shí)輸入磁道序列:65 78 34 23 87 100 18 26排序后的磁道序列為:18 23 26 34 65 78 87 100當(dāng)前磁道號(hào):10磁盤掃描序列為:18 23 26 34 65 78 87 100平均掃描長度:11.25磁道移動(dòng)總磁道數(shù):90序后的磁盤序列為 18 23 26 34 65 78 87 100 輸入當(dāng)前苗磁道號(hào)0盤掃描序列為】18 23 26 34 65 78 87 100(3)當(dāng)前磁道號(hào)大于磁道序列中的最小的磁道號(hào)且小于最大磁道號(hào)(磁頭向外)時(shí)輸入磁道序列:65 78 34 23 87 100 18 26排序后的磁道序列為:18 23 26 34 65 78

20、87 100當(dāng)前磁道號(hào):80請(qǐng)輸入當(dāng)前移動(dòng)臂的移動(dòng)的方向(1表示向外,0表示向內(nèi)):1磁盤掃描序列為:87 100 78 65 34 26 23 18平均尋到長度:12.75磁道移動(dòng)總磁道數(shù):1023向65方?80力08 0 2 移丄7516 為口咼872. 列道臂:丄數(shù) 霍動(dòng)為,道 一盤的移列蠱 礒煎刖序舌心 的當(dāng)當(dāng)描道動(dòng) 、/FI入入掃睦 一 頭62328i34 65 78 87 100<1表示向外,®表示向內(nèi):134 26 23 18O為聶 盤阿列專 前序首 的當(dāng)描道動(dòng) 后入掃一 葫為號(hào)87列道-t 18 :801002S231826 34 佔(zhàn)?8 87 10023 26

21、 34 65 78請(qǐng)選擇算法,5Press any key to cont inuej. i*n *第五章 心的體會(huì)通過這次的課程設(shè)計(jì)使我認(rèn)識(shí)到要將操作系統(tǒng)這門計(jì)算機(jī)專業(yè)的課學(xué)好不 僅僅是要把書上的基本知識(shí)學(xué)好而且還要不斷進(jìn)行實(shí)踐, 將所學(xué)的跟實(shí)踐操作結(jié) 合起來才能更好地鞏固所學(xué),才能提高自己實(shí)踐能力 . 通過這次的設(shè)計(jì)使我認(rèn)識(shí) 到只停留在表面理解問題是很難使問題得到很好的解決的, 實(shí)踐能力與理論知識(shí) 同樣重要。可以說此課程設(shè)計(jì)的理論難度并不大, 但是若要深入發(fā)掘其中的東西, 并且實(shí)際去編程實(shí)現(xiàn), 就遇到了相當(dāng)大的難度。 因?yàn)榕c之涉及的很多方面并沒有 學(xué)過,需要自己去自學(xué)和實(shí)踐檢驗(yàn)。通過本次課

22、程設(shè)計(jì),通過模擬磁盤調(diào)度及進(jìn)程排隊(duì)算法來加深對(duì)操作系統(tǒng)中 各個(gè)磁臂調(diào)度算法概念的理解。模擬磁盤調(diào)度算法(FCFS,SSTF,SCAN,CSCAN實(shí) 現(xiàn)各種不同調(diào)度算法的過程, 并計(jì)算各算法的平均尋道長度, 以便于我們判斷各 種算法的優(yōu)劣以及各種算法使用的場(chǎng)合。對(duì) VC+6.0的應(yīng)用也更加得心應(yīng)手。第六章 致謝感謝陜粉麗老師和本組成員在這次系統(tǒng)開發(fā)過程中對(duì)我的幫助參考文獻(xiàn)1 計(jì)算機(jī)操作系統(tǒng) 高等教育出版社,作者:孫鐘秀,費(fèi)翔林,駱斌 等編著2 VC+深入詳解 電子工業(yè)出版社作者:孫鑫,余指導(dǎo)教師評(píng)語:指導(dǎo)教師簽名:年月日成績 評(píng) 疋項(xiàng)目權(quán)重成績1、設(shè)計(jì)過程中出勤、學(xué)習(xí)態(tài)度等方面0.12、設(shè)計(jì)技術(shù)

23、水平0.43、安全程度及可操作程度0.24、設(shè)計(jì)報(bào)告書寫及圖紙規(guī)范程度0.3總成績教研室審核意見:教研室主任簽字:年月日教學(xué)院(系)審核意見:主任簽字:年月日附源代碼#include<stdio.h>#include<stdlib.h>#include<iostream.h>#include<math.h> const int maxsize=1000;int panduan(char str);int zhuanhua(char str,int a);int *bubble(int cidao,int m);int FCFS(int cidao

24、,int m);void SSTF(int cidao,int m);void SCAN(int cidao,int m);int main()int a;int c;int cidaomaxsize;int i=0,count;char str100;cout<<" 請(qǐng)輸入磁道序列( 0 結(jié)束): "<<endl; bei1:cin>>str;a=panduan(str);if(a=0)"<<endl;"<<endl;cout<<" 輸入數(shù)據(jù)的類型錯(cuò)誤 ,請(qǐng)重新輸入! g

25、oto bei1;elsecidaoi=zhuanhua(str,a);i+;while(cidaoi-1!=0)cin>>str;a=panduan(str);if(a=0)cout<<" 輸入數(shù)據(jù)的類型錯(cuò)誤 ,請(qǐng)重新輸入! else cidaoi=zhuanhua(str,a); i+; count=i-1; cout<<" 你輸入的磁道序列為: " for(i=0;i<count;i+)cout<<cidaoi<<" " cout<<endl; while(1)

26、 cout<<endl;cout<<"|"<<endl;cout<<"|(*A_A*)系統(tǒng)菜單(*A_A*)|"<<endl;cout<<"|"<<endl;cout<<"|"<<endl;cout<<"|1. 先來先服務(wù)|"<<endl;cout<<"|"<<endl;cout<<"|2. 最短尋道

27、時(shí)間優(yōu)先|"<<endl;cout<<"|"<<endl;cout<<"|3. 掃描調(diào)度|"<<endl;cout<<"|"<<endl;cout<<"|4. 退出|"<<endl;cout<<"|"<<endl;cout<<"|"<<endl;cout<<"|"<<e

28、ndl;bei7:cout<<" 請(qǐng)選擇算法:bei6:cin>>str;a=panduan(str);if(a=0)cout<<" 輸入數(shù)據(jù)的類型錯(cuò)誤 ,請(qǐng)重新輸入! "<<endl; goto bei6;elsec=zhuanhua(str,a);if(c=5)break;if(c>5)cout<<" 數(shù)據(jù)輸入錯(cuò)誤!請(qǐng)重新輸入 "<<endl; goto bei7;switch(c)case 1:FCFS(cidao,count); break;case 2:SS

29、TF(cidao,count); break;case 3:SCAN(cidao,count); break; return 0;/*判斷輸入數(shù)據(jù)是否有效 */ int panduan(char str) int i=0;while(stri!='0')if(stri<'0'|stri>'9') return 0; break;i+; return i;/*將字符串轉(zhuǎn)換成數(shù)字 */int zhuanhua(char str,int a)int i;int sum=0; for(i=0;i<a;i+) sum=sum+(int)(

30、stri-'0')*pow(10,a-i-1);return sum;*冒泡排序算法 *int *bubble(int cidao,int m)int i,j;int temp;for(i=0;i<m;i+)for(j=i+1;j<m;j+)if(cidaoi>cidaoj)temp=cidaoi;cidaoi=cidaoj; cidaoj=temp;cout<<" 排序后的磁盤序列為:for( i=0;i<m;i+)cout<<cidaoi<<" "cout<<endl;re

31、turn cidao;/*先來先服務(wù)調(diào)度算法 */int FCFS(int cidao,int m) int now;int sum=0;int j,i;int a;char str100;float ave;cout<<" 磁盤請(qǐng)求序列為: "for( i=0;i<m;i+) cout<<cidaoi<<" "cout<<endl;cout<<" 請(qǐng)輸入當(dāng)前的磁道號(hào): "bei2: cin>>str;a=panduan(str);if(a=0)cout&l

32、t;<" 輸入數(shù)據(jù)的類型錯(cuò)誤 ,請(qǐng)重新輸入! "<<endl; goto bei2;elsenow=zhuanhua(str,a);sum+=abs(cidao0-now);cout<<" 磁盤掃描序列為: "for( i=0;i<m;i+)cout<<cidaoi<<" "for(i=0,j=1;j<m;i+,j+)sum+=abs(cidaoj-cidaoi); ave=(float)(sum)/(float)(m);cout<<endl;cout<

33、;<" 平均尋道長度: "<<ave<<endl;cout<<" 磁頭移動(dòng)總磁道數(shù): "<<sum<<endl; return 0;*最短尋道時(shí)間優(yōu)先調(diào)度算法 */void SSTF(int cidao,int m) int k=1;int now,l,r;int i,j,sum=0;int a; char str100; float ave;cidao=bubble(cidao,m);cout<<" 請(qǐng)輸入當(dāng)前的磁道號(hào): " bei3: cin>&g

34、t;str;a=panduan(str);if(a=0)cout<<" 輸入數(shù)據(jù)的類型錯(cuò)誤 ,請(qǐng)重新輸入! "<<endl; goto bei3;elsenow=zhuanhua(str,a);if(cidaom-1<=now)cout<<" 磁盤掃描序列為:for(i=m-1;i>=0;i-)cout<<cidaoi<<" "sum=now-cidao0; if(cidao0>=now)cout<<" 磁盤掃描序列為: " for(i

35、=0;i<m;i+) cout<<cidaoi<<" " sum=cidaom-1-now; if(now>cidao0&&now<cidaom-1)cout<<" 磁盤掃描序列為: " while(cidaok<now)k+; l=k-1; r=k;while(l>=0)&&(r<m) if(now-cidaol)<=(cidaor-now) cout<<cidaol<<" " sum+=now-ci

36、daol; now=cidaol;l=l-1;else cout<<cidaor<<" " sum+=cidaor-now; now=cidaor; r=r+1; if(l=-1) for(j=r;j<m;j+) cout<<cidaoj<<" " sum+=cidaom-1-cidao0;elsefor(j=l;j>=0;j-)cout<<cidaoj<<" " sum+=cidaom-1-cidao0;ave=(float)(sum)/(float)(m);cout<<endl;cout<<" 平均尋道長度: "<<ave<<endl; cout<<" 磁頭移動(dòng)總磁道數(shù): "<<sum<<endl;*掃

溫馨提示

  • 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. 人人文庫網(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)論