基于静态优先权和响应比的进程管理系统的设计课程设计报告 精品Word格式文档下载.docx
- 文档编号:834819
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:22
- 大小:272.48KB
基于静态优先权和响应比的进程管理系统的设计课程设计报告 精品Word格式文档下载.docx
《基于静态优先权和响应比的进程管理系统的设计课程设计报告 精品Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于静态优先权和响应比的进程管理系统的设计课程设计报告 精品Word格式文档下载.docx(22页珍藏版)》请在冰点文库上搜索。
此模块是短进程优先调度算法的实现模块,此模块遍历中的就绪队列来找到服务时间从小打到的序列。
程序源代码如下:
//基于静态优先权和响应比的进程管理系统的设计
#include<
stdio.h>
string.h>
stdlib.h>
#include<
stdbool.h>
#definefalse0
#definetrue1
//定义链表的结构体
typedefstruct{
charid[20];
//进程名称
intf_priority;
//初始优先权
intarrive_time;
//到达时间
intservice_time;
//服务时间
intstart_time;
//开始时间
intfinish_time;
//完成时间
intwait_time;
//等待时间
floatpriority;
//响应比(优先权)
}datatype;
//15
//定义链表
typedefstructnode{
datatypedata;
structnode*prior;
//前一节点指针
structnode*next;
//后一节点指针22
}listnode,*linklist;
linklisthead,list_static,list_rp;
listnode*p,*q,*m,*n,*rear,*z;
//函数说明
intmenu_select();
linklistenter(void);
voiddisplay(linklisthead);
voiddisplay_static(linklisthead);
voiddisplay_rp(linklisthead);
//30
//主函数
voidmain()
{
for(;
;
){
switch(menu_select())
{
case1:
printf("
\t*******************************\n"
);
\t************创建进程***********\n"
head=enter();
system("
cls"
break;
case2:
\t**********显示就绪队列*********\n"
display(head);
case3:
\t***********静态优先权**********\n"
display_static(head);
case4:
\t**********高响应比优先*********\n"
display_rp(head);
case0:
\n谢谢使用!
\n"
return;
default:
break;
//68
}
}
}
//****************
//菜单选择函数程序
intmenu_select()
intsn;
printf("
\t基于静态优先权和响应比的进程管理系统\n\n"
\t==========================================\n"
//80
\t1.创建进程队列\n"
\t2.显示就绪队列\n"
\t3.静态优先权\n"
\t4.高响应比优先\n"
\t0.退出\n"
\t请选择0~4:
"
while
(1){
scanf("
%d"
&
sn);
//93
getchar();
if(52<
sn&
&
sn<
48)
\n\t输入错误,重选0-4:
sn=9;
continue;
else{
}
returnsn;
//101
//**建立进程队列**
linklistenter(void)
linklisthead=(listnode*)malloc(sizeof(listnode));
listnode*p,*rear;
charflag='
y'
rear=head;
while(flag=='
)
{
p=(listnode*)malloc(sizeof(listnode));
printf("
%s\t"
"
\t请输入进程名id:
//120
%s"
p->
data.id);
\t初始优先权:
p->
data.f_priority);
\t到达时间:
data.arrive_time);
\t服务时间:
data.service_time);
rear->
next=p;
p->
prior=rear;
//双向链表
rear=p;
//判断是否还继续输入新的
flag='
n'
\n\t继续输入吗?
(y/n)"
%c"
flag);
}//while()结束
rear->
next=NULL;
returnhead;
//******************
//***显示进程队列***
voiddisplay(linklisthead)
listnode*p;
if(head==NULL||head->
next==NULL){printf("
\n\t空队列任意键返回主菜单"
getchar();
system("
return;
p=head->
next;
\n\t***************以下为队列信息************"
\n\t进程名\t初始优先权\t到达时间\t服务时间\t"
\n\t----------------------------------------------------\n"
while(p!
=NULL)
\t%s"
\t%d"
\t\t%d"
p=p->
getchar();
system("
//**静态优先权算法**
voiddisplay_static(linklisthead)
{
intsize=0;
//假设当前时间为0
inttime=0;
//假设未进程满足条件
boolhave=false;
//180
listnode*p,*q,*rear,*m,*n,*z;
//创建一个新的链表用来存储静态优先权算法后得到的执行队列
linklistlist_static=(listnode*)malloc(sizeof(listnode));
rear=list_static;
p=(listnode*)malloc(sizeof(listnode));
//取得链表节点数
//190
=NULL){
size++;
size);
//临时指针
m=(listnode*)malloc(sizeof(listnode));
m->
data=head->
next->
data;
q=(listnode*)malloc(sizeof(listnode));
q->
//最外层循环选取新排列的链表
inti;
for(i=1;
i<
=size;
i++){
have=false;
//207
//遍历链表挑选出符合条件的进程
while(p!
//如果当前时间下有进程已到达
if(p->
data.arrive_time<
=time){
have=true;
//如果其优先权比原有优先权大则替换选出其中优先权最大的
if(q->
data.f_priority<
data.f_priority){
//把p节点复制成q
q->
data=p->
}
//进程还未到达选出到达时间最小且优先权最大的
data.arrive_time>
time){
//同时到达
if(m->
data.arrive_time==p->
data.arrive_time){
//优先权
if(m->
m->
}//224
m->
p=p->
}//while循环结束
z=(listnode*)malloc(sizeof(listnode));
n=(listnode*)malloc(sizeof(listnode));
if(have==true){
z->
data=q->
data.start_time=time;
}else{
data=m->
data.start_time=z->
data.arrive_time;
n->
data=z->
data.finish_time=n->
data.start_time+n->
data.service_time;
data.wait_time=n->
data.start_time-time;
time=n->
data.finish_time;
next=n;
if(i!
=1){
n->
rear=n;
//选出的进程需要从原来的链表中删除
p=head->
//搜索到要删除的节点
if(strcmp(z->
data.id,p->
data.id)==0){
if(p->
next!
p->
prior->
next=p->
prior=p->
prior;
}else{
free(p);
if(head->
p=(listnode*)malloc(sizeof(listnode));
p=head->
q->
m->
p=NULL;
}//for循环结束//276
p=list_static->
\n\t***************非抢占静态优先权************"
\n进程名\t初始优先权\t到达时间\t服务时间\t开始时间\t完成时间\t"
\n-------------------------------------------------------------------------------\n"
data.start_time);
data.finish_time);
z->
next=z;
rear=z;
//300
//***高响应比优先***
voiddisplay_rp(linklisthead)
floatrp=0,rpq=0,rpm=0;
//325
//创建一个新的链表用来存储高响应比优先权算法后得到的执行队列
linklistlist_rp=(listnode*)malloc(sizeof(listnode));
rear=list_rp;
//取得链表结点数
//340
//347
//比较响应比(等待时间/服务时间)+1
rp=(float)((time-p->
data.arrive_time)/p->
data.service_time)+1;
rpq=(float)((time-q->
data.arrive_time)/q->
//取其中响应比高的进程
if(rpq<
rp){
//进程还未到达选出最先到达的
//有进程满足
//未有进程满足
data.priority=(float)(n->
data.start_time-n->
data.arrive_time)/n->
data.service_time+1;
//搜索到要删除的节点//390
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于静态优先权和响应比的进程管理系统的设计课程设计报告 精品 基于 静态 优先权 响应 进程 管理 系统 设计 课程设计 报告