进程调度实验报告.docx

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

进程调度实验报告.docx

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

进程调度实验报告.docx

进程调度实验报告

操作系统进程调度实验报告

 

姓名:

何绍金

班级:

自动化1202

学号:

201203870408

指导教师:

张健

 

2014年10月10日

一.实验题目

编写采用简单轮转调度算法模拟进程调度程序。

二.实验内容

1.实验要求

(1)简单轮转算法的基本思想

所有就绪程序进程按FCFS排成一个队列,总是把处理机分

配给队首的进程,各进程占用CPU的时间片相同。

即将CPU的

处理时间划分成一个个相同的时间片,就绪队列的诸进程轮流

运行一个时间片。

当一个时间片结束时,如果正在运行的进程

用完它的时间片后还未完成,就强迫该进程让出CPU,把它送回

就绪队列的末尾,等待下一次的调度。

同时,进程调度又去选

择就绪队列中的队首进程,分配给它一个时间片,以投入运行。

直至所有的进程运行完毕。

(2)实验分析

a.设实验有六个进程,每个进程用一个进程控制块PCB来代表。

b.为每个进程任意确定一个要求运行的时间。

c.按照进程输入的先后顺序排列成一个队列。

再设一个队首指针指向第一个到达进程的首地址。

d.执行处理机调度时,开始选择队首的第一个进程运行。

另外,再设一个当前运行进程的指针,指向当前正在运行的进程。

e.进程运行一次后,以后的调度则将当前指针下移一个位置,指向下一个进程。

同时还应该判断进程的要求运行时间是否等于已运行时间。

如果不等,则等待下一轮的运行,否则将该进程的状态置为完成态C,并退出循环队列。

f.如果就绪队列不空,则重复上述的d和e直到所有的进程都运行完。

g.考虑到代码的可重用性,轮转法调度程序和最高优先级优先调度是调用同一个模块进行输出。

h.在所设计的调度程序中,包含显示语句,显示每次选中的进程的名称及运行一次后队列的变化情况。

i.实现流程图。

三.实验流程图

2.程序源代码(C++语言)

按流程图编制的源代码如下所示:

#include

#include

#include

#include

typedefstructnode

{

charname[10];

intprio;

intround;

intcputime;

intntime;

intcount;

charstate;

structnode*next;

}PCB;

PCB*finish,*ready,*tail,*run;//队列指针

intN;//进程数

voidfirstin()

{

run=ready;//就绪队列头指针赋值给运行头指针

run->state='R';//进程状态变为运行态

ready=ready->next;//就绪队列头指针后移到下一进程

}

//输出标题函数

voidprt1(chara)//优先级法

{

if(toupper(a)=='P')

cout<<""<

cout<<"进程名占用CPU时间到完成还要的时间轮转时间片状态"<

}

//进程PCB输出

voidprt2(chara,PCB*q)

{

if(toupper(a)=='P')//优先级法的输出

cout<name<<""<cputime<<""<ntime<<""<round<<""<state<

}

voidprt(charalgo)

{

PCB*p;

prt1(algo);//输出标题

if(run!

=NULL)

prt2(algo,run);

p=ready;//输出就绪队列PCB

while(p!

=NULL)

{

prt2(algo,p);

p=p->next;

}

p=finish;//输出完成队列的PCB

while(p!

=NULL)

{

prt2(algo,p);

p=p->next;

}getchar();//按住任意键继续

}

 

voidinsert(PCB*q)//时间片轮转的插入算法

{

PCB*p1,*s,*r;

s=q;//待插入的PCB指针

p1=ready;//就绪队列头指针

r=p1;//*r做pl的前驱指针

while(p1!

=NULL)

if(p1->round<=s->round)

{r=p1;

p1=p1->next;

}

if(r!

=p1)

{

r->next=s;

s->next=p1;

}

else

{

s->next=p1;//否则插入在就绪队列的头

ready=s;

}

}

 

voidcreate(charalg)//优先级创建初

{

PCB*p;

inti,time;

charna[10];

ready=NULL;

finish=NULL;

run=NULL;

cout<<"输入进程名及其需要运行的时间:

"<

for(i=1;i<=N;i++)

{

p=newPCB;

cin>>na;

cin>>time;

strcpy(p->name,na);

p->cputime=0;

p->ntime=time;

p->state='W';

p->round=0;

if(ready!

=NULL)

insert(p);

else

{

p->next=ready;

ready=p;

}

cout<<"输入进程名及其需要运行的时间:

"<

}prt(alg);

run=ready;

ready=ready->next;

run->state='R';

}

voidtimeslicecycle(charalg)

{

while(run!

=NULL)

{

run->cputime=run->cputime+10;

run->ntime=run->ntime-10;

run->round=run->round+10;

if(run->ntime<=0)

{

run->next=finish;

finish=run;

run->state='F';

run=NULL;

if(ready!

=NULL)

firstin();

}

else

{

run->state='W';

insert(run);

firstin();

}

prt(alg);

}

}

1

//主函数

voidmain()

{

charalgo='P';//算法标记

cout<<"输入进程的个数:

";

cin>>N;//输入进程数

create(algo);//创建进程

timeslicecycle(algo);

}

3.程序运行结果

运行程序得到如下结果:

(1)输入进程数,并分别确定每个进程的要求运行时间。

(2)数据输入完成后的初始状态,进程标识为x1的进程首先得到调度,运行10个时间单位。

(3)进程标识为x1的进程运行完成,进程标识为x2的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。

(4)进程标识为x2的进程运行完成,从运行态“R”改为完成态“F”;进程标识为x3的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。

(5)进程标识为x3的进程由于还未运行完被置于队末,等待下一次调度,从运行态“R”改为就绪态“W”;进程标识为x4的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。

(6)进程标识为x4的进程运行完成,从运行态“R”改为完成态“F”;进程标识为x5的进程得到调度,从就绪态“W”改为运行态“R”,由于进程x4只用了5个单位时间,所以x5只运5个时间单位。

(7)进程标识为x5的进程被置于队末,进程标识为x6的进程得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。

(8)进程标识为x6的进程被置于队末,进程标识为x1的进程再次得到调度,从就绪态“W”改为运行态“R”,运行10个时间单位。

(9)进程标识为x1的进程运行完成,进程标识为x3的进程再次得到调度,从就绪态“W”改为运行态“R”,运10个时间单位。

(10)进程标识为x3的进程运行完成,进程标识为x5的进程再次得到调度,从就绪态“W”改为运行态“R”,只运5个时间单位。

(11)进程标识为x5的进程运行完成,进程标识为x6的进程再次得到调度,从就绪态“W”改为运行态“R”,运10个时间单位。

(12)进程标识为x6的进程运行完成,所有进程全部运行结束,均处于完成态“F”。

3.实验小结

经过本次实验设计,把教材中的理论知识转化为实践,在一定程度上加深了我对时间片轮转调度算法的理解,同时也提高了我的动手编程能力。

虽然在编程的过程中,遇到了很多的困难。

但同时握了很多东西。

更让我明白了操作系统中的一个核心的问题就是进程调度问题。

 

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

当前位置:首页 > 高等教育 > 军事

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

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