版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 操作系統(tǒng)課程設(shè)計(jì)</b></p><p> 磁盤調(diào)度算法的模擬實(shí)現(xiàn)</p><p> 學(xué) 院 計(jì)算機(jī)科學(xué)與技術(shù) </p><p> 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù)(師范)</p><p> 學(xué) 號(hào) ************
2、</p><p> 學(xué) 生 姓 名 *** </p><p> 指導(dǎo)教師姓名 *** </p><p><b> 2015年7月1日</b></p><p><b> 目錄</b></p><p><b
3、> 一、引言2</b></p><p><b> 二、總體設(shè)計(jì)2</b></p><p><b> 1.功能實(shí)現(xiàn)2</b></p><p><b> 2.流程圖3</b></p><p><b> 3.具體內(nèi)容3<
4、/b></p><p><b> 三、實(shí)驗(yàn)驗(yàn)證5</b></p><p><b> 1.結(jié)果截圖7</b></p><p><b> 2.代碼分析6</b></p><p><b> 四、源代碼9</b></p>
5、<p><b> 五、總結(jié)13</b></p><p> 六、參考資料13</p><p><b> 引言</b></p><p> 1、課程設(shè)計(jì)的目的:</p><p> 操作系統(tǒng)課程設(shè)計(jì)是計(jì)算機(jī)專業(yè)重要的教學(xué)環(huán)節(jié),它為學(xué)生提供了一個(gè)既動(dòng)手又動(dòng)腦,將課本上的理論知識(shí)和
6、實(shí)際有機(jī)的結(jié)合起來,獨(dú)立分析和解決實(shí)際問題的機(jī)會(huì)。 </p><p> 進(jìn)一步鞏固和復(fù)習(xí)操作系統(tǒng)的基礎(chǔ)知識(shí)。 </p><p> 培養(yǎng)學(xué)生結(jié)構(gòu)化程序、模塊化程序設(shè)計(jì)的方法和能力。 </p><p> 提高學(xué)生調(diào)試程序的技巧和軟件設(shè)計(jì)的能力。 </p><p> 提高學(xué)生分析問題、解決問題以及綜合利用 C 語言進(jìn)行程序設(shè)計(jì)的能力。 &l
7、t;/p><p> 2、設(shè)計(jì)內(nèi)容:設(shè)計(jì)并實(shí)現(xiàn)一個(gè)本別利用下列磁盤調(diào)度算法進(jìn)行磁盤調(diào)度的模擬程序。</p><p> 1、先來先服務(wù)算法FCFS </p><p> 2、最短尋道時(shí)間優(yōu)先算法SSTF </p><p><b> 3、設(shè)計(jì)要求:</b></p><p> 磁頭初始磁道號(hào)
8、,序列長度,磁道號(hào)序列等數(shù)據(jù)可從鍵盤輸入,也可從文件讀入。 </p><p> 最好能實(shí)現(xiàn)磁道號(hào)序列中磁道號(hào)的動(dòng)態(tài)增加。</p><p> 磁道訪問序列以鏈表的形式存儲(chǔ)</p><p> 4. 給出各磁盤調(diào)度算法的調(diào)度順序和平均尋道長度</p><p><b> 總體設(shè)計(jì)</b></p>&l
9、t;p><b> 1、算法實(shí)現(xiàn)</b></p><p> 1.先來先服務(wù)算法(FCFS)</p><p> 先來先服務(wù)(FCFS)調(diào)度:按先來后到次序服務(wù),未作優(yōu)化。</p><p> 最簡單的移臂調(diào)度算法是“先來先服務(wù)”調(diào)度算法,這個(gè)算法實(shí)際上不考慮訪問者要求訪問的物理位置,而只是考慮訪問者提出訪問請求的先后次序。例如,如果現(xiàn)在
10、讀寫磁頭正在50號(hào)柱面上執(zhí)行輸出操作,而等待訪問者依次要訪問的柱面為130、199、32、159、15、148、61、99,那么,當(dāng)50號(hào)柱面上的操作結(jié)束后,移動(dòng)臂將按請求的先后次序先移到130號(hào)柱面,最后到達(dá)99號(hào)柱面。</p><p> 采用先來先服務(wù)算法決定等待訪問者執(zhí)行輸入輸出操作的次序時(shí),移動(dòng)臂來回地移動(dòng)。先來先服務(wù)算法花費(fèi)的尋找時(shí)間較長,所以執(zhí)行輸入輸出操作的總時(shí)間也很長。</p>&
11、lt;p> 2.短尋道時(shí)間優(yōu)先算法(SSTF)</p><p> 最短尋找時(shí)間優(yōu)先調(diào)度算法總是從等待訪問者中挑選尋找時(shí)間最短的那個(gè)請求先執(zhí)行的,而不管訪問者到來的先后次序?,F(xiàn)在仍利用同一個(gè)例子來討論,現(xiàn)在當(dāng)50號(hào)柱面的操作結(jié)束后,應(yīng)該先處理61號(hào)柱面的請求,然后到達(dá)32號(hào)柱面執(zhí)行操作,隨后處理15號(hào)柱面請求,后繼操作的次序應(yīng)該是99、130、148、159、199。</p><p&g
12、t; 采用最短尋找時(shí)間優(yōu)先算法決定等待訪問者執(zhí)行操作的次序時(shí),讀寫磁頭總共移動(dòng)了200多個(gè)柱面的距離,與先來先服務(wù)、算法比較,大幅度地減少了尋找時(shí)間,因而縮短了為各訪問者請求服務(wù)的平均時(shí)間,也就提高了系統(tǒng)效率。</p><p> 但最短查找時(shí)間優(yōu)先(SSTF)調(diào)度,F(xiàn)CFS會(huì)引起讀寫頭在盤面上的大范圍移動(dòng),SSTF查找距離磁頭最短(也就是查找時(shí)間最短)的請求作為下一次服務(wù)的對象。SSTF查找模式有高度局部化的
13、傾向,會(huì)推遲一些請求的服務(wù),甚至引起無限拖延(又稱饑餓)。</p><p> ?、傧葋硐确?wù)算法(FCFS)流程圖:</p><p> ?、谧疃虒さ罆r(shí)間優(yōu)先算法(SSTF)流程圖:</p><p><b> 三、總體驗(yàn)證</b></p><p> 1、數(shù)據(jù)結(jié)構(gòu)及信號(hào)量定義的說明;</p><p&g
14、t; 本系統(tǒng)劃分為四個(gè)模塊:先來先服務(wù)算法模塊void FCFS(int array[],int m)、最短尋道時(shí)間優(yōu)先算法模塊void SSTF(int array[],int m)、掃描算法模塊void SCAN(int array[],int m) 和循環(huán)掃描算法模塊:void CSCAN(int array[],int m) 。</p><p> 2. 先來先服務(wù)算法模塊:void FCFS(int
15、array[],int m)</p><p> 輸入磁道號(hào),按先來先服務(wù)的策略輸出磁盤請求序列,求平均尋道長度,輸出移動(dòng)平均磁道數(shù)。</p><p> 3、 最短尋道時(shí)間優(yōu)先算法模塊:void SSTF(int array[],int m)</p><p> 將磁道號(hào)用冒泡法從小到大排序,輸出排好序的磁道序列,輸入當(dāng)前磁道號(hào),根據(jù)前磁道在已排的序列中的位置,選
16、擇掃描的順序,求出平均尋道長度,輸出移動(dòng)的平均磁道數(shù)。</p><p><b> 4、代碼分析</b></p><p> 1、先來先服務(wù)算法模塊:void FCFS(int array[],int m)</p><p><b> 主要代碼:</b></p><p> for(i=0,j=1;
17、j<m;i++,j++) </p><p><b> {</b></p><p> sum+=abs(array[j]-array[i]);</p><p> ave=(float)(sum)/(float)(m);</p><p><b> }</b></p><
18、;p> 2 最短尋道時(shí)間優(yōu)先算法模塊:void SSTF(int array[],int m)</p><p><b> 主要代碼:</b></p><p> for(i=0;i<m;i++) /*使用冒泡法按從小到大順序排列*/</p><p> for(j=i+1;j<m;j++)</p>&l
19、t;p><b> {</b></p><p> if(array[i]>array[j])</p><p><b> {</b></p><p> temp=array[i];</p><p> array[i]=array[j];</p><p>
20、array[j]=temp;</p><p><b> }</b></p><p><b> }</b></p><p> if(array[m-1]<=now) /*若當(dāng)前磁道號(hào)大于請求序列中最大者,則直接由外向內(nèi)依次給予各請求服務(wù)*/</p><p><b> {&
21、lt;/b></p><p> for(i=m-1;i>=0;i--)</p><p> cout<<array[i]<<" ";</p><p> sum=now-array[0];</p><p><b> }</b></p><p&
22、gt; else if(array[0]>=now) /*若當(dāng)前磁道號(hào)小于請求序列中最小者,則直接由內(nèi)向外依次給予各請求服務(wù)*/</p><p> while((l>=0)&&(r<m)) /*當(dāng)前磁道在請求序列范圍內(nèi)*/</p><p><b> {</b></p><p> if((now-
23、array[l])<=(array[r]-now)) /*選擇與當(dāng)前磁道最近的請求給予服務(wù)*/</p><p><b> {</b></p><p> cout<<array[l]<<" ";</p><p> sum+=now-array[l];</p><p>
24、 now=array[l];</p><p><b> l=l-1;</b></p><p><b> }</b></p><p><b> 3、實(shí)驗(yàn)的步驟;</b></p><p> 1 先來先服務(wù)算法 </p><p>
25、 輸入磁道序列:55 58 39 18 90 160 150 38 184 當(dāng)前磁道號(hào):100 </p><p> 2 最短尋道時(shí)間優(yōu)先算法 </p><p> 當(dāng)前磁道號(hào)大于磁道序列中的最大的磁道號(hào)時(shí) </p&g
26、t;<p> 輸入磁道序列:55 58 39 18 90 160 150 38 184 </p><p> 當(dāng)前磁道號(hào):100 </p><p><b> 四、源代碼:</b></p><p> #include<io
27、stream></p><p> #include<cmath></p><p> #include<stdio.h></p><p> using namespace std;</p><p> typedef struct node</p><p><b> {&l
28、t;/b></p><p><b> int data;</b></p><p> struct node *next;</p><p> }Node,*Linklist;</p><p> void main()</p><p><b> {</b><
29、/p><p> void Create_Linklist(Node *);</p><p> void fcfs();//聲明先來先服務(wù)函數(shù)FCFS</p><p> void sstf();//聲明最短尋道時(shí)間優(yōu)先函數(shù)sstf</p><p> void print(Node *);</p><p><b&
30、gt; int s;</b></p><p> printf("**************磁盤調(diào)度算法***************\n");</p><p> printf("\t***1,先來先服務(wù)算法FCFS\n");</p><p> printf("\t***2,最短尋道時(shí)間優(yōu)先算法S
31、STF\n");</p><p> printf("\t***0,退出\n");</p><p> printf("\t***請選擇:");</p><p> scanf("%d",&s);</p><p> while(s!=0)</p>&
32、lt;p><b> {</b></p><p><b> switch(s)</b></p><p><b> {</b></p><p> case 1:printf("\t\t********你選擇了:先來先服務(wù)算法FCFS\n");fcfs();break;&l
33、t;/p><p> case 2:printf("\t\t******你選擇了:最短尋道時(shí)間優(yōu)先算法SSTF\n");sstf();break;</p><p><b> }</b></p><p> printf("\t\t*******退出請選0,繼續(xù)請選1,2,\n");scanf("%
34、d",&s);</p><p><b> }</b></p><p><b> }</b></p><p> /******************************************************************/</p><p> void
35、 fcfs()//先來先服務(wù)算法</p><p><b> { </b></p><p> void Create_Linklist(Node *);</p><p> void print(Node*);</p><p> int Length_Linklist(Node *);</p><
36、p> Node *l,*head;//*m,*n;*/</p><p> float num=0;//num為平均尋道長度 </p><p><b> int c,f;</b></p><p> head=(Node *)malloc(sizeof(Node));</p><p> head->n
37、ext=NULL;</p><p> printf("**************新建一個(gè)單鏈表,以0作為結(jié)束標(biāo)志:********\n");</p><p> Create_Linklist(head);</p><p> c=Length_Linklist(head);</p><p> printf(&quo
38、t;\t\t******從幾號(hào)磁道開始:********");</p><p> scanf("%d",&f);//f為磁道號(hào) </p><p> print(head);</p><p> printf("\t***鏈表長度為:%d\n",c); </p><p> l=h
39、ead->next; </p><p> for(int i=0;i<c;i++) </p><p><b> {</b></p><p> num+=abs(l->data-f);f=l->data;l=l->next;</p><p><b> }</b
40、></p><p> num=num/c;</p><p> printf("\t\t*****先來先服務(wù)的尋道順序是:\n");</p><p> print(head);</p><p> printf("\t\t******平均尋道長度:%f\n",num);</p>
41、<p><b> }</b></p><p> /*****************************************************************/ </p><p> void sstf()//最短尋道時(shí)間優(yōu)先算法</p><p><b> {</b></p>
42、;<p> void Create_Linklist(Node *);</p><p> void print(Node *);</p><p> int Length_Linklist(Node *);</p><p> Node *p,*q,*r,*s,*l,*m,*head;</p><p><b>
43、int c,f;</b></p><p> head=(Node *)malloc(sizeof(Node));head->next=NULL;</p><p> printf("**************新建一個(gè)單鏈表,以0作為結(jié)束標(biāo)志:********\n"); </p><p> Create_Linklist(
44、head); c=Length_Linklist(head); </p><p> printf("\t\t******從幾號(hào)磁道開始:********"); </p><p> scanf("%d",&f); //f為磁
45、道號(hào)</p><p> print(head); </p><p> printf("\t***鏈表長度為:%d\n",c); </p><p> l=(Node *)malloc(sizeof(Node)); </p><p> l->next=NULL; m=l; </p><
46、p> q=head; p=head->next; </p><p> s=head; r=head->next; </p><p> float num=0; </p><p> for(int i=0;i<c;i++) </p><p><b> { </b></p&
47、gt;<p> int min=abs(f-r->data); </p><p> for(int j=0;j<c-i-1;j++) </p><p><b> { </b></p><p> p=p->next; </p><p> q=q->next; &
48、lt;/p><p> if(abs(f-p->data)<min) </p><p><b> { </b></p><p> min=abs(f-p->data); </p><p><b> r=p; </b></p><p>
49、<b> s=q; </b></p><p><b> } </b></p><p><b> } </b></p><p> num+=abs(f-r->data); </p><p> f=r->data; </p><
50、p> s->next=r->next; </p><p> r->next=NULL; </p><p> m->next=r; </p><p><b> m=r; </b></p><p> q=head; </p><p&g
51、t; p=head->next; </p><p> s=head; </p><p> r=head->next; </p><p><b> } </b></p><p> num=num/c; </p><p> printf("\t\t*****
52、*最短尋道時(shí)間優(yōu)先順序是:\n"); </p><p> print(l); </p><p> printf("\t\t*********平均尋道長度:%f\n",num); </p><p><b> } </b></p><p> /*********************
53、************************************/ </p><p> void print(Node *head) //輸出鏈表 </p><p><b> {</b></p><p><b> Node *p;</b></p><p> p=head
54、->next; </p><p> cout<<"單鏈表顯示:"; </p><p> if(p==NULL) </p><p><b> { </b></p><p> printf("單鏈表為空:\n"); </p><p&
55、gt;<b> } </b></p><p> else if(p->next==NULL) </p><p> { </p><p> printf("%d\t",p->data); </p><p> pri
56、ntf("\n"); </p><p><b> } </b></p><p><b> else </b></p><p><b> { </b></p><p> while(p->next!=NULL) </p>&
57、lt;p><b> { </b></p><p> printf("%d\t",p->data); </p><p> p=p->next; </p><p><b> } </b></p><p> printf("%d\t&qu
58、ot;,p->data); </p><p> printf("\n"); </p><p><b> } </b></p><p><b> } </b></p><p> /*****************************************
59、****************/ void Create_Linklist(Node *head)//創(chuàng)建鏈表</p><p><b> { </b></p><p> Node *p,*q; </p><p><b> int i; </b></p><p> scanf(&quo
60、t;%d",&i); </p><p><b> q=head; </b></p><p> while(i!=0) </p><p><b> { </b></p><p> p=(Node *)malloc(sizeof(Node)); </p>
61、;<p> p->next=NULL; </p><p> p->data=i; </p><p> q->next=p; </p><p><b> q=p; </b></p><p><b> cin>>i; </b><
62、;/p><p> } /* c++;*/ </p><p><b> } </b></p><p> /**************************************************/ </p><p> int Length_Linklist(Node *head)//計(jì)算鏈表長</p
63、><p><b> {</b></p><p><b> int l;</b></p><p><b> Node *p; </b></p><p> p= head->next; </p><p><b> l=1; </
64、b></p><p> while(p->next) </p><p><b> { </b></p><p> p=p->next; </p><p><b> l++; </b></p><p><b> } </b>
65、;</p><p> return l; </p><p><b> }</b></p><p><b> 五、總結(jié)</b></p><p> 通過此次課程設(shè)計(jì),我對操作系統(tǒng)的基礎(chǔ)知識(shí)了解得更透徹了,同時(shí)對磁盤調(diào)度的四種算法——先來先服務(wù)算法(FCFS)、最短尋道時(shí)間優(yōu)先算法(SSTF)、有
66、了更深刻的理解和掌握,使我能夠?yàn)榇疟P調(diào)度選擇適當(dāng)?shù)乃惴?,提高CPU工作效率。設(shè)計(jì)過程中遇到的困難在老師和同學(xué)的幫助下順利解決并通過了驗(yàn)收,我深刻認(rèn)識(shí)到算法的邏輯性對程序的重要影響,算法的準(zhǔn)確度對程序運(yùn)行結(jié)果的重要影響,這對我以后在操作系統(tǒng)的學(xué)習(xí)中有極大幫助。</p><p><b> 六、 參考資料</b></p><p> 黃維通等. Visual C++ 面向
67、對象與可視化程序設(shè)計(jì). 北京:清華大學(xué)出版社,2011.</p><p> 鄭宗漢等. 算法設(shè)計(jì)與分析. 北京:清華大學(xué)出版社,2005.</p><p> 趙劍云等譯, [美]George Shepherd等著. 深入解析MFC. 北京:中國電力出版社,2003.</p><p> Microsoft Platform SDK, August 2001 Ed
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 磁盤調(diào)度算法課程設(shè)計(jì)--模擬磁盤調(diào)度算法系統(tǒng)的設(shè)計(jì)
- 磁盤調(diào)度算法程序課程設(shè)計(jì)報(bào)告
- 磁盤調(diào)度算法程序課程設(shè)計(jì)報(bào)告
- 磁盤調(diào)度算法程序課程設(shè)計(jì)報(bào)告
- 磁盤調(diào)度課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤調(diào)度算法
- 操作系統(tǒng)磁盤調(diào)度算法課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤調(diào)度算法
- 磁盤調(diào)度課程設(shè)計(jì)
- c語言磁盤調(diào)度課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)---磁盤調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)--磁盤調(diào)度算法實(shí)踐
- 操作系統(tǒng)課程設(shè)計(jì)---磁盤調(diào)度報(bào)告
- 磁盤調(diào)度算法的模擬
- cscan磁盤調(diào)度算法---操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)-磁盤調(diào)度模擬法
- 磁盤調(diào)度算法及模擬
- 進(jìn)程模擬調(diào)度算法課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論