操作系統(tǒng)實驗三磁盤調度算法的實現(xiàn)_第1頁
操作系統(tǒng)實驗三磁盤調度算法的實現(xiàn)_第2頁
操作系統(tǒng)實驗三磁盤調度算法的實現(xiàn)_第3頁
操作系統(tǒng)實驗三磁盤調度算法的實現(xiàn)_第4頁
操作系統(tǒng)實驗三磁盤調度算法的實現(xiàn)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

第頁天津理工大學計算機及通信工程學院實驗報告2019至2019學年第一學期課程名稱操作系統(tǒng)學號學生姓名年級專業(yè)教學班號實驗地點實驗時間2019年月日第節(jié)至月日第節(jié)主講教師輔導教師實驗(三)實驗名稱磁盤調度算法的實現(xiàn)軟件環(huán)境VC++6.0硬件環(huán)境PC機實驗目的《操作系統(tǒng)》是計算機科學及技術專業(yè)和信息及計算科學專業(yè)本科教學計劃中的一門重要的專業(yè)基礎課程,是對計算機系統(tǒng)硬﹑軟件資源進行管理的系統(tǒng)軟件,是計算機系統(tǒng)的管理和指揮中心。通過本課程實驗,使學生綜合運用程序設計基礎及語言、數(shù)據(jù)結構、計算機原理及接口等先行課程的知識以及操作系統(tǒng)課程的知識在各種資源管理調度策略下,設計操作系統(tǒng)資源管理的模擬程序,使學生加深了解操作系統(tǒng)的工作機理,對操作系統(tǒng)的功能及結構設計有更加深入的實踐,為開發(fā)系統(tǒng)軟件和應用軟件打下基礎。實驗內(nèi)容(應包括實驗題目、實驗要求、實驗任務等)實驗內(nèi)容:1、本實驗是模擬操作系統(tǒng)的磁盤尋道方式,運用磁盤訪問順序的不同來設計磁盤的調度算法。2、實現(xiàn)的磁盤調度算法有FCFS,SSTF,SCAN,CSCAN和NStepSCAN算法。3、設定開始磁道號尋道范圍,依據(jù)起始掃描磁道號和最大磁道號數(shù),隨機產(chǎn)生要進行尋道的磁道號序列。4、選擇磁盤調度算法,顯示該算法的磁道訪問順序,計算出移動的磁道總數(shù)和平均尋道總數(shù)。5、按算法的尋道效率進行排序,并對各算法的性能進行分析比較。實驗要求:學生應正確地設計有關的數(shù)據(jù)結構及各個功能模塊,畫出程序的流程圖,編寫程序,程序執(zhí)行結果應正確實驗過程及實驗結果(可包括實驗實施的步驟、算法描述、流程、結論等)在VC++6.0編寫如下代碼#include<iostream>#include<ctime>usingnamespacestd;voidFCFS(inta[],intn);voidSSTF(inta[],intn);voidSCAN(inta[],intn);voidCSCAN(inta[],intn);intmain(){intn;//磁道的個數(shù)ints;//功能號cout<<"請輸入磁道的個數(shù):"<<endl;cin>>n;int*a=newint[n];cout<<"生成隨機磁道號..."<<endl;srand((unsigned)time(NULL));for(inti=0;i<n;i++){a[i]=(rand()%100)+1; cout<<a[i]<<"";}cout<<endl;while(1){ cout<<endl;cout<<"1、先來先服務算法(FCFS)"<<endl;cout<<"2、最短尋道時間算法(SSTF)"<<endl;cout<<"3、掃描算法(SCAN)"<<endl;cout<<"4、循環(huán)掃描算法(CSCAN)"<<endl;cout<<"0、退出"<<endl;cout<<endl;cout<<"請選擇功能號:";cin>>s;if(s>4){ cout<<"輸入有誤!"<<endl;}else{switch(s){case0:exit(0);break;case1:FCFS(a,n);break;case2:SSTF(a,n);break;case3:SCAN(a,n);break;case4:CSCAN(a,n);break;} }} return0;}//先來先服務調度算法(FCFS)voidFCFS(inta[],intn){intsum=0,j,i,first=0,now;cout<<"請輸入當前磁道號:";cin>>now;//確定當前磁頭所在位置cout<<"磁盤調度順序為:"<<endl;for(i=0;i<n;i++)//按訪問順序輸出磁道號{cout<<a[i]<<"";}//計算sumfor(i=0,j=1;j<n;i++,j++){first+=abs(a[j]-a[i]);//外圍磁道及最里面磁道的距離}sum+=first+abs(now-a[0]);cout<<endl;cout<<"移動的總磁道數(shù):"<<sum<<endl;}//最短尋道時間算法(SSTF)voidSSTF(inta[],intn){inttemp;intk=1;intnow,l,r;inti,j,sum=0;//將磁道號按遞增排序for(i=0;i<n;i++)for(j=i+1;j<n;j++){if(a[i]>a[j]){temp=a[i];a[i]=a[j];a[j]=temp;}}cout<<"按遞增順序排好的磁道:"<<endl;for(i=0;i<n;i++){cout<<a[i]<<"";//輸出排好的磁道順序}cout<<endl;cout<<"請輸入當前的磁道號:";cin>>now;//確定當前磁頭所在位置cout<<"磁盤調度順序為:"<<endl;if(a[n-1]<=now)//當前磁頭位置大于最外圍欲訪問磁道{for(i=n-1;i>=0;i--)cout<<a[i]<<"";sum=now-a[0];}elseif(a[0]>=now)//當前磁頭位置小于最里欲訪問磁道{for(i=0;i<n;i++)cout<<a[i]<<"";sum=a[n-1]-now;}else{while(a[k]<now)//確定當前磁道在已排的序列中的位置 {k++; }l=k-1;//在磁頭位置的前一個欲訪問磁道r=k;//磁頭欲訪問磁道while((l>=0)&&(r<n)){if((now-a[l])<=(a[r]-now))//選擇離磁頭近的磁道 {cout<<a[l]<<"";sum+=now-a[l];now=a[l];l=l-1;}else{cout<<a[r]<<"";sum+=a[r]-now;now=a[r];r=r+1;}}if(l=-1)//磁頭位置里側的磁道已訪問完{for(j=r;j<n;j++)//訪問磁頭位置外側的磁道{cout<<a[j]<<"";}sum+=a[n-1]-a[0];}if(r==n)//磁頭位置外側的磁道已訪問完{for(j=k-1;j>-1;j--)//訪問磁頭位置里側的磁道{cout<<a[j]<<"";}sum+=a[n-1]-a[0];}}cout<<endl;cout<<"移動的總道數(shù):"<<sum<<endl;}//掃描算法(SCAN)voidSCAN(inta[],intn){inttemp;intk=1;intnow,l,r;inti,j,sum=0;for(i=0;i<n;i++)//對訪問磁道按由小到大順序排列輸出for(j=i+1;j<n;j++){if(a[i]>a[j]){temp=a[i];a[i]=a[j];a[j]=temp;}}cout<<"按遞增順序排好的磁道:"<<endl;for(i=0;i<n;i++){cout<<a[i]<<"";}cout<<endl;cout<<"請輸入當前的磁道號:";cin>>now;//以下算法確定磁道訪問順序if(a[n-1]<=now)//磁頭位置大于最外圍欲訪問磁道{for(i=n-1;i>=0;i--)cout<<a[i]<<"";sum=now-a[0];}elseif(a[0]>=now)//磁頭位置小于最里欲訪問磁道{for(i=0;i<n;i++)cout<<a[i]<<"";sum=a[n-1]-now;}else//磁頭位置在最里側磁道及最外側磁道之間{intd;while(a[k]<now){//確定當前磁道在已排的序列中的位置k++;}l=k-1;//在磁頭位置的前一個欲訪問磁道r=k;//磁頭欲訪問磁道cout<<"請輸入當前磁頭移動的方向(0表示向內(nèi),1表示向外):";cin>>d;//確定磁頭訪問的方向cout<<"磁盤調度順序為:";if(d==0||d==1) {if(d==0)//磁頭向內(nèi) {for(j=l;j>=0;j--) {cout<<a[j]<<""; }for(j=r;j<n;j++) {cout<<a[j]<<""; }sum=now-2*a[0]+a[n-1]; }if(d==1)//磁頭向外 { for(j=r;j<n;j++) {cout<<a[j]<<""; }for(j=l;j>=0;j--) {cout<<a[j]<<""; }sum=2*a[n-1]-now-a[0]; } }else cout<<"請輸入0或1!"<<endl; }cout<<endl;cout<<"移動的總道數(shù):"<<sum<<endl;}//循環(huán)掃描算法(CSCAN)voidCSCAN(inta[],intn){inttemp;intnow,l,r;inti,j,sum=0;intk=1;for(i=0;i<n;i++)//對訪問磁道按由小到大順序排列輸出for(j=i+1;j<n;j++){if(a[i]>a[j]) {temp=a[i];a[i]=a[j];a[j]=temp; }}cout<<"按遞增順序排好的磁道:"<<endl;for(i=0;i<n;i++){cout<<a[i]<<"";}cout<<endl;cout<<"請輸入當前的磁道號:";cin>>now;//確定當前磁道號if(a[n-1]<=now)//磁頭位置大于最外圍欲訪問磁道{for(i=0;i<n;i++)cout<<a[i]<<"";sum=now-2*a[0]+a[n-1];}elseif(a[0]>=now)//磁頭位置小于最里欲訪問磁道{for(i=0;i<n;i++)cout<<a[i]<<"";sum=a[n-1]-now;}else//磁頭位置在最里側磁道及最外側磁道之間{intd;while(a[k]<now){k++;}l=k-1;//在磁頭位置的前一個欲訪問磁道r=k;//磁頭欲訪問磁道 cout<<"請輸入當前磁頭移動的方向(0表示向內(nèi),1表示向外):";cin>>d;//確定磁頭訪問的方向 cout<<"磁盤調度順序為:";if(d==0||d==1) {if(d==1)//磁頭向外側訪問 {for(j=r;j<n;j++)//先訪問外側磁道再轉向最里欲訪問磁道

溫馨提示

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

評論

0/150

提交評論