




已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于靜態(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)度安排:6月7日 按照課程設(shè)計(jì)要求建立流程圖,架起大概框架6月8日到12日 輸入主函數(shù)和各個(gè)過(guò)程的程序6月13日到20日 調(diào)試程序并記錄調(diào)試中的問(wèn)題,努力解決6月21日到25日 系統(tǒng)測(cè)試,演示設(shè)計(jì)成果,將調(diào)試結(jié)果截圖保留下來(lái)6月26日到30日 整理完善課程設(shè)計(jì)說(shuō)明書(shū)設(shè)計(jì)過(guò)程、步驟(可加頁(yè)):進(jìn)程創(chuàng)建模塊 此模塊用來(lái)創(chuàng)建進(jìn)程實(shí)體,設(shè)置進(jìn)程的到達(dá)時(shí)間、服務(wù)時(shí)間、開(kāi)始時(shí)間。 就緒隊(duì)列模塊 此模塊用鏈?zhǔn)疥?duì)列來(lái)實(shí)現(xiàn),用來(lái)存放已經(jīng)創(chuàng)建的進(jìn)程,為下面的兩個(gè)模塊來(lái)服務(wù)。 靜態(tài)優(yōu)先權(quán)模塊 此模塊是先進(jìn)先出算法的實(shí)現(xiàn)模塊,此模塊遍歷模塊中的就緒隊(duì)列來(lái)找到到達(dá)時(shí)間的從小到的大的序列。 響應(yīng)比模塊 此模塊是短進(jìn)程優(yōu)先調(diào)度算法的實(shí)現(xiàn)模塊,此模塊遍歷中的就緒隊(duì)列來(lái)找到服務(wù)時(shí)間從小打到的序列。開(kāi)始創(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;/開(kāi)始時(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ù)說(shuō)明int menu_select();linklist enter(void);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:printf(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 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);rear-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ì)列信息*); 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 time=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è)新的鏈表用來(lái)存儲(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-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)程還未到達(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(have=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-prior=rear;rear=n;/選出的進(jìn)程需要從原來(lái)的鏈表中刪除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=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開(kāi)始時(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-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)程滿足條件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è)新的鏈表用來(lái)存儲(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!=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;/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)/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;else/未有進(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-prior=rear;rear=n;/選出的進(jìn)程需要從原來(lái)的鏈表中刪除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;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開(kāi)始時(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. 本站所有資源如無(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ù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年信息技術(shù)教學(xué)考試試卷及答案
- 2025年國(guó)際貿(mào)易實(shí)務(wù)職業(yè)考題及答案
- 2025年可持續(xù)發(fā)展與環(huán)境教育考試試題及答案
- 萬(wàn)達(dá)安全考試題庫(kù)及答案
- 一級(jí)語(yǔ)文通知試題及答案
- 裝修拆墻施工合同協(xié)議書(shū)
- 廣東省東莞市翰林實(shí)驗(yàn)學(xué)校2024-2025學(xué)年高一下學(xué)期期中考試數(shù)學(xué)試題(解析)
- 傳染病預(yù)防與健康管理宣講
- 患者的護(hù)理管理
- 城市應(yīng)急供電系統(tǒng)升級(jí)補(bǔ)充協(xié)議
- 2025年4月自考00242民法學(xué)試題及答案含評(píng)分標(biāo)準(zhǔn)
- 2025年氫化丁晴橡膠發(fā)展現(xiàn)狀及市場(chǎng)前景趨勢(shì)分析
- DB65-T 4623-2022 分散式風(fēng)電接入電力系統(tǒng)管理規(guī)范
- 退休終止勞動(dòng)合同協(xié)議書(shū)
- 2024譯林版七年級(jí)英語(yǔ)下冊(cè)期中復(fù)習(xí):Unit1-Unit4詞組講義
- 護(hù)士助教面試題及答案
- 第18課《井岡翠竹》課件-2024-2025學(xué)年統(tǒng)編版語(yǔ)文七年級(jí)下冊(cè)
- 第16課《有為有不為》公開(kāi)課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 【MOOC】《思想道德與法治》(東南大學(xué))章節(jié)中國(guó)大學(xué)慕課答案
- 【MOOC】以案說(shuō)法-中南財(cái)經(jīng)政法大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 卜算子-送鮑浩然之浙東課件
評(píng)論
0/150
提交評(píng)論