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

下載本文檔

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

文檔簡介

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

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

3、到服務(wù)時間從小打到的序列。開始創(chuàng)建進(jìn)程輸入進(jìn)程名稱、大小、創(chuàng)建時間、服務(wù)時間就緒隊(duì)列查看選擇調(diào)度算法(fcfs/spf)輸出結(jié)果結(jié)束程序源代碼如下: /基于靜態(tài)優(yōu)先權(quán)和響應(yīng)比的進(jìn)程管理系統(tǒng)的設(shè)計(jì)#include <stdio.h>#include <string.h>#include <stdlib.h>#include<stdbool.h>#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

4、;/到達(dá)時間int service_time;/服務(wù)時間int start_time;/開始時間int finish_time;/完成時間int wait_time;/等待時間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,

5、*z;/函數(shù)說明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&

6、quot;);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(

7、"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")

8、;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(52<sn&&sn<48) printf("nt輸入錯誤,重選0-4:"); sn=9; continue; else break;return sn;/101/*/*建立進(jìn)程隊(duì)列*/*linklist ente

9、r(void)linklist head=(listnode *)malloc(sizeof(listnode);listnode *p,*rear;char flag='y'rear=head;while(flag='y')p=(listnode *)malloc(sizeof(listnode);printf("%st","t請輸入進(jìn)程名id:");/120scanf("%s",p->data.id);printf("%st","t初始優(yōu)先權(quán):");sc

10、anf("%d",&p->data.f_priority);printf("%st","t到達(dá)時間:");scanf("%d",&p->data.arrive_time);printf("%st","t服務(wù)時間:");scanf("%d",&p->data.service_time);rear->next=p;p->prior=rear;/雙向鏈表rear=p;/判斷是否還繼續(xù)輸入新的flag='

11、;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

12、;printf("nt* 以下為隊(duì)列信息*"); printf("nt進(jìn)程名t初始優(yōu)先權(quán)t到達(dá)時間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);pr

13、intf("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 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("

14、cls");return;/創(chuàng)建一個新的鏈表用來存儲靜態(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);/臨時指針m=(listnode *)malloc(sizeof(list

15、node);m->data=head->next->data;q=(listnode *)malloc(sizeof(listnode);q->data=head->next->data;/最外層循環(huán) 選取新排列的鏈表 int i; for(i=1;i<=size;i+)have=false;/207/遍歷鏈表 挑選出符合條件的進(jìn)程while(p!=null)/如果當(dāng)前時間下 有進(jìn)程已到達(dá)if(p->data.arrive_time<=time)have=true;/如果其優(yōu)先權(quán)比原有優(yōu)先權(quán)大 則替換 選出其中優(yōu)先權(quán)最大的if(q->

16、data.f_priority<p->data.f_priority)/把p節(jié)點(diǎn) 復(fù)制成qq->data=p->data;/進(jìn)程還未到達(dá) 選出到達(dá)時間最小且優(yōu)先權(quán)最大的if(p->data.arrive_time>time)/同時到達(dá)if(m->data.arrive_time=p->data.arrive_time)/優(yōu)先權(quán)if(m->data.f_priority<p->data.f_priority)m->data=p->data;/224if(m->data.arrive_time>p->d

17、ata.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(li

18、stnode);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)程需要從原來的鏈表中刪除p=head->next;while(p!=null)/搜索到要刪除的節(jié)點(diǎn)if(strcmp(z->data

19、.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-&

20、gt;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á)時間t服務(wù)時間t開始時間t完成時間t");printf("n-n");while(p!=null)printf("%s",p->data.id);printf("t%d",p->data.f_priority);printf(&q

21、uot;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;

22、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è)未進(jìn)程滿足條件bool have=false;/325listnode *p,*q,*rear,*m,*n,*z;if(head=null|head->next=null) printf("nt空隊(duì)列 任意鍵返回主菜單"

23、);getchar();system("cls");return;/創(chuàng)建一個新的鏈表用來存儲高響應(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);/臨時指針m=(listnode *)mal

24、loc(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;i<=size;i+)have=false;/347/遍歷鏈表 挑選出符合條件的進(jìn)程while(p!=null)/如果當(dāng)前時間下 有進(jìn)程已到達(dá)if(p->data.arrive_time<=time)have=true;/比較響應(yīng)比 (等待時間/服務(wù)時間)+

25、1rp=(float)(time-p->data.arrive_time)/p->data.service_time)+1;rpq=(float)(time-q->data.arrive_time)/q->data.service_time)+1;/取其中響應(yīng)比高的進(jìn)程if(rpq<rp)q->data=p->data;/進(jìn)程還未到達(dá) 選出最先到達(dá)的if(p->data.arrive_time>time)if(m->data.arrive_time>p->data.arrive_time)m->data=p->

26、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

27、->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)程需要從原來的鏈表中刪除p=head->next;while(p!=nul

28、l)/搜索到要刪除的節(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á)時間t服務(wù)時間t開始時間t完成時間t響應(yīng)比");printf("n-n");while(p!=null)printf("%s",p->data.id);printf("t%d",p-&g

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論