08信管进程时间片轮转调度算法操作系统实验报告.docx

上传人:b****5 文档编号:6637195 上传时间:2023-01-08 格式:DOCX 页数:11 大小:109.70KB
下载 相关 举报
08信管进程时间片轮转调度算法操作系统实验报告.docx_第1页
第1页 / 共11页
08信管进程时间片轮转调度算法操作系统实验报告.docx_第2页
第2页 / 共11页
08信管进程时间片轮转调度算法操作系统实验报告.docx_第3页
第3页 / 共11页
08信管进程时间片轮转调度算法操作系统实验报告.docx_第4页
第4页 / 共11页
08信管进程时间片轮转调度算法操作系统实验报告.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

08信管进程时间片轮转调度算法操作系统实验报告.docx

《08信管进程时间片轮转调度算法操作系统实验报告.docx》由会员分享,可在线阅读,更多相关《08信管进程时间片轮转调度算法操作系统实验报告.docx(11页珍藏版)》请在冰豆网上搜索。

08信管进程时间片轮转调度算法操作系统实验报告.docx

08信管进程时间片轮转调度算法操作系统实验报告

操作系统实验报告

—进程时间片轮转调度算法

一、实验题目:

进程时间片轮转调度算法

二、实验原理:

在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。

对调度的处理又都可采用不同的调度方式和调度算法。

调度算法是指:

根据系统的资源分配策略所规定的资源分配算法。

三、实验目的:

1、加深对进程概念的理解,明确进程和程序的区别。

2、深入系统如何组织进程、创建进程。

3、进一步认识如何实现处理器调度。

4、通过对进程调度算法的设计,深入理解进程调度的原理。

5、加深对时间片轮转调度算法的理解。

四、实验要求:

用C++语言编写程序完成单处理机的进程调度,要求采用时间片轮转调度算法。

实验具体要求包括:

首先确定作业控制块的内容和组成方式;然后完成作业调度;最后编写主函数,并对所做工作进行测试。

五、语言环境:

计算机基本配置要求:

操作系统:

WIN98/2000/XP/2003等Windows平台

内存:

256MB及以上

主存64KB(Memory)(以KB为单位分配)

开发语言:

VisualC++6.0

五、数据结构

typedefstructjcb

{

charname[N];

intprio;

intround;

intcputime;

intneedtime;

intcount;

charstate;

structnode*next;

}JCB

六、参考源程序

#include

#include

#include

#include

typedefstructnode

{

charname[10];

intprio;

intround;

intcputime;

intneedtime;

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<<""<needtime<<""<<

q->round<<""<state<

}

//输出函数

voidprt(charalgo)

{

PCB*p;

prt1(algo);//输出标题

if(run!

=NULL)//如果运行指针不空

prt2(algo,run);//输出当前正在运行的PCB

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->needtime=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->needtime=run->needtime-10;

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

if(run->needtime<=0)

{

run->next=finish;

finish=run;

run->state='F';

run=NULL;

if(ready!

=NULL)

firstin();

}

else

{

run->state='W';

insert(run);

firstin();

}

prt(alg);

}

}

 

//主函数

voidmain()

{

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

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

";

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

create(algo);//创建进程

timeslicecycle(algo);//优先级法调度

}//main()

七、运行结果

1、输入数据

2、运行结果示例

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

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

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

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

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

(6)进程标识为x1的进程再次得到调度,从就绪态“W”改为运行态“R”,因进程x1只剩下5个单位时间,所以进程x1只运行5个单位时间。

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

进程x1已运行完,从运行态“R”改为运行结束状态“F”。

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

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

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

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

进程x5已运行完,从运行态“R”改为运行结束状态“F”。

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

进程x2已运行完,从运行态“R”改为运行结束状态“F”。

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

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

进程x4已运行完,从运行态“R”改为运行结束状态“F”。

(14)所有进程都已运行完,状态都为“F”。

八、总结

在这次实验中,我能够正确分析实验过程和实验结果,思路清晰,能够比较好的理解进程按时间片轮转算法这一调度过程,加深了我对进程时间片轮转调度过程的理解。

但是还有很多不足。

我自己的C++基础差,不能够自己编写这一调度算法的程序,只能通过网络和同学、老师的帮忙得到正确的程序编码;另外一开始输入进程运行需要的时间时,由于输入运行时间的数值较大,导致后面进程繁多,但后来及时改正,走了弯路,也增加了理解。

因此以后要加强自己在C++方面的学习,能够理解源程序;并且要多上机操作,多调试多尝试,争取能理解好了解透。

本次实验题需要详细阅读题目和不断地尝试才能找到简便的过程,能加强学生的上机操作能力。

 

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

当前位置:首页 > 考试认证 > IT认证

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

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