高优先权优先调度算法Word下载.docx
《高优先权优先调度算法Word下载.docx》由会员分享,可在线阅读,更多相关《高优先权优先调度算法Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
![高优先权优先调度算法Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/2/65031027-6b78-4c72-af6c-b91ec23b8003/65031027-6b78-4c72-af6c-b91ec23b80031.gif)
图5
图6
图7
图8
五、实验小结
本次实验代码和基于时间片轮转算法代码是一样的,是在别人代码的基础上,结合自己对高优先权算法和时间片轮转算法的了解,通过switch语句把两者合二为一了,当输入1的时候,执行HighPriority函数,也就是动态高优先权函数。
在实现的过程中,使用for语句,限制进程数为5个:
for(inti=0;
i!
=5;
++i),,定义pt作为临时节点来创建链表,processes作为头结点来存储链表,psorted用来存放排序后的链表。
这次实验,在最初的时候,遇到了很大的麻烦,毕竟是改的别人代码,所以对代码理解的不是很透彻,但在同学们和老师的帮助下,终于调试成功了。
也使我更加明白了高优先权调度的过程。
六、附录
#include<
stdio.h>
stdlib.h>
structPCB{
charp_name[20];
intp_priority;
intp_needTime;
intp_runTime;
charp_state;
structPCB*next;
};
voidHighPriority();
voidRoundRobin();
voidInformation();
charChoice();
structPCB*SortList(PCB*HL);
intmain()
{
Information();
charchoice=Choice();
switch(choice)
{
case'
1'
:
system("
cls"
);
HighPriority();
break;
2'
RoundRobin();
default:
}
pause"
return0;
}
voidInformation()
printf("
\n\n"
*********************************************\n"
模拟进程调度算法\n"
*********************************************\n\n\n"
班级:
软件测试10-02班\n"
姓名:
林文\n"
学号:
541013110224\n"
实验日期:
2013年04月9日\n\n\n\n\n\n"
按回车键进入演示程序"
getchar();
charChoice()
进程调度演示\n"
1.演示最高优先数优先算法。
\n"
2.演示轮转法算法。
3.退出程序。
\n\n\n\n"
选择进程调度方法:
"
charch=getchar();
returnch;
voidHighPriority()
structPCB*processes,*pt;
//pt作为临时节点来创建链表
processes=pt=(structPCB*)malloc(sizeof(structPCB));
for(inti=0;
++i)
structPCB*p=(structPCB*)malloc(sizeof(structPCB));
进程号No.%d:
i);
输入进程名:
scanf("
%s"
p->
p_name);
输入进程优先数:
%d"
&
p->
p_priority);
输入进程运行时间:
p_needTime);
p->
p_runTime=0;
p_state='
W'
;
next=NULL;
pt->
next=p;
pt=p;
//接受回车
//processes作为头结点来存储链表
processes=processes->
next;
intcases=0;
structPCB*psorted=processes;
while
(1)
++cases;
pt=processes;
//对链表按照优先数排序
//psorted用来存放排序后的链表
psorted=SortList(psorted);
Theexecutenumber:
%d\n\n"
cases);
****当前正在运行的进程是:
%s\n"
psorted->
psorted->
R'
qnamestatesuperndtimeruntime\n"
%s\t%c\t%d\t%d\t%d\t\n\n"
p_name,psorted->
p_state,psorted->
p_priority,psorted->
p_needTime,psorted->
p_runTime);
p_runTime++;
p_priority--;
****当前就绪状态的队列为:
//pt指向已经排序的队列
pt=psorted->
while(pt!
=NULL)
pt->
p_name,pt->
p_state,pt->
p_priority,pt->
p_needTime,pt->
pt=pt->
//pt指向已经排序的链表,判断链表是否有已用时间啊等于需要时间的
pt=psorted;
structPCB*ap;
ap=NULL;
//ap指向pt的前一个节点
if(pt->
p_needTime==pt->
p_runTime)
if(ap==NULL)
psorted=pt;
else
ap->
next=pt->
ap=pt;
if(psorted->
next==NULL)
structPCB*SortList(PCB*HL)
structPCB*SL;
SL=(structPCB*)malloc(sizeof(structPCB));
SL=NULL;
structPCB*r=HL;
while(r!
structPCB*t=r->
structPCB*cp=SL;
structPCB*ap=NULL;
while(cp!
if(r->
p_priority>
cp->
p_priority)
ap=cp;
cp=cp->
r->
next=SL;
SL=r;
next=cp;
next=r;
r=t;
returnSL;
//轮转算法
voidRoundRobin()
//检测是否运行时间等于需要时间,是的话从队列里面删除,不是的话加到队列最尾部
C'
pt=processes->
processes=pt;
if(pt->
next!
//寻找最后一个节点
while(pt->
structPCB*ptem;
//临时节点用来帮助把头结点插到尾部
ptem=processes->
next=processes;
processes->
processes=ptem;
if(pt==NULL)