版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 操作系統(tǒng)課程設(shè)計(jì)</b></p><p> 學(xué) 院: 信息科學(xué)與工程學(xué)院</p><p> 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)</p><p> 班 級(jí): </p><p><b> 學(xué) 號(hào): </b></p><p
2、><b> 學(xué)生姓名: </b></p><p><b> 指導(dǎo)教師: </b></p><p> 2014 年 3 月 10 日</p><p><b> 一、實(shí)驗(yàn)內(nèi)容</b></p><p> 磁盤調(diào)度算法(1人)</p><p>
3、;<b> [問(wèn)題描述] </b></p><p> 了解磁盤管理的原理,掌握磁盤調(diào)度種算法。</p><p><b> [基本要求]</b></p><p> 編程序?qū)崿F(xiàn)下述磁盤調(diào)度算法,并求出每種算法的平均尋道長(zhǎng)度:要求設(shè)計(jì)主界面可以靈活選擇算法,且以下算法為基本要求。</p><p>
4、; 先來(lái)先服務(wù)算法(FCFS)</p><p> 最短尋道時(shí)間優(yōu)先算法(SSTF)</p><p> 掃描算法(SCAN)</p><p> 循環(huán)掃描算法(CSCAN)</p><p><b> 二、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</b></p><p> struct node</p>
5、<p><b> {</b></p><p><b> int data;</b></p><p> struct node *next;</p><p><b> };</b></p><p> struct node1</p><p&
6、gt;<b> {</b></p><p><b> int data;</b></p><p> struct node1 *next;</p><p> struct node1 *pre;</p><p><b> };</b></p><p
7、> 三、算法設(shè)計(jì)(總體設(shè)計(jì)及模塊設(shè)計(jì))</p><p><b> 1.總體設(shè)計(jì)</b></p><p><b> 2.模塊設(shè)計(jì)</b></p><p> ?。?).先來(lái)先服務(wù)算法(FCFS)</p><p><b> ……</b></p><p
8、> 建立鏈表后順序訪問(wèn)并計(jì)算即可</p><p> (2)..最短尋道時(shí)間優(yōu)先算法(SSTF)</p><p><b> ……</b></p><p><b> a. 首先建立鏈表</b></p><p><b> ……</b></p><p
9、> b.遍歷鏈表并找到距離當(dāng)前磁道最近的磁道 </p><p><b> ……</b></p><p> C.訪問(wèn)該磁道,計(jì)算并刪除</p><p> ?。?). 掃描算法(SCAN)</p><p><b> ……</b></p><p><b>
10、 a. 首先建立鏈表</b></p><p><b> ……</b></p><p> b.遍歷鏈表并找到距離當(dāng)前磁道最近的磁道 </p><p><b> ……</b></p><p><b> ……</b></p><p>
11、 C.將原鏈表分成兩個(gè)短鏈表</p><p><b> ……</b></p><p><b> ……</b></p><p> d.使用雙向鏈表將前一鏈表逆序</p><p><b> ……</b></p><p><b> ……&l
12、t;/b></p><p> e.分別順序訪問(wèn)兩個(gè)鏈表并計(jì)算即可</p><p> ?。?)循環(huán)掃描算法(CSCAN)</p><p><b> ……</b></p><p><b> a. 首先建立鏈表</b></p><p><b> ……<
13、/b></p><p> b.遍歷鏈表并找到距離當(dāng)前磁道最近的磁道 </p><p><b> ……</b></p><p><b> ……</b></p><p> C.將原鏈表分成兩個(gè)短鏈表</p><p><b> ……</b>&
14、lt;/p><p><b> ……</b></p><p> d. 分別順序訪問(wèn)兩個(gè)鏈表并計(jì)算即可</p><p><b> 2.具體函數(shù)設(shè)計(jì)</b></p><p> ?。?).先來(lái)先服務(wù)算法</p><p> 順序訪問(wèn)磁道,記錄訪問(wèn)時(shí)間,最終算出平均訪問(wèn)時(shí)間</
15、p><p> void FCFS()//先來(lái)先服務(wù)</p><p><b> {</b></p><p> int m=100,n,i=0,s=0;//m:當(dāng)前道號(hào) n:間距 i:計(jì)數(shù) s:尋道時(shí)間和</p><p> struct node *p;</p><p>&l
16、t;b> float x;</b></p><p> p=creat();</p><p> printf("被訪問(wèn)的下一個(gè)磁道\t移動(dòng)距離\n"); </p><p> if (p==NULL)</p><p> printf("空鏈表!");</p><
17、;p><b> else</b></p><p> while(p!=NULL&&p->data!=0)</p><p> { n=abs(m-p->data);</p><p> printf ("\t%d\t%d\n",p->data,n);</p>&l
18、t;p><b> i++;</b></p><p><b> s=s+n;</b></p><p> m=p->data;</p><p> p=p->next;</p><p><b> }</b></p><p> x=
19、(float)(s*1.0)/i;</p><p> printf("平均尋道時(shí)間:%.2f\n",x);</p><p><b> }</b></p><p> ?。?)最短尋道時(shí)間優(yōu)先算法(SSTF)</p><p> 依次訪問(wèn)距離當(dāng)前磁道最近的磁道,記錄訪問(wèn)時(shí)間,最終算出平均訪問(wèn)時(shí)間<
20、;/p><p> void SSTF()//最短尋道時(shí)間</p><p><b> {</b></p><p> struct node *p,*q,*x;</p><p> int m=100,m1=100,n,s=0,i=0,j=0,min=1000;//m:當(dāng)前道號(hào) n:間距 i,j:計(jì)數(shù)
21、 s:尋道時(shí)間和</p><p><b> float r;</b></p><p> x=p=q=creat();</p><p> printf("被訪問(wèn)的下一個(gè)磁道\t移動(dòng)距離\n"); </p><p> while(q!=NULL&&q->data!=0)//計(jì)
22、算一共多少磁道</p><p><b> {j++;</b></p><p> q=q->next;}</p><p><b> q=p;</b></p><p> //while(x!=NULL&&x->data!=0)///////j次循環(huán)</p>
23、<p> for (int y=1;y<=j;y++)</p><p> { if (p==NULL)</p><p> printf("空鏈表!");</p><p><b> else</b></p><p><b> {</b></p
24、><p> while(p!=NULL&&p->data!=0)//找到尋道時(shí)間最短的磁道</p><p><b> {</b></p><p> n=abs(m1-(p->data));</p><p><b> if(min>n)</b></p>
25、<p><b> {</b></p><p><b> min=n;</b></p><p> m=p->data;</p><p><b> }</b></p><p> p=p->next;</p><p><
26、;b> }</b></p><p> printf ("\t\t%d\t%d\n",m,min);</p><p><b> s=s+min;</b></p><p><b> min=1000;</b></p><p><b> m1=m;
27、 </b></p><p><b> p=x;</b></p><p><b> //刪除節(jié)點(diǎn)</b></p><p> if (m==q->data)//刪除第一個(gè)節(jié)點(diǎn)</p><p><b> {</b></p><p&g
28、t; q=p->next;</p><p><b> free(p);</b></p><p><b> p=q;x=p;</b></p><p><b> }</b></p><p> else//刪除其他節(jié)點(diǎn)</p><p><
29、b> {</b></p><p><b> q=p=x;</b></p><p> while((q->data!=m)&&(q->data!=0))</p><p><b> {</b></p><p><b> p=q;</
30、b></p><p> q=q->next;</p><p><b> }</b></p><p> if(q->data==m)</p><p><b> {</b></p><p> p->next=q->next;</p&g
31、t;<p><b> free(q);}</b></p><p><b> p=q=x;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>
32、</p><p> r=(float)(s*1.0)/j;</p><p> printf("平均尋道時(shí)間:%.2f\n",r);</p><p><b> }</b></p><p> (3). 掃描算法(SCAN)</p><p> void SCAN()//掃描
33、算法</p><p><b> {</b></p><p> struct node *p,*q,*head;</p><p> struct node *m,*n,*first;</p><p> struct node1 *d,*e,*de;</p><p> d=e=de=NULL
34、;</p><p> int min=1000,a=100,b=0,j=0,s=0;//j,x,y:計(jì)數(shù) a:當(dāng)前磁道號(hào) s:時(shí)間求和 b:?jiǎn)蝹€(gè)計(jì)差 x:平均尋道時(shí)間</p><p><b> float x;</b></p><p> p=q=head=creat();</p><p>
35、 m=n=first=NULL;</p><p> while(q!=NULL&&q->data!=0)//計(jì)算一共多少磁道</p><p><b> {</b></p><p><b> j++;</b></p><p> q=q->next;</p&g
36、t;<p><b> }</b></p><p> printf("總共的磁道數(shù):j=%d\n",j);</p><p> if (p==NULL)</p><p> printf("空鏈表");</p><p><b> else</b&g
37、t;</p><p><b> {</b></p><p> while(p!=NULL&&p->data!=0)//找最小的磁道號(hào)記為min,并刪除原節(jié)點(diǎn)</p><p><b> {</b></p><p> if (min>(p->data))<
38、/p><p><b> {</b></p><p> min=p->data;</p><p><b> }</b></p><p><b> else</b></p><p> p=p->next;</p><p&
39、gt;<b> }</b></p><p> if (min==q->data)//刪除第一個(gè)節(jié)點(diǎn)</p><p><b> {</b></p><p> q=p->next;</p><p><b> free(p);</b></p>&l
40、t;p> p=q;head=p;</p><p><b> }//x=p=q;</b></p><p> else//刪除其他節(jié)點(diǎn)</p><p><b> {</b></p><p><b> q=p=head;</b></p><p>
41、; while((q->data!=min)&&(q->data!=0))</p><p><b> {</b></p><p><b> p=q;</b></p><p> q=q->next;</p><p><b> }</b>
42、</p><p> if(q->data==min)</p><p><b> {</b></p><p> p->next=q->next;</p><p><b> free(q);</b></p><p><b> }</b&
43、gt;</p><p><b> p=q=head;</b></p><p><b> }</b></p><p><b> }</b></p><p> n=m=first=(struct node *)malloc(sizeof(struct node)); //排
44、序鏈表</p><p> m->data=min;</p><p> n=first=m;</p><p><b> min=1000;</b></p><p> printf("排序后為:\n");///對(duì)了</p><p> for (int i=2;i&l
45、t;=j;i++) //排序</p><p><b> { </b></p><p> while(p!=NULL&&p->data!=0)//找最小的磁道號(hào)記為min,并刪除原節(jié)點(diǎn)</p><p><b> {</b></p><p> if (min>(p
46、->data))</p><p><b> {</b></p><p> min=p->data;</p><p><b> p=head;</b></p><p><b> }</b></p><p><b> else
47、</b></p><p> p=p->next;</p><p><b> }</b></p><p><b> p=q=head;</b></p><p> if (min==q->data)//刪除第一個(gè)節(jié)點(diǎn)</p><p><b&g
48、t; {</b></p><p> q=p->next;</p><p><b> free(p);</b></p><p> p=q;head=p;</p><p><b> }</b></p><p> else//刪除其他節(jié)點(diǎn)</p&
49、gt;<p><b> {</b></p><p><b> q=p=head;</b></p><p> while((q->data!=min)&&(q->data!=0))</p><p><b> {</b></p><p&
50、gt;<b> p=q;</b></p><p> q=q->next;</p><p><b> }</b></p><p> if(q->data==min)</p><p><b> {</b></p><p> p->
51、;next=q->next;</p><p><b> free(q);</b></p><p><b> }</b></p><p><b> p=q=head;</b></p><p><b> }</b></p><
52、p> m=(struct node *)malloc(sizeof(struct node));</p><p> n->next=m;</p><p> m->data=min;</p><p><b> n=m;</b></p><p> m->next=NULL;</p>
53、;<p><b> min=1000;</b></p><p><b> }</b></p><p> m=n=first;</p><p> while(m!=NULL&&m->data!=0) </p><p><b> { </b
54、></p><p> printf("%d\n",m->data); </p><p> m=m->next; </p><p> } //排序(輸出)終于對(duì)了?。。。。?! </p><p> p=q=head=m=n=first;</p><p> printf
55、("被訪問(wèn)的下一個(gè)磁道\t移動(dòng)距離\n");</p><p> while(m!=NULL&&m->data!=0)//找大于100的磁道</p><p><b> {</b></p><p> if ((m->data)>=a)// //將原鏈表分為兩個(gè)鏈表(大于100,小于100)
56、</p><p><b> {</b></p><p><b> first=m;</b></p><p><b> p=n;</b></p><p> p->next=NULL;</p><p><b> n=first;&l
57、t;/b></p><p><b> break;</b></p><p><b> }</b></p><p><b> n=m;</b></p><p> m=n->next;</p><p> }
58、 ///哈哈哈!分成兩個(gè)鏈表了?。。。?lt;/p><p> //將小號(hào)磁道鏈表逆序(表頭添加法)</p><p><b> p=head;</b></p><p> d=e=de=(struct node1 *)malloc(sizeof(struct node1));</p><p> d->
59、;data=p->data;</p><p> de->next=NULL;</p><p> while(p!=NULL&&p->data!=0)</p><p><b> {</b></p><p><b> e=d;</b></p>&l
60、t;p> d=(struct node1 *)malloc(sizeof(struct node1));</p><p> d->data=p->data;</p><p><b> e->pre=d;</b></p><p> d->next=e;</p><p> p=p-&g
61、t;next;</p><p><b> }</b></p><p> d->pre=NULL;</p><p><b> de=e=d;</b></p><p> m=n=first;</p><p> while(m!=NULL&&m-&g
62、t;data!=0)</p><p><b> {</b></p><p> b=abs(a-(m->data));</p><p> a=m->data;</p><p> m=m->next;</p><p> printf("\t\t%d\t%d\n&q
63、uot;,a,b);</p><p><b> s=s+b;</b></p><p><b> } </b></p><p><b> de=e=d;</b></p><p> while(d!=NULL&&d->data!=0)</p&g
64、t;<p><b> {</b></p><p> b=abs(a-(d->data));</p><p> a=d->data;</p><p> d=d->next;</p><p> printf("\t\t%d\t%d\n",a,b);</p&g
65、t;<p><b> s=s+b;</b></p><p><b> } </b></p><p> x=(float)(s*1.0)/j;</p><p> printf("平均尋道時(shí)間:%.2f\n",x);</p><p><b> }&
66、lt;/b></p><p> (4).循環(huán)掃描算法(CSCAN)</p><p> void CSCAN()//循環(huán)掃描算法</p><p><b> {</b></p><p> struct node *p,*q,*head;</p><p> struct node *m,
67、*n,*first;</p><p> int min=1000,a=100,b=0,j=0,s=0;//j,x,y:計(jì)數(shù) a:當(dāng)前磁道號(hào) s:時(shí)間求和 b:?jiǎn)蝹€(gè)計(jì)差 x:平均尋道時(shí)間</p><p><b> float x;</b></p><p> p=q=head=creat();</p>
68、<p> m=n=first=NULL;</p><p> while(q!=NULL&&q->data!=0)//計(jì)算一共多少磁道</p><p><b> {</b></p><p><b> j++;</b></p><p> q=q->next
69、;</p><p><b> }</b></p><p> printf("總共的磁道數(shù):j=%d\n",j);</p><p> if (p==NULL)</p><p> printf("空鏈表");</p><p><b> els
70、e</b></p><p><b> {</b></p><p> while(p!=NULL&&p->data!=0)//找最小的磁道號(hào)記為min,并刪除原節(jié)點(diǎn)</p><p><b> {</b></p><p> if (min>(p->d
71、ata))</p><p><b> {</b></p><p> min=p->data;</p><p><b> }</b></p><p><b> else</b></p><p> p=p->next;</p>
72、;<p><b> }</b></p><p> if (min==q->data)//刪除第一個(gè)節(jié)點(diǎn)</p><p><b> {</b></p><p> q=p->next;</p><p><b> free(p);</b></
73、p><p> p=q;head=p;</p><p><b> }//x=p=q;</b></p><p> else//刪除其他節(jié)點(diǎn)</p><p><b> {</b></p><p><b> q=p=head;</b></p>
74、<p> while((q->data!=min)&&(q->data!=0))</p><p><b> {</b></p><p><b> p=q;</b></p><p> q=q->next;</p><p><b> }&
75、lt;/b></p><p> if(q->data==min)</p><p><b> {</b></p><p> p->next=q->next;</p><p><b> free(q);</b></p><p><b>
76、 }</b></p><p><b> p=q=head;</b></p><p><b> }</b></p><p><b> }</b></p><p> n=m=first=(struct node *)malloc(sizeof(struct no
77、de)); //排序鏈表</p><p> m->data=min;</p><p> n=first=m;</p><p><b> min=1000;</b></p><p> printf("排序后為:\n");///對(duì)了</p><p> for (in
78、t i=2;i<=j;i++) //排序</p><p><b> { </b></p><p> while(p!=NULL&&p->data!=0)//找最小的磁道號(hào)記為min,并刪除原節(jié)點(diǎn)</p><p><b> {</b></p><p> if (
79、min>(p->data))</p><p><b> {</b></p><p> min=p->data;</p><p><b> p=head;</b></p><p><b> }</b></p><p><b&
80、gt; else</b></p><p> p=p->next;</p><p><b> }</b></p><p><b> p=q=head;</b></p><p> if (min==q->data)//刪除第一個(gè)節(jié)點(diǎn)</p><p&g
81、t;<b> {</b></p><p> q=p->next;</p><p><b> free(p);</b></p><p> p=q;head=p;</p><p><b> }//x=p=q;</b></p><p> el
82、se//刪除其他節(jié)點(diǎn)</p><p><b> {</b></p><p><b> q=p=head;</b></p><p> while((q->data!=min)&&(q->data!=0))</p><p><b> {</b>&
83、lt;/p><p><b> p=q;</b></p><p> q=q->next;</p><p><b> }</b></p><p> if(q->data==min)</p><p><b> {</b></p>
84、<p> p->next=q->next;</p><p><b> free(q);</b></p><p><b> }</b></p><p><b> p=q=head;</b></p><p><b> }</b>
85、;</p><p> m=(struct node *)malloc(sizeof(struct node));</p><p> n->next=m;</p><p> m->data=min;</p><p><b> n=m;</b></p><p> m->ne
86、xt=NULL;</p><p><b> min=1000;</b></p><p><b> }</b></p><p> m=n=first;</p><p> while(m!=NULL&&m->data!=0) </p><p><
87、;b> { </b></p><p> printf("%d\n",m->data); </p><p> m=m->next; </p><p> } //排序(輸出)終于對(duì)了!?。。。。?</p><p> p=q=head=m=n=first;</p>
88、<p> printf("被訪問(wèn)的下一個(gè)磁道\t移動(dòng)距離\n");</p><p> while(m!=NULL&&m->data!=0)//找大于100的磁道</p><p><b> {</b></p><p> if ((m->data)>=a)// //將原鏈表分為
89、兩個(gè)鏈表(大于100,小于100)</p><p><b> {</b></p><p><b> first=m;</b></p><p><b> p=n;</b></p><p> p->next=NULL;</p><p><
90、b> n=first;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> n=m;</b></p><p> m=n->next;</p><p>
91、 } ///哈哈哈!分成兩個(gè)鏈表了?。。?!</p><p> m=n=first;</p><p> while(m!=NULL&&m->data!=0)</p><p><b> {</b></p><p> b=abs(a-(m->data));<
92、/p><p> a=m->data;</p><p> m=m->next;</p><p> printf("\t\t%d\t%d\n",a,b);</p><p><b> s=s+b;</b></p><p><b> } </b&
93、gt;</p><p> while(q!=NULL&&p->data!=0)</p><p><b> {</b></p><p> b=abs(a-(q->data));</p><p> a=q->data;</p><p> q=q->ne
94、xt;</p><p> printf("\t\t%d\t%d\n",a,b);</p><p><b> s=s+b;</b></p><p><b> }</b></p><p> x=(float)(s*1.0)/j;</p><p> p
95、rintf("平均尋道時(shí)間:%.2f\n",x);</p><p><b> }</b></p><p> 四、測(cè)試數(shù)據(jù)及程序運(yùn)行情況</p><p> 1.先來(lái)先服務(wù)(FCFS)</p><p> 2.最短尋道時(shí)間(SSTF)</p><p> 3.掃描算法(SCA
96、N)</p><p> 4.循環(huán)掃描算法(CSCAN)</p><p> 五、實(shí)驗(yàn)過(guò)程中出現(xiàn)的問(wèn)題及解決方法</p><p> 實(shí)驗(yàn)過(guò)程中完全采用鏈表進(jìn)行,因此代碼較多,遇到的問(wèn)題也不少,主要有以下幾點(diǎn):</p><p><b> 六、參考文獻(xiàn)</b></p><p> 《計(jì)算機(jī)操作系統(tǒng)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 磁盤調(diào)度課程設(shè)計(jì)報(bào)告
- 磁盤調(diào)度課程設(shè)計(jì)
- 磁盤調(diào)度算法程序課程設(shè)計(jì)報(bào)告
- 磁盤調(diào)度算法程序課程設(shè)計(jì)報(bào)告
- 磁盤調(diào)度算法程序課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)---磁盤調(diào)度報(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)告
- 課程設(shè)計(jì)報(bào)告--磁盤調(diào)度算法的模擬實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤調(diào)度算法
- c語(yǔ)言課程設(shè)計(jì)報(bào)告
- c語(yǔ)言課程設(shè)計(jì)報(bào)告
- c語(yǔ)言課程設(shè)計(jì)報(bào)告
- c語(yǔ)言課程設(shè)計(jì)報(bào)告
- 磁盤調(diào)度算法課程設(shè)計(jì)--模擬磁盤調(diào)度算法系統(tǒng)的設(shè)計(jì)
- c語(yǔ)言語(yǔ)言課程設(shè)計(jì)報(bào)告
- c語(yǔ)言課程設(shè)計(jì)報(bào)告模版
- c語(yǔ)言課程設(shè)計(jì)實(shí)踐報(bào)告
評(píng)論
0/150
提交評(píng)論