高优先权优先调度算法Word下载.docx

上传人:b****5 文档编号:18885646 上传时间:2023-01-02 格式:DOCX 页数:14 大小:263.20KB
下载 相关 举报
高优先权优先调度算法Word下载.docx_第1页
第1页 / 共14页
高优先权优先调度算法Word下载.docx_第2页
第2页 / 共14页
高优先权优先调度算法Word下载.docx_第3页
第3页 / 共14页
高优先权优先调度算法Word下载.docx_第4页
第4页 / 共14页
高优先权优先调度算法Word下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

高优先权优先调度算法Word下载.docx

《高优先权优先调度算法Word下载.docx》由会员分享,可在线阅读,更多相关《高优先权优先调度算法Word下载.docx(14页珍藏版)》请在冰豆网上搜索。

高优先权优先调度算法Word下载.docx

图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)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1