实验三进程调度蔡凤武

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三进程调度

实验目的

1、理解有关进程控制块、进程队列的概念。

2、掌握进程优先权调度算法和时间片轮转调度算法的处理逻辑。

实验内容与基本要求

1、设计进程控制块PCB的结构,分别适用于优先权调度算法和时间片轮转

调度算法。

2、建立进程就绪队列。

3、编制两种进程调度算法:优先权调度算法和时间片轮转调度算法。

实验报告内容

一.优先权调度算法和时间片轮转调度算法原理。

对于优先权调度算法,其关键是在于是采用静态优先权还是动态优先权,以及如何确定进程的优先权。静态优先权是在创建进程是确定的,并且规定它在进程的整个运行期间保持不变。动态优先权要配合抢占调度方式使用,它是指在创建进程时所赋予的优先权,可以随着进程的推进而发生改变,以便获得更好的调度性能。在就绪队列中等待调度的进程,可以随着等待时间的增加,其优先权也以某个速率增加。因此,对于优先权初值很低的进程,在等待足够时间后,其优先权也可能升为最高,从而获得调度,占用处理器并执行。对已时间片轮转调度算法,系统将所有的就绪进程按进路就绪队列的先后次序排列。每次调度时把CPU分配给队首进程,让其执行一个时间片,当时间片用完,由计时器发出时钟中断,调度程序则暂停改程序的执行,使其退出处理器,并将它送人就绪队的末尾,等待下一轮调度执行。然后,把cpu 分配给就绪队列中新的队首进程,同时让它执行一个时间片。

二.程序流程图。

三.程序及注释。

#include

#include

#include

#include

#include

#include

#define P_NUM 5

#define P_TIME 50

enum st {

ready,

execute,

block,

finish};//状态定义进程//

struct pcb{

char name[4];//进程名字//

int priority;//进程优先权//

int cputime;//CPU运行时间//

int needtime;//进程运行需要的时间//

int count;//进程执行次数//

int round;//时间片轮转轮次//

st process;//进程状态//

pcb *next;};//定义进程//

pcb *get_process()

{ pcb *q;

pcb *t;

pcb *p;

int i=0;

cout<<"input name and time"<

while(i

{ q=(struct pcb*)malloc(sizeof(pcb));

cin>>q->name;

cin>>q->needtime;

q->cputime=0;

q->priority=P_TIME-q->needtime;

q->process=ready;

q->next=NULL;

if(i==0)

{ p=q;

t=q;

}

else {

t->next=q;

t=q;}

i++;

}

return p;//输入模拟测试的进程名和执行所需的时间,初始设置可模拟5个进程的调度//

}

void display (pcb *p)

{

cout<<"name"<<" "<<"cputime"<<" "<<"needtime"<<" "<<"priority"<<" "<<"st"<

while(p)

{

cout<name;

cout<<" ";

cout<cputime;

cout<<" ";

cout<needtime;

cout<<" ";

cout<priority;

cout<<" ";

switch(p->process)

{

case ready:cout<<"ready"<

case execute:cout<<"execute"<

case block:cout<<"block"<

case finish:cout<<"finish"<

}

p=p->next;

}

}//显示模拟结果,包含进程名,cpu的时间。运行所需时间以及优先级//

int process_finish(pcb * q)

{

int bl=1;

while(bl&&q)

{

bl=bl&&q->needtime==0;

q=q->next;

}

return bl;//结束进程,即将队列中各进程的所需时间设置为零//

}

void cpuexe(pcb * q)

{

pcb*t=q;

int tp=0;

while(q)

{

if(q->process!=finish)

{

q->process=ready;

if(q->needtime==0)

q->process=finish;

}

if(tppriority&&q->process!=finish)

{

tp=q->priority;

t=q;

}

q=q->next;

}

if(t->needtime!=0)

{

t->priority-=3;

相关文档
最新文档