基于靜態(tài)優(yōu)先權(quán)和響應(yīng)比的進程管理系統(tǒng)的設(shè)計課程設(shè)計報告_第1頁
基于靜態(tài)優(yōu)先權(quán)和響應(yīng)比的進程管理系統(tǒng)的設(shè)計課程設(shè)計報告_第2頁
基于靜態(tài)優(yōu)先權(quán)和響應(yīng)比的進程管理系統(tǒng)的設(shè)計課程設(shè)計報告_第3頁
基于靜態(tài)優(yōu)先權(quán)和響應(yīng)比的進程管理系統(tǒng)的設(shè)計課程設(shè)計報告_第4頁
基于靜態(tài)優(yōu)先權(quán)和響應(yīng)比的進程管理系統(tǒng)的設(shè)計課程設(shè)計報告_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基于靜態(tài)優(yōu)先權(quán)和響應(yīng)比的進程管理系統(tǒng)的設(shè)計課程設(shè)計報告(本科)基于靜態(tài)優(yōu)先權(quán)和響應(yīng)比的進程管理系統(tǒng)的設(shè)計課程:操作系統(tǒng)課程設(shè)計學(xué)號:姓名:班級:教師:時間:計算機科學(xué)與技術(shù)系設(shè)計名稱:基于靜態(tài)優(yōu)先權(quán)和響應(yīng)比的進程管理系統(tǒng)的設(shè)計設(shè)計內(nèi)容、目的與要求:本課程設(shè)計的目的是:加深對進程概念及進程管理各部分內(nèi)容的理解;熟悉靜態(tài)優(yōu)先權(quán)和響應(yīng)比兩種進程調(diào)度算法。本課程設(shè)計的要求是:(1)設(shè)計一個完整的進程調(diào)度系統(tǒng),系統(tǒng)中至少包括5個進程;(2)定義pcb;(3)采用鏈表管理就緒隊列;(4)結(jié)果要能夠顯示出進程的調(diào)度序列及進入系統(tǒng)的時間、運行時間等必要信息。(5)設(shè)計的輸入數(shù)據(jù)要能體現(xiàn)算法的思想。計劃與進度安

2、排:6月7日 按照課程設(shè)計要求建立流程圖,架起大概框架6月8日到12日 輸入主函數(shù)和各個過程的程序6月13日到20日 調(diào)試程序并記錄調(diào)試中的問題,努力解決6月21日到25日 系統(tǒng)測試,演示設(shè)計成果,將調(diào)試結(jié)果截圖保留下來6月26日到30日 整理完善課程設(shè)計說明書設(shè)計過程、步驟(可加頁):進程創(chuàng)建模塊 此模塊用來創(chuàng)建進程實體,設(shè)置進程的到達時間、服務(wù)時間、開始時間。 就緒隊列模塊 此模塊用鏈式隊列來實現(xiàn),用來存放已經(jīng)創(chuàng)建的進程,為下面的兩個模塊來服務(wù)。 靜態(tài)優(yōu)先權(quán)模塊 此模塊是先進先出算法的實現(xiàn)模塊,此模塊遍歷模塊中的就緒隊列來找到到達時間的從小到的大的序列。 響應(yīng)比模塊 此模塊是短進程優(yōu)先調(diào)度

3、算法的實現(xiàn)模塊,此模塊遍歷中的就緒隊列來找到服務(wù)時間從小打到的序列。開始創(chuàng)建進程輸入進程名稱、大小、創(chuàng)建時間、服務(wù)時間就緒隊列查看選擇調(diào)度算法(fcfs/spf)輸出結(jié)果結(jié)束程序源代碼如下: /基于靜態(tài)優(yōu)先權(quán)和響應(yīng)比的進程管理系統(tǒng)的設(shè)計#include #include #include #include#define false 0#define true 1/定義鏈表的結(jié)構(gòu)體typedef struct char id20;/進程名稱int f_priority;/初始優(yōu)先權(quán)int arrive_time;/到達時間int service_time;/服務(wù)時間int start_time;

4、/開始時間int finish_time;/完成時間int wait_time;/等待時間float priority;/響應(yīng)比(優(yōu)先權(quán))datatype;/15/定義鏈表 typedef struct nodedatatype data;struct node * prior;/前一節(jié)點指針struct node * next;/后一節(jié)點指針 22listnode,* linklist;linklist head,list_static,list_rp;listnode *p,*q,*m,*n,*rear,*z;/函數(shù)說明int menu_select();linklist enter(vo

5、id);void display(linklist head);void display_static(linklist head);void display_rp(linklist head);/30/主函數(shù)void main()for(;) switch(menu_select()case 1:printf(t*n);printf(t*創(chuàng)建進程*n);printf(t*n);head=enter();system(cls);break;case 2:printf(t*n);printf(t*顯示就緒隊列*n);printf(t*n);display(head);break;case 3:p

6、rintf(t*n);printf(t*靜態(tài)優(yōu)先權(quán)*n);printf(t*n);display_static(head);break;case 4:printf(t*n);printf(t*高響應(yīng)比優(yōu)先*n);printf(t*n);display_rp(head);break;case 0:printf(n謝謝使用!n);return;default :break;/68/*/菜單選擇函數(shù)程序/*int menu_select()int sn;printf(t基于靜態(tài)優(yōu)先權(quán)和響應(yīng)比的進程管理系統(tǒng)nn);printf(t=n);/80printf(t 1.創(chuàng)建進程隊列n);printf(t

7、2.顯示就緒隊列n);printf(t 3.靜態(tài)優(yōu)先權(quán)n);printf(t 4.高響應(yīng)比優(yōu)先n);printf(t 0.退出n);printf(t=n);printf(t請選擇04:);while(1) scanf(%d,&sn);/93 getchar(); if(52sn&sndata.id);printf(%st,t初始優(yōu)先權(quán):);scanf(%d,&p-data.f_priority);printf(%st,t到達時間:);scanf(%d,&p-data.arrive_time);printf(%st,t服務(wù)時間:);scanf(%d,&p-data.service_time);r

8、ear-next=p;p-prior=rear;/雙向鏈表rear=p;/判斷是否還繼續(xù)輸入新的flag=n;printf(nt繼續(xù)輸入嗎?(y/n);getchar();scanf(%c,&flag);/while()結(jié)束rear-next=null;return head;/*/*顯示進程隊列*/*void display(linklist head)listnode *p;if(head=null|head-next=null) printf(nt空隊列 任意鍵返回主菜單);getchar();system(cls);return;p=head-next;printf(nt* 以下為隊列

9、信息*); printf(nt進程名t初始優(yōu)先權(quán)t到達時間t服務(wù)時間t);printf(nt-n);while(p!=null)printf(t%s,p-data.id);printf(t%d,p-data.f_priority);printf(tt%d,p-data.arrive_time);printf(tt%d,p-data.service_time);printf(nt-n);p=p-next;getchar();system(cls);/*/*靜態(tài)優(yōu)先權(quán)算法*/*void display_static(linklist head)int size=0;/假設(shè)當(dāng)前時間為0int tim

10、e=0;/假設(shè)未進程滿足條件bool have=false;/180listnode *p,*q,*rear,*m,*n,*z;if(head=null|head-next=null) printf(nt空隊列 任意鍵返回主菜單);getchar();system(cls);return;/創(chuàng)建一個新的鏈表用來存儲靜態(tài)優(yōu)先權(quán)算法后得到的執(zhí)行隊列l(wèi)inklist list_static=(listnode *)malloc(sizeof(listnode);rear=list_static;p=(listnode *)malloc(sizeof(listnode);/取得鏈表節(jié)點數(shù)p=head-

11、next;/190while(p!=null)size+;p=p-next;p=head-next;printf(%d,size);/臨時指針m=(listnode *)malloc(sizeof(listnode);m-data=head-next-data;q=(listnode *)malloc(sizeof(listnode);q-data=head-next-data;/最外層循環(huán) 選取新排列的鏈表 int i; for(i=1;idata.arrive_timedata.f_prioritydata.f_priority)/把p節(jié)點 復(fù)制成qq-data=p-data;/進程還未到

12、達 選出到達時間最小且優(yōu)先權(quán)最大的if(p-data.arrive_timetime)/同時到達if(m-data.arrive_time=p-data.arrive_time)/優(yōu)先權(quán)if(m-data.f_prioritydata.f_priority)m-data=p-data;/224if(m-data.arrive_timep-data.arrive_time)m-data=p-data;p=p-next;/while循環(huán)結(jié)束z=(listnode *)malloc(sizeof(listnode);n=(listnode *)malloc(sizeof(listnode);if(h

13、ave=true)z-data=q-data;z-data.start_time=time;elsez-data=m-data;z-data.start_time=z-data.arrive_time;n=(listnode *)malloc(sizeof(listnode);n-data=z-data;n-data.finish_time=n-data.start_time+n-data.service_time;n-data.wait_time=n-data.start_time-time;time=n-data.finish_time;rear-next=n;if(i!=1)n-prio

14、r=rear;rear=n;/選出的進程需要從原來的鏈表中刪除p=head-next;while(p!=null)/搜索到要刪除的節(jié)點if(strcmp(z-data.id,p-data.id)=0)if(p-next!=null)p-prior-next=p-next;p-next-prior=p-prior;elsep-prior-next=null;free(p);break;p=p-next;if(head-next!=null)p=(listnode *)malloc(sizeof(listnode);p=head-next;q-data=head-next-data;m-data=

15、head-next-data;elsep=null;/for循環(huán)結(jié)束/276rear-next=null;rear=head;p=list_static-next;printf(nt* 非搶占靜態(tài)優(yōu)先權(quán)*); printf(n進程名t初始優(yōu)先權(quán)t到達時間t服務(wù)時間t開始時間t完成時間t);printf(n-n);while(p!=null)printf(%s,p-data.id);printf(t%d,p-data.f_priority);printf(tt%d,p-data.arrive_time);printf(tt%d,p-data.service_time);printf(tt%d,p

16、-data.start_time);printf(tt%d,p-data.finish_time);printf(n-n);z=(listnode *)malloc(sizeof(listnode);z-data=p-data;rear-next=z;z-prior=rear;rear=z;/300p=p-next;rear-next=null;getchar();system(cls);/*/*高響應(yīng)比優(yōu)先*/*void display_rp(linklist head)int size=0;float rp=0,rpq=0,rpm=0;/假設(shè)當(dāng)前時間為0int time=0;/假設(shè)未進程滿

17、足條件bool have=false;/325listnode *p,*q,*rear,*m,*n,*z;if(head=null|head-next=null) printf(nt空隊列 任意鍵返回主菜單);getchar();system(cls);return;/創(chuàng)建一個新的鏈表用來存儲高響應(yīng)比優(yōu)先權(quán)算法后得到的執(zhí)行隊列l(wèi)inklist list_rp=(listnode *)malloc(sizeof(listnode);rear=list_rp;p=(listnode *)malloc(sizeof(listnode);/取得鏈表結(jié)點數(shù)p=head-next;while(p!=nul

18、l)size+;p=p-next;p=head-next;printf(%d,size);/臨時指針m=(listnode *)malloc(sizeof(listnode);m-data=head-next-data;q=(listnode *)malloc(sizeof(listnode);q-data=head-next-data;/340 int i;/最外層循環(huán) 選取新排列的鏈表 for(i=1;idata.arrive_timedata.arrive_time)/p-data.service_time)+1;rpq=(float)(time-q-data.arrive_time)/

19、q-data.service_time)+1;/取其中響應(yīng)比高的進程if(rpqdata=p-data;/進程還未到達 選出最先到達的if(p-data.arrive_timetime)if(m-data.arrive_timep-data.arrive_time)m-data=p-data;p=p-next;/while循環(huán)結(jié)束z=(listnode *)malloc(sizeof(listnode);n=(listnode *)malloc(sizeof(listnode);if(have=true)/有進程滿足z-data=q-data;z-data.start_time=time;el

20、se/未有進程滿足z-data=m-data;z-data.start_time=z-data.arrive_time;n=(listnode *)malloc(sizeof(listnode);n-data=z-data;n-data.finish_time=n-data.start_time+n-data.service_time;n-data.priority=(float)(n-data.start_time-n-data.arrive_time)/n-data.service_time+1;time=n-data.finish_time;rear-next=n;if(i!=1)n-p

21、rior=rear;rear=n;/選出的進程需要從原來的鏈表中刪除p=head-next;while(p!=null)/搜索到要刪除的節(jié)點/390if(strcmp(z-data.id,p-data.id)=0)if(p-next!=null)p-prior-next=p-next;p-next-prior=p-prior;elsep-prior-next=null;free(p);break;p=p-next;if(head-next!=null)p=(listnode *)malloc(sizeof(listnode);p=head-next;q-data=head-next-data;

22、m-data=head-next-data;elsep=null;/for循環(huán)結(jié)束rear-next=null;rear=head;p=list_rp-next;printf(nt*高響應(yīng)比優(yōu)先*); printf(n進程名t到達時間t服務(wù)時間t開始時間t完成時間t響應(yīng)比);printf(n-n);while(p!=null)printf(%s,p-data.id);printf(t%d,p-data.arrive_time);printf(tt%d,p-data.service_time);printf(tt%d,p-data.start_time);printf(tt%d,p-data.finish_time);print

溫馨提示

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

評論

0/150

提交評論