2015廣工操作系統(tǒng)課程設(shè)計報告之磁盤調(diào)度(附j(luò)ava源代碼)_第1頁
2015廣工操作系統(tǒng)課程設(shè)計報告之磁盤調(diào)度(附j(luò)ava源代碼)_第2頁
2015廣工操作系統(tǒng)課程設(shè)計報告之磁盤調(diào)度(附j(luò)ava源代碼)_第3頁
2015廣工操作系統(tǒng)課程設(shè)計報告之磁盤調(diào)度(附j(luò)ava源代碼)_第4頁
2015廣工操作系統(tǒng)課程設(shè)計報告之磁盤調(diào)度(附j(luò)ava源代碼)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

下載可編輯.專業(yè).整理.成績成績《操作系統(tǒng)》課程設(shè)計磁盤調(diào)度算法學(xué)院計算機學(xué)院專業(yè)計算機科學(xué)與技術(shù)學(xué)號姓名指導(dǎo)教師孫為軍日期2016年1月2日

操作系統(tǒng)課程設(shè)計任務(wù)書學(xué)生姓名專業(yè)班級學(xué)號題目磁盤調(diào)度算法1指導(dǎo)教師孫為軍題目編號16主要內(nèi)容理解磁盤調(diào)度算法,并進一步加深對調(diào)度算法及其實現(xiàn)過程的理解。任務(wù)要求設(shè)計主界面以靈活選擇某算法,且以下算法都要實現(xiàn)1、先來先服務(wù)算法(FCFS)2、最短尋道時間優(yōu)先算法(SSTF)3、掃描算法(SCAN)4、循環(huán)掃描算法(CSCAN)并求出每種算法的平均尋道長度。參考文獻[1]計算機操作系統(tǒng),湯小丹等,西安電子科技大學(xué)出版社[2]操作系統(tǒng)實驗指導(dǎo)書,傅秀芬,廣東工業(yè)大學(xué)(自編)[3]計算機操作系統(tǒng)教程(第二版),張堯?qū)W、史美林,清華大學(xué)出版社[4]現(xiàn)代操作系統(tǒng),A.S.Tanenbaum著,陳向群等譯機械工業(yè)出版社審查意見指導(dǎo)教師簽字:系主任簽字:年月日說明:本表由指導(dǎo)教師填寫,由系主任審核后下達給選題學(xué)生,裝訂在設(shè)計(論文)首頁

一、設(shè)計思想說明1.1設(shè)計環(huán)境開發(fā)平臺:eclipseVersion:LunaServiceRelease1(4.4.1)Buildid:20140925-1800開發(fā)環(huán)境:Windows10操作系統(tǒng)Java版本:javaversion“1.8.0_25” java<TM>SERuntimeEnvironment<build1.8.0_25-b18> javaHotSpot(TM)64-BitServerVm<Build25.25-b02,mixedmode>1.2設(shè)計思想1.先到先服務(wù)算法(FCFS)這是一種比較簡單的磁盤調(diào)度算法。它根據(jù)進程請求訪問磁盤的先后次序進行調(diào)度。此算法的優(yōu)點是公平、簡單,且每個進程的請求都能依次得到處理,不會出現(xiàn)某一進程的請求長期得不到滿足的情況。此算法由于未對尋道進行優(yōu)化,在對磁盤的訪問請求比較多的情況下,此算法將降低設(shè)備服務(wù)的吞吐量,致使平均尋道時間可能較長,但各進程得到服務(wù)的響應(yīng)時間的變化幅度較小。2.最短尋道時間優(yōu)先調(diào)度算法(SSTF)該算法選擇這樣的進程,其要求訪問的磁道與當前磁頭所在的磁道距離最近,以使每次的尋道時間最短,該算法可以得到比較好的吞吐量,但卻不能保證平均尋道時間最短。其缺點是對用戶的服務(wù)請求的響應(yīng)機會不是均等的,因而導(dǎo)致響應(yīng)時間的變化幅度很大。在服務(wù)請求很多的情況下,對內(nèi)外邊緣磁道的請求將會無限期的被延遲,有些請求的響應(yīng)時間將不可預(yù)期。3.掃描算法(SCAN)掃描算法不僅考慮到欲訪問的磁道與當前磁道的距離,更優(yōu)先考慮的是磁頭的當前移動方向。例如,當磁頭正在自里向外移動時,掃描算法所選擇的下一個訪問對象應(yīng)是其欲訪問的磁道既在當前磁道之外,又是距離最近的。這樣自里向外地訪問,直到再無更外的磁道需要訪問才將磁臂換向,自外向里移動。這時,同樣也是每次選擇這樣的進程來調(diào)度,即其要訪問的磁道,在當前磁道之內(nèi),從而避免了饑餓現(xiàn)象的出現(xiàn)。由于這種算法中磁頭移動的規(guī)律頗似電梯的運行,故又稱為電梯調(diào)度算法。此算法基本上克服了最短尋道時間優(yōu)先算法的服務(wù)集中于中間磁道和響應(yīng)時間變化比較大的缺點,而具有最短尋道時間優(yōu)先算法的優(yōu)點即吞吐量較大,平均響應(yīng)時間較小,但由于是擺動式的掃描方法,兩側(cè)磁道被訪問的頻率仍低于中間磁道。

4.循環(huán)掃描(CSACN)循環(huán)掃描算法是對掃描算法的改進。如果對磁道的訪問請求是均勻分布的,當磁頭到達磁盤的一端,并反向運動時落在磁頭之后的訪問請求相對較少。這是由于這些磁道剛被處理,而磁盤另一端的請求密度相當高,且這些訪問請求等待的時間較長,為了解決這種情況,循環(huán)掃描算法規(guī)定磁頭單向移動。例如,只自里向外移動,當磁頭移到最外的被訪問磁道時,磁頭立即返回到最里的欲訪磁道,即將最小磁道號緊接著最大磁道號構(gòu)成循環(huán),進行掃描。

二、系統(tǒng)結(jié)構(gòu)的說明 該系統(tǒng)共分為12個模塊:初始化模塊:initial();窗口函數(shù)模塊:frame();先來先服務(wù)算法模塊:FCFS();最短尋道優(yōu)先算法模塊:SSTF();掃描算法模塊:SCAN();循環(huán)掃描模塊:CSAN();排序函數(shù)模塊:sort();結(jié)果函數(shù)模塊:result();磁道輸入模塊:getInputData();開始磁道模塊:getStartData();按鈕監(jiān)聽器模塊:classButtonListener畫布模塊:classCanvas系統(tǒng)結(jié)構(gòu)圖:動畫演示CSCANSCANSSTFFCFS設(shè)置開始磁道設(shè)置磁道磁盤調(diào)度算法選擇界面動畫演示CSCANSCANSSTFFCFS設(shè)置開始磁道設(shè)置磁道磁盤調(diào)度算法選擇界面

三、數(shù)據(jù)結(jié)構(gòu)的說明數(shù)組a[]:用于存放原始輸入磁道數(shù)組b[]:用于存放調(diào)度順序磁道數(shù)組c[]:用于存放播放動畫時的中間數(shù)組int變量start:用于存放開始磁道float變量Avg:用于存放平均尋道長度float變量Sum:用于存放總尋道長度字符串數(shù)組s[]:用于存放按鈕名稱String變量ss:存放輸入的磁道的字符串String變量sss:存放輸入的開始磁道的字符串Int變量Style:選擇具體的算法Boolena變量Animation:是否播放動畫的標志位Boolean變量isOK:用于防止未選算法就播放動畫而出現(xiàn)無法關(guān)閉程序的bugTimer變量timer:用于設(shè)定一定時間執(zhí)行某個消息Int變量point:用于動畫演示指向要畫數(shù)字的下面countTime:用于記錄動畫播放的次數(shù)

四、算法流程圖1.先來先服務(wù)算法(FCFS):先來先服務(wù)算法(FCFS)流程圖

2.最短尋道時間優(yōu)先算法(SSTF):求平均尋道長度求平均尋道長度選擇與當前磁道距離最近的磁道進行掃描移動到最?。ù螅┨?,改向外(內(nèi))移動掃描未掃描的磁道輸出移動的平均磁道數(shù)輸出排好序的磁道序列判斷磁頭在序列中的位置結(jié)束開始讀入磁道號使用冒泡法從小到大排序輸入當前磁道號最短尋道時間優(yōu)先算法(SSTF)流程圖

3.掃描算法(SCAN):求平均尋道長度求平均尋道長度選擇移動臂移動方向,開始掃描移動到最小(大)號,改向外(內(nèi))移動掃描未掃描的磁道輸出移動的平均磁道數(shù)輸出排好序的磁道序列開始結(jié)束輸入磁道號使用冒泡法從小到大排序輸入當前磁道號判斷磁頭在序列中的位置掃描算法(SCAN)流程圖

4.循環(huán)掃描(CSCAN):求平均尋道長度求平均尋道長度選擇與當前磁道距離最近的磁道進行掃描移動到最小(大)號,改向外(內(nèi))移動掃描未掃描的磁道輸出移動的平均磁道數(shù)輸出排好序的磁道序列判斷磁頭在序列中的位置結(jié)束開始輸入磁道號使用冒泡法從小到大排序輸入當前磁道號循環(huán)掃描(CSCAN)流程圖5.磁道輸入模塊:磁道輸入模塊流程圖開始在彈出的窗口中輸入10個磁道判斷是否有10磁道輸入模塊流程圖開始在彈出的窗口中輸入10個磁道判斷是否有10輸入10個數(shù)刷新畫面,重新顯示磁道數(shù)結(jié)束6.開始磁道設(shè)置流程圖:結(jié)束刷新畫面,重新顯示開始磁道判斷是否為數(shù)字在彈出的窗口中輸入開始磁道開始結(jié)束刷新畫面,重新顯示開始磁道判斷是否為數(shù)字在彈出的窗口中輸入開始磁道開始開始磁道設(shè)置流程圖

開始磁道設(shè)置流程圖7.動畫演示:動畫演示流程圖圖結(jié)束播放完畢動畫播放判斷是否已經(jīng)動畫演示流程圖圖結(jié)束播放完畢動畫播放判斷是否已經(jīng)點擊了算法開始1.程序運行主界面,開始的磁道及磁頭都為默認設(shè)置: FCFS算法:

SSTF算法:SCAN算法:

CSCAN算法:設(shè)置磁道:設(shè)置磁頭:

動畫演示:

六、使用說明書1.本java程序已經(jīng)打包成一個jar文件,在有jvm的環(huán)境下,雙擊即可運行本程序。2.運行本程序后點擊右側(cè)按鈕即可進行選擇算法及動畫演示。3.在選擇動畫演示前請先選擇算法,否則無任何響應(yīng)。eg:打開程序還未點擊算法就直接點擊動畫演示則無任何響應(yīng)4.點擊設(shè)置磁道窗口,會彈出一個輸入窗口,在此窗口輸入10個數(shù),以空格鍵隔開,點擊確定即可完成輸入,并可自動刷新主界面數(shù)據(jù)。若輸入個數(shù)少于10個則無任何響應(yīng)5.點擊設(shè)置磁頭,會彈出一個輸入窗口,在此輸入磁頭開始數(shù),點擊確定即可完成輸入。6.點擊右上角X按鈕即可退出程序。

七、心得體會 本次的課程設(shè)計主要考察了磁盤的四種調(diào)度算法,說實話,調(diào)度算法的實現(xiàn)完全沒難度,主要的難度在于界面的設(shè)計。之所以說難在于界面設(shè)計是因為這次使用的編寫語言是java,之前也從來沒有用java來編寫過程序,因此本程序也是我用java寫的第一個程序,難免bug會比較多,還望老師多多見諒。雖說這只是幾天的課程設(shè)計,但是這幾天卻讓我學(xué)到了不少知識。從添加按鈕,再添加按鈕監(jiān)聽器,編寫對話框,再到畫布的使用,編寫動畫。這些都是我之前沒有學(xué)習和接觸到的。開始做的時候是比較困難的,很多東西都是不知道怎么辦,或者根本不知道有沒有這個東西,后來不斷的查書和百度(在此真的得謝謝度娘),很多比較難處理的問題的大部分都是百度或者自己看書解決的。在這次課設(shè)后也明白了一個道理,世界上的知識使學(xué)不完的,然而借助某些工具會讓你學(xué)到你當前迫切想學(xué)的知識。在這次課設(shè)后覺得java這么語言真的得好好去專研一下,自己學(xué)的太少了,欠缺的太多了,這次回家也要好好腦補一下了。最后謝謝老師本學(xué)期操作系統(tǒng)課程的指導(dǎo)?。。?/p>

八、源程序importjava.awt.*;importjava.awt.event.*;importjavax.swing.JDialog;importjavax.swing.Timer;publicclassCipandiaoduextendsWindowAdapter //繼承windowsAdapter類{ privateint[]a=newint[10]; //用于設(shè)置磁道數(shù) privateint[]b=newint[10]; //用于記錄調(diào)度順序 privateint[]c=newint[10]; //用于播放動畫的中間數(shù)組 privateint[]t=newint[10]; //用于存放設(shè)置的磁道,防止原始磁道輸入順序改變 privateintstart=50; //設(shè)置默認的開始磁道數(shù) privatefloatAvg; //平均尋道長度 privatefloatSum; //記錄移動的總道數(shù) privateButton[]bt=newButton[9]; //按鈕 privateJDialogjd1=newJDialog(); //設(shè)置磁道的對話框 privateJDialogjd2=newJDialog(); //設(shè)置磁頭的對話框 privateTextFieldtf1=newTextField(100); //輸入磁道的輸入框 privateTextFieldtf2=newTextField(100); //輸入磁頭的輸入框 privatePanelpl1=newPanel(); //該容器用于添加按鈕 privatePanelpl3=newPanel(); //該容器用于添加畫布 privateMyCanvasdrawArea=newMyCanvas(); //定義一個畫布用于變寫信息 privateStrings[]={"設(shè)置磁道","設(shè)置磁頭","FCFS","SSTF","SCAN","CSCAN","確定","確定","動畫演示"}; //按鈕名稱 privateStringss=""; //用于接收輸入的字符串來改變輸入磁道 privateStringsss=""; //用于接受輸入的字符創(chuàng)來改變輸入的磁頭的開始磁道 privateintStyle; //用于選擇具體的調(diào)度算法 privatebooleananimation; //用于調(diào)度算法播放動畫 privatebooleanisOK; //標志位,防止未選算法就點擊播放動畫出現(xiàn)無法關(guān)閉的bug privateTimertimer; //用于設(shè)定一定時間間隔內(nèi)重復(fù)執(zhí)行某個消息 privateintpoint; //指向要畫的數(shù)字下面 privateintcountTime; //記錄動畫播放時間 GridBagLayoutgb1=newGridBagLayout(); //布局管理器 GridBagConstraintsgbc1=newGridBagConstraints(); //具體管理組件布局 GridBagLayoutgb2=newGridBagLayout(); //布局管理器 GridBagConstraintsgbc2=newGridBagConstraints(); publicstaticvoidmain(Stringargs[])//主函數(shù) { (newCipandiaodu()).frame();//定義一個實例調(diào)用frame函數(shù) } privatevoidinitial() //初始化函數(shù) { for(inti=0;i<10;i++) //默認設(shè)置的磁道 { if(i==0) { a[i]=10; } else { a[i]=a[i-1]+10; } } for(inti=0;i<9;i++) { bt[i]=newButton(s[i]); //設(shè)置按鈕名 bt[i].addActionListener(newButtonListener()); //綁定監(jiān)聽器 } for(inti=0;i<6;i++) { pl1.add(bt[i]); //將按鈕添加到容器內(nèi) } pl1.add(bt[8]); jd1.setBounds(320,180,400,100); //設(shè)置對話框大小jd1.setTitle("在此輸入10個磁道數(shù)(以空格鍵隔開)"); //對話框名字Labell1=newLabel("輸入磁道數(shù):");gb1.setConstraints(l1,gbc1); //將l1與gbc關(guān)聯(lián)起來,gbc去管理l1的具體布局gbc1.weightx=1; // 設(shè)置權(quán)重gb1.setConstraints(tf1,gbc1);gbc1.weightx=2;jd1.setLayout(gb1);jd1.add(l1);jd1.add(tf1);jd1.add(bt[6]);jd2.setBounds(320,180,260,100);jd2.setTitle("在此重新輸入磁頭所在磁道數(shù)");Labell2=newLabel("輸入磁頭:");gb2.setConstraints(l2,gbc2);gbc2.weightx=1;gb2.setConstraints(tf2,gbc2);gbc2.weightx=2;jd2.setLayout(gb2);jd2.add(l2);jd2.add(tf2);jd2.add(bt[7]); pl3.setLayout(newGridLayout(1,3)); //gridlayout布局 pl3.setVisible(false); pl1.setLayout(newGridLayout(7,1)); //設(shè)置按鈕布局,6X1小格 drawArea.setPreferredSize(newDimension(430,280)); //設(shè)置畫布大小,Dimension類封裝單個對象中組件的寬度和高度(精確到整數(shù))。 drawArea.setBackground(newColor(100,100,100)); //設(shè)置畫布背景顏色 } publicvoidframe() //窗口函數(shù) { initial(); Framefm=newFrame("磁盤調(diào)度算法"); //定義一個窗口 fm.addWindowListener(this); //窗口監(jiān)聽器 ActionListenerPerform=newActionListener() //定義一個每秒執(zhí)行一次的事件監(jiān)聽器 { @Override publicvoidactionPerformed(ActionEvente) { //TODOAuto-generatedmethodstub drawArea.repaint(); //刷新畫布 } }; fm.add(pl1,"East"); //設(shè)置按鈕放置方位 fm.add(pl3,"West"); fm.add(drawArea,"West"); timer=newTimer(1000,Perform); //每隔1秒調(diào)用perform活動監(jiān)聽器,刷新畫布 fm.pack(); //設(shè)置串口最佳大小 fm.setVisible(true); //設(shè)置可見性 } publicvoidFCFS() //先來先服務(wù)算法 { for(inti=0;i<10;i++) { b[i]=a[i]; //直接將輸入順序賦值給調(diào)度順序即可 } result(); } publicvoidSSTF() //最短尋道優(yōu)先算法 { intstartTemp=start; //用于存放開始磁頭,防止后面被改變 sort(); //調(diào)用排序 if(start>=t[9]) //開始磁道大于最大的輸入磁道數(shù),逆序插入數(shù)組b { for(inti=9;i>=0;i--) { b[9-i]=t[i]; //逆序插入 } } elseif(start<=t[0]) //開始磁道小于最小磁道數(shù),順序插入 { for(inti=0;i<=9;i++) { b[i]=t[i]; } } else //開始磁道處于中間 { inti=0,low,high,k=0; while(start>t[k]) { k++; } low=k-1; //low指向比開始磁道小的磁道 high=k; //high指向比開始磁道大的磁道 while(low>=0&&high<10) { if((startTemp-t[low])<=(t[high]-startTemp)) { b[i++]=t[low]; startTemp=t[low]; //此處磁頭改變導(dǎo)致算法錯誤,用中間變量替換 low--; } else { b[i++]=t[high]; startTemp=t[high]; high++; } } if(low==-1) //說明左邊的全部掃完了 { for(;high<10;high++) { b[i++]=t[high]; } } else //否則,說明右邊的掃完了 { for(;low>=0;low--) { b[i++]=t[low]; } } } result(); //調(diào)用結(jié)果函數(shù)進行運算 } publicvoidSCAN() //掃描算法 { sort(); if(start<=t[0]) //開始磁道小于最小等于磁道 { for(inti=0;i<=9;i++) { b[i]=t[i]; } } elseif(start>=t[9]) //開始磁道大于等于最大磁道 { for(inti=0;i<=9;i++) { b[i]=t[9-i]; } } else //開始磁道處于中間磁道 { inti=0,low,high,k=0; while(start>=t[k]) { k++; } if(t[k-1]==start) //修正位置 k--; for(high=k;high<=9;high++) //高部分 { b[i++]=t[high]; } for(low=k-1;low>=0;low--) //低部分 { b[i++]=t[low]; } } result(); } publicvoidCSCAN() //循環(huán)掃描算法 { sort(); if(start<=t[0]||start>t[9]) //開始磁道小于最小等于磁道 { for(inti=0;i<=9;i++) { b[i]=t[i]; } } else //開始磁道處于中間磁道 { inti=0,low,high,k=0; while(start>=t[k]) { k++; } if(t[k-1]==start) //修正位置 k--; for(high=k;high<=9;high++) //高部分 { b[i++]=t[high]; } for(low=0;low<k;low++) //低部分 { b[i++]=t[low]; } } result(); } publicvoidsort() //排序,有利于最短尋道優(yōu)先算法 { inttemp; for(inti=0;i<10;i++) //默認的磁道數(shù) { t[i]=a[i]; } for(inti=0;i<10;i++)//磁道號排序 { for(intj=i+1;j<10;j++)//對磁道號進行從小到大排列 { if(t[i]>t[j])//兩磁道號之間比較 { temp=t[i]; t[i]=t[j]; t[j]=temp; } } } } publicvoidresult() //計算磁道總數(shù)和平均尋道數(shù)目 { Sum=0; Avg=0; for(inti=0;i<10;i++) { if(i==0) //第一次 Sum+=Math.abs(start-b[i]); //調(diào)用數(shù)學(xué)類求絕對值 else Sum+=Math.abs(b[i]-b[i-1]); } Avg=Sum/10; } booleangetInputData() //用于重新獲取輸入的磁道 { inti=0,j=0,sum=0,count; //count用于統(tǒng)計輸入字符的個數(shù),sum用于存貯裝換的數(shù)字 int[]temp=newint[10]; count=ss.length(); //獲取字符長度 char[]ch=ss.toCharArray(); //字符串轉(zhuǎn)字符數(shù)組 while((i<10)&&(j<count)) //獲取到10個數(shù)字或者字符個數(shù)已經(jīng)掃完 { if(ch[j]>=48&&ch[j]<=57) //判斷為數(shù)字,開始轉(zhuǎn)化 { sum=sum*10+(ch[j]-48); } elseif(sum!=0) { temp[i++]=sum; sum=0; } j++; } if(i==10) //獲取到十個輸入磁道數(shù) { for(intk=0;k<10;k++) { a[k]=temp[k]; } returntrue; //返回true } else returnfalse; //否則放回false } voidgetStartData() //用于獲取磁頭開始所在的磁道 { if(sss!="") start=Integer.parseInt(sss); } publicvoidwindowClosing(WindowEvente)//退出 { System.exit(0); } classButtonListenerimplementsActionListener //設(shè)置按鈕監(jiān)聽器 { @Override publicvoidactionPerformed(ActionEvente) { //TODOAuto-generatedmethodstub Buttonbtn=(Button)e.getSource(); //獲取信息源 if(btn==bt[0]) //輸入磁道的按鈕 { isOK=false; //動畫播放標志位,防止未選算法就播放動畫導(dǎo)致程序無法關(guān)閉 jd1.setModal(true);//確保彈出的窗口在其他窗口前面jd1.setVisible(true); //設(shè)置可見性 } elseif(btn==bt[1]) //設(shè)置開始磁道的按鈕 { isOK=false; jd2.setModal(true);//確保彈出的窗口在其他窗口前面jd2.setVisible(true); //設(shè)置可見性 } elseif(btn==bt[2]) //FCFS按鈕 { isOK=true; //已選擇算法,可以正常播放動畫 Style=1; //設(shè)置調(diào)用類型畫布進行繪制 FCFS(); //調(diào)用先來先服務(wù)算法 drawArea.repaint(); //重新繪圖 } elseif(btn==bt[3]) //SSTF按鈕 { isOK=true; Style=2; SSTF(); drawArea.repaint(); } elseif(btn==bt[4]) //SCAN按鈕 { isOK=true; Style=3; SCAN(); drawArea.repaint(); } elseif(btn==bt[5]) //CSCAN按鈕 { isOK=true; Style=4; CSCAN(); drawArea.repaint(); } elseif(btn==bt[6]) //jd1的確定按鈕 { ss=tf1.getText()+""; //獲取輸入框的內(nèi)容 tf1.setText(""); //重新設(shè)置輸入框的內(nèi)容為空 getInputData(); jd1.dispose();//關(guān)閉彈出的對話框 Style=0; drawArea.repaint(); } elseif(btn==bt[7]) //jd2的確定按鈕 { sss=tf2.getText(); tf2.setText(""); //設(shè)置開始磁道數(shù)內(nèi)存為空 getStartData(); jd2.dispose(); Style=0; drawArea.repaint(); } elseif(btn==bt[8]) //動畫演示按鈕 { point=0; countTime=0; sort(); for(inti=0;i<10;i++) { c[i]=t[i]; } animation=true; //設(shè)置動畫播放按鈕 if(isOK) timer.start(); //開始播放動畫 else animation=false; } } } classMyCanvasextendsCanvas //繼承畫布 { publicvoidpaint(Graphicsg) //g為畫筆實例 { g.setColor(Color.WHITE); g.drawString("輸入的磁道為:",0,30); for(inti=0;i<10;i++) //輸出輸入的順序磁道 { if(i==0) g.drawString(a[i]+"",80,30); else g.drawString(a[i]+"",80+35*i,30); } g.drawString("磁頭所在磁道數(shù)為:"+start,0,45); if(Style==1) //Style指示調(diào)度算法類型 { g.drawString("當前調(diào)度算法為:先來先服務(wù)算法",120,70); g.drawString("磁道調(diào)度順序為:",0,100); for(inti=0;i<10;i++) //輸出調(diào)度順序 { g.drawString(b[i]+"",90+30*i,100); } g.drawString("磁盤總尋道長度為:"+Sum,0,150); g.drawString("磁盤平均尋道長度為"+Avg,0,200); } elseif(Style==2) { g.drawString("當前調(diào)度算法為:最短尋道優(yōu)先算法",120,

溫馨提示

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

評論

0/150

提交評論