进程调度实验实验报告文档格式.docx

上传人:b****5 文档编号:16710487 上传时间:2022-11-25 格式:DOCX 页数:13 大小:36.68KB
下载 相关 举报
进程调度实验实验报告文档格式.docx_第1页
第1页 / 共13页
进程调度实验实验报告文档格式.docx_第2页
第2页 / 共13页
进程调度实验实验报告文档格式.docx_第3页
第3页 / 共13页
进程调度实验实验报告文档格式.docx_第4页
第4页 / 共13页
进程调度实验实验报告文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

进程调度实验实验报告文档格式.docx

《进程调度实验实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《进程调度实验实验报告文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

进程调度实验实验报告文档格式.docx

〔2〕接着建立一个链表存储所有进程,以构造体PCB为节点〔头节点为空节点,从第二个节点开场存储数据〕。

链表建立过程如下:

inti=0;

PCB*head,*p1,*p2;

head=(PCB*)malloc(sizeof(PCB));

//创立链表头

p2=head;

//三个进程

for(i=0;

i<

3;

i++){

p1=(PCB*)malloc(sizeof(PCB));

//设置进程的初始状态,各个数据已经保存在对应的各个数组中

p1->

id=pcId[i];

priority=priority[i];

cpuTime=cpuTime[i];

allTime=allTime[i];

startBlock=startBlock[i];

blockTime=blockTime[i];

state='

W'

;

//初始状态为就绪

p2->

next=p1;

p2=p1;

}

p2->

next=NULL;

//表尾指针设为空指针,表示链表完毕

3.主要模块〔函数名〕

如下:

(1)创立初始队列,用链表存储

PCB*createLink(){};

〔2〕输出链表中所有进程的状态

voidprintLink(PCB*head,inttime);

〔3〕判断是否所有进程都已完成

intisFinish(PCB*head);

〔4〕判断是否所有未完成的进程都处于阻塞状态

intisBlock(PCB*head);

〔5〕获得当前时刻优先权最高且处于就绪状态的进程

PCB*getHighPriority(PCB*head);

〔6〕运行〔调度函数,在这里展示所有代码〕

voidrun(PCB*head){};

所有代码如下:

#include<

stdio.h>

malloc.h>

//三个进程的初始状态

intpcId[]={0,1,2};

intpriority[]={6,8,5};

intcpuTime[]={0,0,0};

intallTime[]={7,7,6};

intstartBlock[]={6,4,2};

intblockTime[]={3,8,6};

//创立初始队列,用链表存储

PCB*createLink(){

//intpcNum=0;

//进程个数

arriveTime=i;

//进程到达时间为输入时间

//设置进程的初始状态

//初始状态为就绪w

returnhead;

}

//输出所有队列中所有进程的状态

voidprintLink(PCB*head,inttime){

printf("

当前时刻为:

%d\n"

time);

IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE\n"

);

PCB*p1=head->

next;

while(p1!

=NULL){

printf("

%d%d%d%d%d%d%c\n"

p1->

id,p1->

priority,p1->

cpuTime,p1->

allTime,p1->

startBlock,p1->

blockTime,p1->

state);

p1=p1->

//指向下一个节点

\n"

//空行

return;

//判断是否所有进程都已完成

intisFinish(PCB*head){

if(p1->

state!

='

F'

)//如果有未完成的进程,返回0

return0;

return1;

//所有进程都完成了,返回1

//判断是否所有未完成的进程都处于阻塞状态

intisBlock(PCB*head){

&

&

p1->

B'

)//如果有未阻塞的进程,返回0

//所有进程都阻塞了,返回1

//获得当前时刻优先权最高且处于就绪状态的进程

PCB*getHighPriority(PCB*head){

intpri=-32768;

//优先权

PCB*p1,*p2=NULL;

p1=head->

state=='

priority>

pri){

pri=p1->

priority;

//获得优先权更高的进程

p2=p1;

}

returnp2;

//返回优先权最高的进程

//运行

voidrun(PCB*head){

inttime=0;

//时刻

inti;

intmark;

PCB*p1,*p2;

while(!

isFinish(head)){

mark=0;

p1=getHighPriority(head);

//p1所指进程优先权最高,获得运行资格

if(p1!

p1->

R'

for(i=1;

i<

=2;

i++){//运行两个时间片

p2=head->

while(p2!

if(p2==p1&

){

p2->

priority-=2;

//进程每运行一个时间片,优先权减2。

cpuTime++;

allTime--;

if(p2->

allTime==0){

p2->

mark=1;

}

elseif(p2->

cpuTime%p2->

startBlock==0){

//如果进程运行了startBlock个时间片,进入阻塞状态

}

elseif(p2!

=p1&

priority++;

//进程在就绪队列中呆一个时间片,优先权增加1

blockTime--;

blockTime==0){

p2->

//阻塞时间完毕,回到就绪队列

blockTime=blockTime[p2->

id];

}

p2=p2->

}

time++;

printLink(head,time);

if(isBlock(head))

break;

if(mark==1)

=NULL&

//主函数

intmain(){

PCB*head;

head=createLink();

printLink(head,0);

run(head);

四、实验结果

1.执行结果:

IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE

060763W

180748W

250626W

1

070763W

161648R

260626W

2

080763W

142548R

270626W

3

061663R

152548W

280626W

4

042563R

162548W

290626W

5

052563W

172548W

271526R

6

062563W

182548W

252426B

7

072563W

163448R

252425B

8

082563W

144348B

252424B

9

063463R

144347B

252423B

10

044363R

144346B

252422B

11

025263R

144345B

252421B

12

006163B

144344B

252426W

13

006162B

144343B

233326R

14

006161B

144342B

214226B

15

006163W

144341B

214225B

16

016163W

144348W

214224B

17

026163W

125248R

214223B

18

036163W

106148R

214222B

19

017063F

116148W

214221B

20

1-17048F

214226W

21

2-15126R

22

2-36026F

2.结果分析

(1)每对一个进程进展一次操作〔优先级加减、CPUtime加减等〕后,就要判断是否要进展状态改变。

情况如下:

运行状态的进程运行一个时间片之后,CPUTime加1,AllTime加1,此时判断AllTime是否为零,为零那么该进程状态设为F〔完成〕,否那么不变;

再判断CPUTime对startTime求余是否为零,为零那么该进程状态设为B〔阻塞〕,否那么不变;

阻塞状态的进程经过一个时间片之后,blockTime减1,此时判断blockTime是否为零,为零那么该进程状态设为W〔就绪〕,否那么不变;

(2)假设所有未完成的进程都进入阻塞状态,那么按照对阻塞进程的操作进展两个时间片。

再判断是否有进程可以获得运行资格。

3.实验总结

(1)通过本实验,我更加理解了什么是进程,也对高优先级调度方法有了更深层次的了解。

借助本实验,我也加深了对其他调度算法理解。

(2)本次试验,我通过实践,加深了理论知识。

通过理论与实践的结合,更好地掌握了知识。

这也是以后要继续实行的学习方法。

C语言编程技能与操作系统知识的相结合,让我在提高编程能力的同时,加强了与实际问题的结合,提高了对实际问题的解决能力。

教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。

教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。

(3)

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

当前位置:首页 > 法律文书 > 起诉状

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

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