




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上目錄 一、課程設計目的3二、課程設計要求3三、課程設計原理3四、程序代碼5五、流程圖設計11六、運行結(jié)果14七、調(diào)試分析16八、心得體會16 一、課程設計目的操作系統(tǒng)是最重要的計算機系統(tǒng)軟件,同時也是最活躍的學科之一,發(fā)展極為迅速。我們在本課程的實驗過程中,要了解實際操作系統(tǒng)的工作過程,加深對操作系統(tǒng)基礎理論和重要算法的理解,在實踐過程中加深對操作系統(tǒng)原理的理解。通過設計一個磁盤調(diào)度模擬系統(tǒng),以加深對先來先服務、最短尋道時間、電梯算法以及循環(huán)掃描算法等磁盤調(diào)度算法的理解。讓我們更好地掌握操作系統(tǒng)中磁盤調(diào)度的原理及實現(xiàn)方法,增強動手能力。本實驗通過對磁盤調(diào)度算法的實現(xiàn),
2、加深對算法的理解,同時通過用C+語言編寫程序?qū)崿F(xiàn)這些算法,并在windows平臺上實現(xiàn),也再一次提高了自己編程的能力,提高了綜合運用專業(yè)課知識的能力。二、課程設計要求本設計的具體要求如下:1.模擬一個磁盤調(diào)度算法2.要求能夠模擬FCFS、最短尋道時間、電梯算法等磁盤調(diào)度算法3.輸入為一組作業(yè)的磁道請求4.輸出為按選擇的算法執(zhí)行時的磁頭移動軌跡 三、課程設計原理1.各個算法分析(1)先來先服務算法(FCFS)這是一種最簡單的磁盤調(diào)度算法。它根據(jù)請求訪問磁盤的先后次序進行調(diào)度。此算法的優(yōu)點是公平、簡單,且每個進程的請求都能依次地得到處理,不會出現(xiàn)某一進程的請求長期得不到滿足的情況。但是此算法由于未
3、對尋道進行優(yōu)化,致使平均尋道時間可能較長。當有進程先后提出磁盤I/O請求時,先按他們發(fā)出請求的先后次序排隊。然后依次給予服務。其平均尋道距離較大,故先來先服務算法僅適用于請求磁盤I/O進程數(shù)目較少的場合。(2)最短尋道時間優(yōu)先算法(SSTF) 該算法選擇這樣的進程:其要求訪問的磁道與當前磁頭所在的磁道距離最近,以使每次尋道時間最短。但這種算法不能保證平均尋道時間最短。有可能導致某個進程出現(xiàn)“饑餓”現(xiàn)象,因為只要不斷有新進程請求到達,且其所要訪問的磁道與磁頭當前所在的磁道的距離較近,這種新進程的I/O請求必然優(yōu)先滿足。(3)掃描算法(SCAN) 該算法不僅考慮到正欲訪問的磁道與當前磁道間的距離,
4、更優(yōu)先考慮的是磁頭當前的移動方向。例如,當磁頭正在自里向外移動時,SCAN算法所考慮的下一個訪問對象應該是其欲訪問的磁道之外,又是距離最近的。這樣自里向外地訪問,直至再無更外的磁道需要訪問時,才將磁臂換向為自外向里移動。這時,同樣也是每次選擇這樣的進程來調(diào)度,既要訪問的磁道在當前位置內(nèi)距離最近者,這樣,磁頭又逐步地從外向里移動,直至再無更里面的磁道要訪問,從而避免了出現(xiàn)“饑餓”現(xiàn)象。由于在這種算法中磁頭移動的規(guī)律頗似電梯的運行,因而又常稱之為電梯調(diào)度算法。(4)循環(huán)掃描算法(CSCAN) SCAN算法規(guī)定磁頭單向移動,例如,只是自里向外移動,當磁頭移動到最外的磁道并訪問后,磁頭立即返回到最里的
5、欲訪問的磁道,亦即將最小磁道號緊接著最大的磁道號構(gòu)成循環(huán),進行循環(huán)掃描。2.磁盤調(diào)度思想磁盤設備在工作時以恒定的速率旋轉(zhuǎn)。為了讀或?qū)懀蓬^必須能移動到所要求的磁道上,并等待所要求的扇區(qū)開始位置旋轉(zhuǎn)到磁頭下,然后或開始讀或?qū)憯?shù)據(jù)。故可把磁盤訪問時間分成以下三部分。(1)尋道時間Ts 這是把磁頭移動到指定磁道上所經(jīng)歷的時間。該時間是啟動磁臂的時間s與磁頭移動n條磁道所花費的時間之和,即 Ts=m*n+s其中,m是一常數(shù),與磁盤驅(qū)動器的速度有關。對于一般磁盤,m=0.2;對于高速磁盤,m<=0.1,磁臂的啟動時間+約為2ms。這樣,對于一般的溫盤,對于一般的溫盤,其尋道時間將隨著尋道距離的增加
6、而增大,大體上是530ms。(2)旋轉(zhuǎn)延遲時間Tr這是指定扇區(qū)移動到磁頭下面所經(jīng)歷的時間。不同的磁盤類型中,旋轉(zhuǎn)速度至少相差一個數(shù)量級,如軟盤為300r/min,硬盤一般為720015000r/min,甚至更高。對于磁盤旋轉(zhuǎn)延遲時間而言,如硬盤,旋轉(zhuǎn)速度為15000r/min,每轉(zhuǎn)需時4ms,平均旋轉(zhuǎn)延遲時間Tr為2ms;而軟盤,其旋轉(zhuǎn)速度為300r/min或600r/min,這樣,平均Tr為50100ms。(3)傳輸時間Tt 這時指把數(shù)據(jù)從磁盤讀出或向磁盤寫入數(shù)據(jù)所經(jīng)歷的時間。Tt的大小與每次所讀/寫的字節(jié)數(shù)b和旋轉(zhuǎn)速度有關: Tt=b/(r*N)其中,r為磁盤每秒鐘的轉(zhuǎn)數(shù);N為一條磁道上的
7、字節(jié)數(shù),當一次讀/寫的字節(jié)數(shù)相當于半條磁道上的字節(jié)數(shù)時,T3與T2相同。因此,可將訪問時間Ta表示為 Ta=Ts+1/(2*r)+b/(r*N)由上式可以看出,在訪問時間中,尋道時間和旋轉(zhuǎn)延遲時間基本上都與所讀/寫數(shù)據(jù)的多少無關,而且它通常占據(jù)了訪問時間中的大頭。磁盤是可供多個進程共享的設備,當有多個進程都要求訪問磁盤時,應采用一種最佳調(diào)度算法,以使各進程對磁盤的平均訪問時間最小。由于在訪問磁盤的時間中,主要是尋道時間,因此,磁盤調(diào)度的目標是使磁盤的平均尋道時間最少?,F(xiàn)在我們考慮平均尋道長度:所有磁道所需移動距離之和除以總的所需訪問的磁道數(shù),所以尋道長度決定了尋道時間,我們需要從上面的算法中選
8、擇最優(yōu)者。四、程序代碼下面給出部分重要的程序/*先來先服務調(diào)度算法*/void FCFS(int cidao,int m) /磁道號數(shù)組,磁道數(shù)為m int now;/當前所在磁道號 int sum=0; /總尋道長度 int i; int j; int a; char strmax; float ave; /平均尋道長度 cout<<"磁盤請求序列為:" for( i=0;i<m;i+) /按先來先服務策略輸出磁盤請求序列 cout<<cidaoi<<" " cout<<endl; cout<
9、<"請輸入當前的磁道號:" BB: cin>>str; /判斷輸入的數(shù)據(jù)是不是正確 a=panduan(str); if(a=0) cout<<"數(shù)據(jù)類型錯誤,請重新輸入!"<<endl; goto BB; else now=zhuanhuan(str,a); /當前磁道號 sum+=abs(cidao0-now); cout<<"磁盤掃描序列為:" for( i=0;i<m;i+) /輸出磁盤掃描序列 cout<<cidaoi<<" &qu
10、ot; for(i=0,j=1;j<m;i+,j+) /求總尋道長度和平均尋道長度 sum+=abs(cidaoj-cidaoi); ave=(float)(sum)/(float)(m); cout<<endl; cout<<"平均尋道長度:"<<ave<<endl;/*最短尋道時間優(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 strmax; float ave; cidao=paixu(cidao
11、,m); /調(diào)用排序算法排序 cout<<"請輸入當前的磁道號:" CC: cin>>str; /判斷輸入的數(shù)據(jù)是不是正確 a=panduan(str); if(a=0) cout<<"數(shù)據(jù)類型錯誤,請重新輸入!"<<endl; goto CC; else now=zhuanhuan(str,a); /輸入當前磁道號 if(cidaom-1<=now) /若當前磁道號大于請求序列中最大者,則直接由外向內(nèi)依次給予各請求服務 cout<<"磁盤掃描序列為:" for(i=m
12、-1;i>=0;i-) cout<<cidaoi<<" " sum=now-cidao0; if(cidao0>=now) /若當前磁道號小于請求序列中最小者,則直接由內(nèi)向外依次給予各請求服務 cout<<"磁盤掃描序列為:" for(i=0;i<m;i+) cout<<cidaoi<<" " sum=cidaom-1-now; if(now>cidao0&&now<cidaom-1) /若當前磁道號大于請求序列中最小者且小于最大
13、者 cout<<"磁盤掃描序列為:" while(cidaok<now) /確定當前磁道在排序后的磁道序列中的位置 k+; l=k-1; r=k; while(l>=0)&&(r<m) if(now-cidaol)<=(cidaor-now) /選擇與當前磁道最近的請求給予服務 cout<<cidaol<<" " sum+=now-cidaol; now=cidaol; l=l-1; else cout<<cidaor<<" " sum
14、+=cidaor-now; now=cidaor; r=r+1; if(l=-1) /說明磁頭已移動到序列的最小號,現(xiàn)返回外側(cè)掃描仍未掃描的磁道 for(j=r;j<m;j+) cout<<cidaoj<<" " sum+=cidaom-1-cidao0; else /說明磁頭已移動到序列的最大號,現(xiàn)返回內(nèi)側(cè)掃描仍未掃描的磁道 for(j=l;j>=0;j-) cout<<cidaoj<<" " sum+=cidaom-1-cidao0; ave=(float)(sum)/(float)(m);
15、 cout<<endl; cout<<"平均尋道長度:"<<ave<<endl;/*電梯算法*/void SCAN(int cidao,int m) /先要給出當前磁道號和移動臂的移動方向 int k=1; int now,l,r,d; int i,j,sum=0; int a; char strmax; float ave; cidao=paixu(cidao,m); /調(diào)用排序算法排序 cout<<"請輸入當前的磁道號:" DD: cin>>str; /判斷輸入的數(shù)據(jù)是否正確 a
16、=panduan(str); if(a=0) cout<<"數(shù)據(jù)類型錯誤,請重新輸入!"<<endl; goto DD; else now=zhuanhuan(str,a); /輸入當前磁道號 if(cidaom-1<=now) /若當前磁道號大于請求序列中最大者,則直接由外向內(nèi)依次給予各請求服務 cout<<"磁盤掃描序列為:" for(i=m-1;i>=0;i-) cout<<cidaoi<<" " sum=now-cidao0; if(cidao0>=
17、now) /若當前磁道號小于請求序列中最小者,則直接由內(nèi)向外依次給予各請求服務 cout<<"磁盤掃描序列為:" for(i=0;i<m;i+) cout<<cidaoi<<" " sum=cidaom-1-now; if(now>cidao0&&now<cidaom-1) /若當前磁道號大于請求序列中最小者且小于最大者 while(cidaok<now) k+; l=k-1; r=k; cout<<"請輸入當前移動臂的移動的方向 (0表示由外向內(nèi) ,1 表
18、示由內(nèi)向外) : " cin>>d; if(d=0) /選擇移動臂方向向內(nèi),則先向內(nèi)掃描 cout<<"磁盤掃描序列為:" for(j=l;j>=0;j-) cout<<cidaoj<<" " /輸出向內(nèi)掃描的序列 for(j=r;j<m;j+) /磁頭移動到最小號,則改變方向向外掃描未掃描的磁道 cout<<cidaoj<<" " /輸出向外掃描的序列 sum=now-2*cidao0+cidaom-1; else /選擇移動臂方向向外,則
19、先向外掃描 cout<<"磁盤掃描序列為:" for(j=r;j<m;j+) cout<<cidaoj<<" " /輸出向外掃描的序列 for(j=l;j>=0;j-) /磁頭移動到最大號,則改變方向向內(nèi)掃描未掃描的磁道 cout<<cidaoj<<" " sum=-now-cidao0+2*cidaom-1; ave=(float)(sum)/(float)(m); cout<<endl; cout<<"平均尋道長度:"
20、;<<ave<<endl;/*循環(huán)掃描調(diào)度算法*/void CSCAN(int cidao,int m) int k=1; int now,l,r; int i,j,sum=0; int a; char strmax; float ave; cidao=paixu(cidao,m); /調(diào)用排序算法排序 cout<<"請輸入當前的磁道號:" EE: cin>>str; /判斷輸入的數(shù)據(jù)是否正確 a=panduan(str); if(a=0) cout<<"數(shù)據(jù)類型錯誤,請重新輸入!"<&l
21、t;endl; goto EE; else now=zhuanhuan(str,a); /輸入當前磁道號 if(cidaom-1<=now) /若當前磁道號大于請求序列中最大者,則直接將移動臂移動到最小號磁道依次向外給予各請求服務 cout<<"磁盤掃描序列為:" for(i=0;i<m;i+) cout<<cidaoi<<" " sum=now-2*cidao0+cidaom-1; if(cidao0>=now) /若當前磁道號小于請求序列中最小者,則直接由內(nèi)向外依次給予各請求服務 cout<
22、<"磁盤掃描序列為:" for(i=0;i<m;i+) cout<<cidaoi<<" " sum=cidaom-1-now; if(now>cidao0&&now<cidaom-1) /若當前磁道號大于請求序列中最小者且小于最大者 cout<<"磁盤掃描序列為:" while(cidaok<now) /反復地從內(nèi)向外掃描 k+; l=k-1; r=k; for(j=r;j<m;j+) cout<<cidaoj<<"
23、; " /輸出從當前磁道向外掃描的序列 for(j=0;j<r;j+) /當掃描完最大號磁道,磁頭直接移動到最小號磁道,再向外掃描未掃描的磁道 cout<<cidaoj<<" " sum=2*cidaom-1+cidaol-now-2*cidao0; ave=(float)(sum)/(float)(m); cout<<endl; cout<<"平均尋道長度:"<<ave<<endl;五、流程圖設計1.先來先服務算法流程圖輸入當前磁道號now磁頭移動距離sum=abs
24、(now-cidao0)磁頭移動總距離sum+=abs(cidaoj-cidaoi)輸出磁盤調(diào)度序列cidao j目前的位置變?yōu)楫斍暗奈恢胘+j<m輸出平均尋道長度ave=sum/(m)2. 最短尋道時間優(yōu)先算法流程圖將磁道號從小到大排序輸入當前磁道號nowcidaom-1<=now輸出磁盤調(diào)度序列cidaoj目前的位置變?yōu)楫斍暗奈恢胣ow=cidaoi磁頭移動總距離sum=now-cidaoii>=0輸出磁盤調(diào)度序列cidaoj(cidao0>=now磁頭移動總距離sum=now-cidaoi目前的位置變?yōu)楫斍暗奈恢胣ow=cidaoinow=arrayii<m
25、確定當前磁道在已排的序列中的位置now-cidaol)<=(cidaor-now先向磁道號減小方向訪問,再向磁道號增加方向訪問輸出磁盤調(diào)度序列先向磁道號增加方向訪問,再向磁道號減小方向訪問輸出磁盤調(diào)度序列輸出平均尋道長度ave=sum/(m)3. 掃描算法流程圖將磁道號從小到大排序輸入當前磁道號now, 移動臂的移動的方向cidaom-1<=now磁頭移動總距離sum=now-cidaoi輸出磁盤調(diào)度序列cidaoji>=0(cidao0>=now輸出磁盤調(diào)度序列cidaoji<m磁頭移動總距離sum=cidao i-now確定當前磁道在已排的序列中的位置switch(d)case 0:移動臂向磁道號減小方向訪問case 1:移動臂向磁道號增加方向訪問訪問輸出磁盤調(diào)度序列輸出磁盤調(diào)度序列輸出平均尋道長度ave=sum/(m)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 海外游戲商務合同范本
- 奧克斯空調(diào)合同范本
- 醫(yī)院公司轉(zhuǎn)讓合同范本
- 粽子定制銷售合同范本
- 臺球房轉(zhuǎn)讓合同范本
- 2025【電纜采購合同】地下室電纜采購合同協(xié)議書
- 2025裝修合同樣本模板
- 第15講 三角形及其性質(zhì)(3考點+16題型)2025年中考數(shù)學一輪復習講練測(廣東專用)
- 2025年未簽訂合同卻享受保險待遇員工反遭雇主威脅
- 羽毛球運動教學與訓練知到課后答案智慧樹章節(jié)測試答案2025年春黑龍江農(nóng)業(yè)工程職業(yè)學院
- 【初中信息】數(shù)據(jù)分析與處理(課件)-八年級信息科技全一冊同步教學(人教版2024)
- 2024年中國郵政儲蓄銀行廣東省分行招聘筆試真題
- 危重患者護理操作流程
- 2025山東能源集團中級人才庫選拔易考易錯模擬試題(共500題)試卷后附參考答案
- 第五單元:數(shù)學廣角-鴿巢問題(教學設計)-【大單元教學】六年級數(shù)學下冊同步備課系列(人教版)
- 《水利工程建設項目生產(chǎn)安全重大事故隱患清單指南》知識培訓
- 浙江省溫州市瑞安市2023-2024學年六年級下學期數(shù)學期中分項評價試卷(含答案)
- 山東省德州市2024年中考化學試卷(含答案)
- 肝淤血病理切片
- 2025年福建新華發(fā)行集團有限責任公司招聘筆試參考題庫含答案解析
- 教育強國背景下的“五育”新解與實踐路徑
評論
0/150
提交評論