版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 操作系統(tǒng)</b></p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> XX大學(xué) 計(jì)算機(jī)科學(xué)與教育軟件學(xué)院</p><p> 計(jì)算機(jī)系 12級(jí)計(jì)算機(jī)專業(yè)*班</p><p><b> 2015年1月8日</b></p>
2、;<p><b> 一、設(shè)計(jì)目的</b></p><p> 學(xué)習(xí)完《操作系統(tǒng)》課程后,進(jìn)行的一次全面的綜合訓(xùn)練,通過課程設(shè)計(jì),讓更好地掌握操作系統(tǒng)的原理及實(shí)現(xiàn)方法,加深對(duì)操作系統(tǒng)基礎(chǔ)理論和重要算法的理解,加強(qiáng)動(dòng)手能力。</p><p><b> 二、設(shè)計(jì)要求</b></p><p> 從課程設(shè)計(jì)的目的
3、出發(fā),通過設(shè)計(jì)工作的各個(gè)環(huán)節(jié),達(dá)到以下要求:兩人一組,每組從所給題目中任選一個(gè)(如自擬題目,需經(jīng)指導(dǎo)教師同意),每個(gè)學(xué)生必須獨(dú)立完成課程設(shè)計(jì),不能相互抄襲,同組者文檔不能相同;設(shè)計(jì)完成后,將所完成的工作交由指導(dǎo)教師檢查;要求寫出一份詳細(xì)的設(shè)計(jì)報(bào)告。</p><p><b> 三、設(shè)計(jì)內(nèi)容</b></p><p> 課題、處理機(jī)調(diào)度程序:選擇一個(gè)調(diào)度算法,實(shí)現(xiàn)處理機(jī)
4、調(diào)度。</p><p> 設(shè)計(jì)目的:在多道程序和多任務(wù)系統(tǒng)中,系統(tǒng)內(nèi)同時(shí)處于就緒狀態(tài)的進(jìn)程可能有若干個(gè)。也就是說能運(yùn)行的進(jìn)程數(shù)大于處理機(jī)個(gè)數(shù)。為了使系統(tǒng)中的進(jìn)程能有條不紊地工作,必須選用某種調(diào)度策略,選擇一進(jìn)程占用處理機(jī)。要求設(shè)計(jì)一個(gè)模擬處理機(jī)調(diào)度算法,以鞏固和加深處理機(jī)調(diào)度的概念。</p><p><b> 四、設(shè)計(jì)要求</b></p><p
5、> 1)進(jìn)程調(diào)度算法包括:時(shí)間片輪轉(zhuǎn)法,短作業(yè)優(yōu)先算法,動(dòng)態(tài)優(yōu)先級(jí)算法。</p><p><b> 2)可選擇進(jìn)程數(shù)量</b></p><p> 3)本程序包括三種算法,用C語言實(shí)現(xiàn),執(zhí)行時(shí)在主界面選擇算法(可用函數(shù)實(shí)現(xiàn))(進(jìn)程數(shù),運(yùn)行時(shí)間,優(yōu)先數(shù)由隨機(jī)函數(shù)產(chǎn)生)執(zhí)行,顯示結(jié)果。</p><p> 五、設(shè)計(jì)思路及算法思想</
6、p><p> 1、建立循環(huán)鏈。節(jié)點(diǎn)情況如下:</p><p> struct pcb</p><p><b> {</b></p><p> char id; //進(jìn)程標(biāo)識(shí)數(shù)</p><p> int arrive_time; //進(jìn)程的到達(dá)時(shí)間</p&g
7、t;<p> int run_time; //進(jìn)程運(yùn)行時(shí)間</p><p> int priority; //進(jìn)程優(yōu)先級(jí)數(shù)</p><p> int finish_time; //進(jìn)程完成時(shí)間</p><p> int cycling_time; //進(jìn)程周轉(zhuǎn)時(shí)間</p><p>
8、; float right_cycling_time;//帶權(quán)周轉(zhuǎn)時(shí)間</p><p> int backup_run_time; //備份進(jìn)程運(yùn)行時(shí)間</p><p> int back_priority; //備份進(jìn)程優(yōu)先級(jí)數(shù)</p><p> struct pcb *next;</p><p><b> };&
9、lt;/b></p><p> 注:進(jìn)程運(yùn)行在具體調(diào)度算法里會(huì)改變(減到零),在輸出時(shí)需要數(shù)出運(yùn)行時(shí)間所以要備份。優(yōu)先級(jí)數(shù)同理。</p><p> 2、通過循環(huán)鏈循環(huán)輸出,按具體的算法輸出響應(yīng)的節(jié)點(diǎn)。</p><p> 1)程序的總體結(jié)構(gòu)如下圖1.0 </p><p> 創(chuàng)建(進(jìn)程)循環(huán)鏈,初始化循環(huán)鏈(輸入進(jìn)程的相關(guān)信息),選
10、擇進(jìn)程調(diào)度算法退出,執(zhí)行所選擇的調(diào)度算法(輸出調(diào)度結(jié)果),銷毀循環(huán)鏈。</p><p><b> 圖1.0</b></p><p> 2)設(shè)計(jì)實(shí)現(xiàn)算法的主要思想如下圖1.1</p><p> 設(shè)置控制循環(huán)條件,進(jìn)程運(yùn)行時(shí)間不為零,執(zhí)行進(jìn)程,該進(jìn)程運(yùn)行時(shí)間減一(短作業(yè)優(yōu)先法的進(jìn)程運(yùn)行時(shí)間減至零),控制條件清零,指向下一進(jìn)程,該進(jìn)程運(yùn)行時(shí)間為
11、零,控制條件加一。</p><p><b> 圖1.1</b></p><p> 2.1)時(shí)間片輪轉(zhuǎn)算法詳細(xì)設(shè)計(jì)如下圖1.2</p><p> 進(jìn)程循環(huán)占用時(shí)間片,當(dāng)運(yùn)行時(shí)間為0退出循環(huán)。</p><p><b> 圖1.2</b></p><p> 2.2)動(dòng)態(tài)優(yōu)
12、先法詳細(xì)設(shè)計(jì)如下圖1.3</p><p> 優(yōu)先級(jí)最高的進(jìn)程用完一個(gè)時(shí)間片,運(yùn)行時(shí)間減1,優(yōu)先級(jí)加1,再執(zhí)行優(yōu)先級(jí)最高的進(jìn)程。</p><p><b> 圖1.3</b></p><p> 2.3)短作業(yè)優(yōu)先法詳細(xì)設(shè)計(jì)如下圖1.4</p><p> 運(yùn)行時(shí)間最短的進(jìn)程先執(zhí)行完,再執(zhí)行下一個(gè)運(yùn)行時(shí)間最短的進(jìn)程。&l
13、t;/p><p><b> 圖1.4</b></p><p> 六、程序設(shè)計(jì)的輸出結(jié)果</p><p><b> 1)時(shí)間片輪轉(zhuǎn)法</b></p><p><b> 圖1.5</b></p><p><b> 2)動(dòng)態(tài)優(yōu)先法</b&
14、gt;</p><p><b> 圖1.6</b></p><p><b> 3)短作業(yè)優(yōu)先法</b></p><p><b> 圖1.7</b></p><p><b> 七、程序代碼</b></p><p> #inc
15、lude<stdio.h></p><p> #include<malloc.h></p><p> #include<time.h></p><p> #include<stdlib.h> </p><p> #define N 5</p><p> stru
16、ct pcb</p><p><b> {</b></p><p> char id; //進(jìn)程標(biāo)識(shí)數(shù)</p><p> int arrive_time; //進(jìn)程的到達(dá)時(shí)間</p><p> int run_time; //進(jìn)程運(yùn)行時(shí)間</p>&l
17、t;p> int priority; //進(jìn)程優(yōu)先級(jí)數(shù)</p><p> int finish_time; //進(jìn)程完成時(shí)間</p><p> int cycling_time; //進(jìn)程周轉(zhuǎn)時(shí)間</p><p> float right_cycling_time;//帶權(quán)周轉(zhuǎn)時(shí)間</p><p>
18、 int backup_run_time; //備份進(jìn)程運(yùn)行時(shí)間</p><p> int back_priority; //備份進(jìn)程優(yōu)先級(jí)數(shù)</p><p> struct pcb *next;</p><p><b> };</b></p><p> pcb *creat_process(int);
19、 //創(chuàng)建進(jìn)程</p><p> void show_pcb(pcb *,int); //輸出進(jìn)程信息</p><p> void delete_pcb(pcb *);//刪除鏈表</p><p> void Round_Robin(pcb *,int); //時(shí)間片輪轉(zhuǎn)法</p><
20、;p> void Shortest_Job_First(pcb *,int); //短作業(yè)優(yōu)先法</p><p> void Dynamic_priority(pcb *,int); //動(dòng)態(tài)優(yōu)先法</p><p> //----------------------------------------------------------------------</p&
21、gt;<p> int main()</p><p><b> {</b></p><p> pcb *head;</p><p> int num;//進(jìn)程數(shù)</p><p> srand(int(time(0)));</p><p> int option,ch;
22、</p><p><b> do </b></p><p><b> { </b></p><p> num=rand()%N+1;</p><p> printf("創(chuàng)建的進(jìn)程數(shù): %d\n",num);</p><p> printf(&
23、quot;--------------------------------------\n");</p><p> printf("------請(qǐng)輸入對(duì)應(yīng)的數(shù)字選擇相應(yīng)的進(jìn)程調(diào)度算法-----\n"); </p><p> printf("------ 1 為時(shí)間片輪轉(zhuǎn)法調(diào)度 -------\n");
24、 </p><p> printf("------ 2 為動(dòng)態(tài)優(yōu)先級(jí)調(diào)度 -------\n"); </p><p> printf("------ 3 為短作業(yè)優(yōu)先 -------\n"); </p><p> printf(&qu
25、ot;------ 0 則退出 -------\n"); </p><p> printf("---------------------------------------\n");</p><p> printf("--請(qǐng)輸入數(shù)字選擇調(diào)度算法(有效數(shù)字0~3) : "); &
26、lt;/p><p> while(1) </p><p><b> { </b></p><p> scanf("%d",&option);</p><p> printf("---------------------------------------\n")
27、;</p><p> if(option!=0&&option!=1&&option!=2&&option!=3) </p><p> printf("----錯(cuò)誤! 請(qǐng)重新選擇調(diào)度算法(0~3) : \n"); </p><p><b> else </b>&l
28、t;/p><p><b> break; </b></p><p><b> } </b></p><p> switch (option) </p><p><b> { </b></p><p> case 0: printf(&qu
29、ot;---運(yùn)行結(jié)束---\n"); break; </p><p> case 1: printf("--------對(duì)進(jìn)程按時(shí)間片輪轉(zhuǎn)法調(diào)度--------\n"); </p><p> head=creat_process(num);</p><p> show_pcb(head,num);</p><
30、;p> printf("\n");</p><p> Round_Robin(head,num);</p><p> show_pcb(head,num);</p><p> printf("--------------------------------------\n");</p><p&
31、gt;<b> break; </b></p><p> case 2: printf("--------對(duì)進(jìn)程按動(dòng)態(tài)優(yōu)先級(jí)調(diào)度----------\n"); </p><p> head=creat_process(num);</p><p> show_pcb(head,num);</p>
32、<p> printf("\n");</p><p> Dynamic_priority(head,num);</p><p> show_pcb(head,num);</p><p> printf("--------------------------------------\n");</p>
33、<p><b> break; </b></p><p> case 3: printf("--------對(duì)進(jìn)程按短作業(yè)優(yōu)先調(diào)度----------\n"); </p><p> head=creat_process(num);</p><p> show_pcb(head,num);</
34、p><p> printf("\n");</p><p> Shortest_Job_First(head,num);</p><p> show_pcb(head,num);</p><p> printf("--------------------------------------\n");&
35、lt;/p><p><b> break; </b></p><p><b> }</b></p><p> delete_pcb(head);</p><p> printf("\n是否繼續(xù)---是(輸入1)否(輸入0) : "); </p><p&
36、gt;<b> while(1) </b></p><p><b> { </b></p><p> scanf("%d",&ch); </p><p> if(ch!=0&&ch!=1) </p><p> printf("
37、\n\n輸入錯(cuò)誤!是否繼續(xù)是(輸入1)否(輸入0) : "); </p><p><b> else </b></p><p><b> break; </b></p><p><b> } </b></p><p> printf("\n&qu
38、ot;);</p><p> printf("--------------------------------------\n");</p><p> }while(ch==1); </p><p><b> return 0;</b></p><p><b> }</b>
39、;</p><p> //-----------------------------------------------------------------------</p><p> pcb *creat_process(int num) //創(chuàng)建進(jìn)程</p><p><b> {</b></p><p>
40、 pcb *h,*p;</p><p> h=(struct pcb*)malloc(sizeof(struct pcb));</p><p><b> p=h;</b></p><p> for(int i=0;i<num;i++)</p><p><b> {</b></p
41、><p> p->id='A'+i;</p><p> p->arrive_time=0;//所有進(jìn)程到達(dá)時(shí)間為0</p><p> p->run_time=rand()%N+1;</p><p> p->backup_run_time=p->run_time; //備份運(yùn)行時(shí)間&
42、lt;/p><p> p->priority=rand()%N+1;</p><p> p->back_priority=p->priority; //備份進(jìn)程優(yōu)先級(jí)數(shù)</p><p> p->finish_time=0;</p><p> p->cycling_time=0;</p>&l
43、t;p> p->right_cycling_time=0.0000;</p><p> if(i<num-1)</p><p><b> {</b></p><p> p->next=(struct pcb*)malloc(sizeof(struct pcb));</p><p> p=
44、p->next;</p><p><b> }</b></p><p><b> }</b></p><p> p->next=h;</p><p><b> return h;</b></p><p><b> }<
45、;/b></p><p> //-----------------------------------------------------------------</p><p> void show_pcb(pcb *h,int num) //輸出進(jìn)程信息</p><p><b> {</b></p><p&
46、gt; pcb *p,*q;</p><p> float cycling_time=0,right_cycling_time=0,average_cycling_time,average_right_cycling_time;</p><p><b> p=h;</b></p><p> printf("進(jìn)程id 到達(dá)時(shí)間
47、 運(yùn)行時(shí)間 優(yōu)先級(jí)數(shù) 完成時(shí)間 周轉(zhuǎn)時(shí)間 帶權(quán)周轉(zhuǎn)時(shí)間\n");</p><p><b> do</b></p><p><b> {</b></p><p> p->cycling_time=p->finish_time - p->arrive_time; </p>
48、;<p> cycling_time += p->cycling_time;</p><p> p->right_cycling_time=float(p->cycling_time) /float( p->backup_run_time);</p><p> right_cycling_time += p->right_cycling_t
49、ime;</p><p> printf("%2c %8d %10d %9d %10d %9d %13f\n",p->id,p->arrive_time,p->backup_run_time,p->back_priority,p->finish_time,p->cycling_time,p->right_cycling_time);</p>
50、;<p> p=p->next; </p><p> }while(p!=h);</p><p> printf("--------------------------------------\n");</p><p> average_cycling_time = cycling_time / float(num)
51、;</p><p> average_right_cycling_time = right_cycling_time / float(num);</p><p> printf("平均周轉(zhuǎn)時(shí)間: %f\n",average_cycling_time);</p><p> printf("平均帶權(quán)周轉(zhuǎn)時(shí)間: %f\n",a
52、verage_right_cycling_time);</p><p><b> }</b></p><p> //--------------------------------------------------------</p><p> void delete_pcb(pcb *h) //刪除鏈表</p><
53、p><b> {</b></p><p> pcb *p,*q;</p><p><b> p=h;</b></p><p> q=h->next;</p><p> while(p!=q)</p><p><b> {</b>&
54、lt;/p><p> p->next=q->next;</p><p><b> free(q);</b></p><p> q=p->next;</p><p><b> }</b></p><p><b> free(p);</b&
55、gt;</p><p><b> }</b></p><p> //-----------------------------------------------</p><p> void Round_Robin(pcb *h,int num) //時(shí)間片輪轉(zhuǎn)法</p><p><b> {<
56、/b></p><p> printf(" -----具體調(diào)度情況如下-----\n");</p><p><b> pcb *p;</b></p><p><b> p=h;</b></p><p> int i=1,j=1;</p><
57、p><b> do</b></p><p><b> {</b></p><p> if(p->run_time==0) </p><p><b> i++; </b></p><p><b> else</b></
58、p><p><b> {</b></p><p> printf("時(shí)間片%2d--->當(dāng)前運(yùn)行進(jìn)程 %c\n",j++,p->id);</p><p> p->run_time--;</p><p> if(p->run_time==0)</p><
59、p> p->finish_time=j-1; //進(jìn)程結(jié)束時(shí)間</p><p><b> i=0;</b></p><p><b> }</b></p><p> p=p->next;</p><p> }while(i!=num);</p><p
60、><b> }</b></p><p> //-----------------------------------------</p><p> void Shortest_Job_First(pcb *h,int num) //短作業(yè)優(yōu)先法</p><p><b> {</b></p>
61、<p> printf(" -----具體調(diào)度情況如下-----\n");</p><p> pcb *p,*q;</p><p><b> p=h;</b></p><p> q=h->next;</p><p> int i=1,j=1;</p><
62、;p><b> do</b></p><p><b> {</b></p><p> q=p->next;</p><p> if(p->run_time==0)</p><p><b> i++; </b></p><p
63、><b> else</b></p><p><b> {</b></p><p> while(q!=p)</p><p><b> {</b></p><p> if(q->run_time!=0)</p><p> if(
64、p->run_time > q->run_time)</p><p><b> p=q;</b></p><p> q=q->next;</p><p><b> }</b></p><p> while(p->run_time!=0)</p>&
65、lt;p><b> {</b></p><p> printf("時(shí)間片%2d--->當(dāng)期運(yùn)行進(jìn)程 %c\n",j++,p->id);</p><p> p->run_time--;</p><p><b> }</b></p><p> p-
66、>finish_time=j-1; //進(jìn)程結(jié)束時(shí)間</p><p><b> i=0;</b></p><p><b> }</b></p><p> p=p->next;</p><p> }while(i!=num);</p><p><
67、b> }</b></p><p> //-------------------------------------------</p><p> void Dynamic_priority(pcb *h,int num) //動(dòng)態(tài)優(yōu)先法</p><p><b> {</b></p><p>
68、printf(" -----具體調(diào)度情況如下-----\n");</p><p> pcb *p,*q,*f;</p><p><b> p=h;</b></p><p> int i=1,j=1;</p><p><b> do</b></p><
69、;p><b> {</b></p><p> q=p->next;</p><p> if(p->run_time==0)</p><p><b> i++; </b></p><p><b> else</b></p><p
70、><b> {</b></p><p> while(q!=p)</p><p><b> {</b></p><p> if(q->run_time!=0)</p><p> if((p->priority > q->priority) )</p&g
71、t;<p><b> p=q;</b></p><p> q=q->next;</p><p><b> }</b></p><p> printf("時(shí)間片%2d--->當(dāng)前運(yùn)行進(jìn)程 %c ---當(dāng)前優(yōu)先等級(jí): %d\n",j++,p->id,p->pri
72、ority);</p><p> p->run_time--;</p><p> p->priority++;</p><p> /*f=p->next;</p><p> while(p!=f)</p><p><b> {</b></p><
73、;p> if(f->run_time!=0)</p><p> f->priority--;</p><p> f=f->next;</p><p><b> }*/</b></p><p> p->finish_time=j-1; //進(jìn)程結(jié)束時(shí)間</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告--操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 《操作系統(tǒng)》課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)-- 操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告2014217151
- 《操作系統(tǒng)原理》課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告2
- 操作系統(tǒng)程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告-操作系統(tǒng)模擬實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)---磁盤調(diào)度報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 操作系統(tǒng)程序調(diào)度課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論