版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于靜態(tài)優(yōu)先權(quán)和響應(yīng)比的進(jìn)程管理系統(tǒng)的設(shè)計(jì)課程設(shè)計(jì)報(bào)告(本科)基于靜態(tài)優(yōu)先權(quán)和響應(yīng)比的進(jìn)程管理系統(tǒng)的設(shè)計(jì)課程:操作系統(tǒng)課程設(shè)計(jì)學(xué)號(hào):姓名:班級(jí):教師:時(shí)間:計(jì)算機(jī)科學(xué)與技術(shù)系設(shè)計(jì)名稱:基于靜態(tài)優(yōu)先權(quán)和響應(yīng)比的進(jìn)程管理系統(tǒng)的設(shè)計(jì)設(shè)計(jì)內(nèi)容、目的與要求:本課程設(shè)計(jì)的目的是:加深對(duì)進(jìn)程概念及進(jìn)程管理各部分內(nèi)容的理解;熟悉靜態(tài)優(yōu)先權(quán)和響應(yīng)比兩種進(jìn)程調(diào)度算法。本課程設(shè)計(jì)的要求是:(1)設(shè)計(jì)一個(gè)完整的進(jìn)程調(diào)度系統(tǒng),系統(tǒng)中至少包括5個(gè)進(jìn)程;(2)定義pcb;(3)采用鏈表管理就緒隊(duì)列;(4)結(jié)果要能夠顯示出進(jìn)程的調(diào)度序列及進(jìn)入系統(tǒng)的時(shí)間、運(yùn)行時(shí)間等必要信息。(5)設(shè)計(jì)的輸入數(shù)據(jù)要能體現(xiàn)算法的思想。計(jì)劃與進(jìn)度安
2、排:6月7日 按照課程設(shè)計(jì)要求建立流程圖,架起大概框架6月8日到12日 輸入主函數(shù)和各個(gè)過程的程序6月13日到20日 調(diào)試程序并記錄調(diào)試中的問題,努力解決6月21日到25日 系統(tǒng)測(cè)試,演示設(shè)計(jì)成果,將調(diào)試結(jié)果截圖保留下來6月26日到30日 整理完善課程設(shè)計(jì)說明書設(shè)計(jì)過程、步驟(可加頁(yè)):進(jìn)程創(chuàng)建模塊 此模塊用來創(chuàng)建進(jìn)程實(shí)體,設(shè)置進(jìn)程的到達(dá)時(shí)間、服務(wù)時(shí)間、開始時(shí)間。 就緒隊(duì)列模塊 此模塊用鏈?zhǔn)疥?duì)列來實(shí)現(xiàn),用來存放已經(jīng)創(chuàng)建的進(jìn)程,為下面的兩個(gè)模塊來服務(wù)。 靜態(tài)優(yōu)先權(quán)模塊 此模塊是先進(jìn)先出算法的實(shí)現(xiàn)模塊,此模塊遍歷模塊中的就緒隊(duì)列來找到到達(dá)時(shí)間的從小到的大的序列。 響應(yīng)比模塊 此模塊是短進(jìn)程優(yōu)先調(diào)度
3、算法的實(shí)現(xiàn)模塊,此模塊遍歷中的就緒隊(duì)列來找到服務(wù)時(shí)間從小打到的序列。開始創(chuàng)建進(jìn)程輸入進(jìn)程名稱、大小、創(chuàng)建時(shí)間、服務(wù)時(shí)間就緒隊(duì)列查看選擇調(diào)度算法(fcfs/spf)輸出結(jié)果結(jié)束程序源代碼如下: /基于靜態(tài)優(yōu)先權(quán)和響應(yīng)比的進(jìn)程管理系統(tǒng)的設(shè)計(jì)#include #include #include #include#define false 0#define true 1/定義鏈表的結(jié)構(gòu)體typedef struct char id20;/進(jìn)程名稱int f_priority;/初始優(yōu)先權(quán)int arrive_time;/到達(dá)時(shí)間int service_time;/服務(wù)時(shí)間int start_time;
4、/開始時(shí)間int finish_time;/完成時(shí)間int wait_time;/等待時(shí)間float priority;/響應(yīng)比(優(yōu)先權(quán))datatype;/15/定義鏈表 typedef struct nodedatatype data;struct node * prior;/前一節(jié)點(diǎn)指針struct node * next;/后一節(jié)點(diǎn)指針 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)建進(jìn)程*n);printf(t*n);head=enter();system(cls);break;case 2:printf(t*n);printf(t*顯示就緒隊(duì)列*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)比的進(jìn)程管理系統(tǒng)nn);printf(t=n);/80printf(t 1.創(chuàng)建進(jìn)程隊(duì)列n);printf(t
7、2.顯示就緒隊(duì)列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請(qǐng)選擇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到達(dá)時(shí)間:);scanf(%d,&p-data.arrive_time);printf(%st,t服務(wù)時(shí)間:);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;/*/*顯示進(jìn)程隊(duì)列*/*void display(linklist head)listnode *p;if(head=null|head-next=null) printf(nt空隊(duì)列 任意鍵返回主菜單);getchar();system(cls);return;p=head-next;printf(nt* 以下為隊(duì)列
9、信息*); printf(nt進(jìn)程名t初始優(yōu)先權(quán)t到達(dá)時(shí)間t服務(wù)時(shí)間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)前時(shí)間為0int tim
10、e=0;/假設(shè)未進(jìn)程滿足條件bool have=false;/180listnode *p,*q,*rear,*m,*n,*z;if(head=null|head-next=null) printf(nt空隊(duì)列 任意鍵返回主菜單);getchar();system(cls);return;/創(chuàng)建一個(gè)新的鏈表用來存儲(chǔ)靜態(tài)優(yōu)先權(quán)算法后得到的執(zhí)行隊(duì)列l(wèi)inklist list_static=(listnode *)malloc(sizeof(listnode);rear=list_static;p=(listnode *)malloc(sizeof(listnode);/取得鏈表節(jié)點(diǎn)數(shù)p=head-
11、next;/190while(p!=null)size+;p=p-next;p=head-next;printf(%d,size);/臨時(shí)指針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é)點(diǎn) 復(fù)制成qq-data=p-data;/進(jìn)程還未到
12、達(dá) 選出到達(dá)時(shí)間最小且優(yōu)先權(quán)最大的if(p-data.arrive_timetime)/同時(shí)到達(dá)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;/選出的進(jìn)程需要從原來的鏈表中刪除p=head-next;while(p!=null)/搜索到要?jiǎng)h除的節(jié)點(diǎn)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進(jìn)程名t初始優(yōu)先權(quán)t到達(dá)時(shí)間t服務(wù)時(shí)間t開始時(shí)間t完成時(shí)間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)前時(shí)間為0int time=0;/假設(shè)未進(jìn)程滿
17、足條件bool have=false;/325listnode *p,*q,*rear,*m,*n,*z;if(head=null|head-next=null) printf(nt空隊(duì)列 任意鍵返回主菜單);getchar();system(cls);return;/創(chuàng)建一個(gè)新的鏈表用來存儲(chǔ)高響應(yīng)比優(yōu)先權(quán)算法后得到的執(zhí)行隊(duì)列l(wèi)inklist list_rp=(listnode *)malloc(sizeof(listnode);rear=list_rp;p=(listnode *)malloc(sizeof(listnode);/取得鏈表結(jié)點(diǎn)數(shù)p=head-next;while(p!=nul
18、l)size+;p=p-next;p=head-next;printf(%d,size);/臨時(shí)指針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)比高的進(jìn)程if(rpqdata=p-data;/進(jìn)程還未到達(dá) 選出最先到達(dá)的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)/有進(jìn)程滿足z-data=q-data;z-data.start_time=time;el
20、se/未有進(jìn)程滿足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;/選出的進(jìn)程需要從原來的鏈表中刪除p=head-next;while(p!=null)/搜索到要?jiǎng)h除的節(jié)點(diǎn)/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進(jìn)程名t到達(dá)時(shí)間t服務(wù)時(shí)間t開始時(shí)間t完成時(shí)間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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全駕駛?cè)巳擞胸?zé)承諾書3篇
- 方管購(gòu)銷風(fēng)險(xiǎn)轉(zhuǎn)移條款3篇
- 工人與包工頭勞務(wù)合同3篇
- 推拿店加盟協(xié)議3篇
- 旅游場(chǎng)地租賃管理協(xié)議3篇
- 安徽設(shè)計(jì)行業(yè)設(shè)計(jì)師勞動(dòng)合同范本3篇
- 攪拌車買賣協(xié)議3篇
- 古典風(fēng)格大學(xué)建設(shè)協(xié)議
- 長(zhǎng)沙市二手房交易全程陪同合同
- 城市安防監(jiān)控系統(tǒng)安裝合同
- 期末測(cè)試模擬練習(xí) (含答案) 江蘇省蘇州市2024-2025學(xué)年統(tǒng)編版語(yǔ)文七年級(jí)上冊(cè)
- 品質(zhì)年度總結(jié)及來年計(jì)劃
- 學(xué)生體質(zhì)健康存在的主要問題及改進(jìn)措施
- 2024年執(zhí)業(yè)藥師資格繼續(xù)教育定期考試題庫(kù)(附含答案)
- 建筑幕墻工程檢測(cè)知識(shí)考試題庫(kù)500題(含答案)
- 鋼棚鋼結(jié)構(gòu)施工方案
- 新版第三類醫(yī)療器械分類目錄
- 安防主管崗位招聘面試題及回答建議(某大型集團(tuán)公司)2025年
- 《資治通鑒》導(dǎo)讀學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2024-2025學(xué)年一年級(jí)上冊(cè)數(shù)學(xué)人教版期末模擬練習(xí)題(含答案)
- 可降解包裝材料采購(gòu)合作合同
評(píng)論
0/150
提交評(píng)論