进程调度算法课程设计.docx
- 文档编号:329162
- 上传时间:2022-10-09
- 格式:DOCX
- 页数:22
- 大小:94.39KB
进程调度算法课程设计.docx
《进程调度算法课程设计.docx》由会员分享,可在线阅读,更多相关《进程调度算法课程设计.docx(22页珍藏版)》请在冰豆网上搜索。
进程调度算法课程设计
信息与计算科学
操作系统原理
课程设计报告
题目:
进程调度算法
班级:
姓名:
专业:
进程调度算法
一、实验目的
通过优先权法与轮转调度算法的模拟加深对进程概念和进程调度过程的理解,掌握进程状态之间的切换,同时掌握进程调度算法的实现方法和技巧。
二、实验内容
1、用C语言或C++语言来实现对N个进程采用优先算法以及轮转算法的进程调度。
2、每个用来标示进程的进程控制块PCB用结果来描述,包括以下字段
(1)进程标识ID,其中0为闲逛进程,用户进程的标识数为1、2、3、、、、、、、。
(2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户有进程的优先级大于0,且随机产生,标识数越大,优先级越高。
(3)进程占用的CPU时间CPUtime,进程每运一次,累积等于4.
(4)进程总共需要运行时间Alltime,利用随机函数产生。
(5)进程状态,0—就绪态,1—运行态,2—阻塞态。
(6)队列指针next,用来将多个进程控制块PCB链接为队列。
3、优先数改变的原则
(1)进程在就绪队列中每呆一个时间片,优先数增加1.
(2)进程每运行一个时间片,优先数增加1.
4、在调度前,系统中拥有的进程数PCB_number有键盘输入,进初始化后,所有的进程控制块PCB连接成就绪队列。
5、为了清楚的观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来。
三、实验步骤
1、进程管理程序调式好后,运行进程管理程序
Y
N
N
Y
Y
N
N
Y
Y
N
N
Y
2、优先权调度
(1)输入1选择优先权调度算法模拟。
(2)输入开始进程个数n,创建n个PCB并加入就绪队列ready_queue中。
(3)就绪队列ready_queue不为空,调度就绪队列中第一个进程运行,否则,从闲逛队列idleprocess中调度闲逛进程运行。
(4)在运行过程中,当遇到阻塞,则该进程插入到阻塞队列block_queue中,且将该进程从ready_queue中删除。
(5)如果运行时间CPUtime大于等于Alltime,该进程运行完毕,释放该进程;否则插入到就绪队列中。
(6)更新就绪队列中的优先级数。
(7)随机对阻塞队列block_queue中的进程PCB询问是否要唤醒,唤醒,即从唤醒队列中选择第一个进程,且插入就绪队列中;阻塞队列中没有阻塞进程返回。
(8)重复上述步骤,直到本次调度结束。
3、轮转调度
(1)输入2选择优先权调度算法模拟。
(2)输入开始进程个数n,创建n个PCB并加入就绪队列ready_queue中。
(3)就绪队列ready_queue不为空,调度就绪队列中第一个进程运行,否则,从闲逛队列idleprocess中调度闲逛进程运行。
(4)在运行过程中,当遇到阻塞,则该进程插入到阻塞队列block_queue中,且将该进程从ready_queue中删除。
(5)如果运行时间CPUtime大于等于Alltime,该进程运行完毕,释放该进程;否则插入到就绪队列中。
(6)随机对阻塞队列block_queue中的进程PCB询问是否要唤醒,唤醒,即从唤醒队列中选择第一个进程,且插入就绪队列中;阻塞队列中没有阻塞进程返回。
(7)如果时间到,本次调度结束,否则重复上述步骤,直到本次调度结束。
Y
N
N
Y
Y
N
N
Y
Y
N
N
Y
Y
四、实验过程中遇到的问题及解决方案
1、请仔细阅读动态优先权的进程调度算法的模拟实现代码,说明该算法与教材中介绍的算法做了哪些简单化处理.
优先权模拟时优先权是随机产生,在实际的系统中,系统进程的优先权高于一般用户进程的优先权。
2、为什么对进程的优先数可按上述原则进行修改?
最高优先权调度算法仅照顾了优先权高的进程,当不断有优先权高的进程需调度时,而优先权低的进程将很难得到处理机的调度,所以进程在就绪队列中每呆一个时间片,优先数增加1,使优先权低的进程不总是忙等。
3、请给出设计实现的轮转发进程调度算法的设计思想.
时间轮转调度算法:
系统将所有的就像进程按先来先服务的原则,排成一个队列,每次调度时,把CPU分配给首进程,并令其执行一个时间片。
当执行的时间片用完时,发出中断请求,调度程序便据此信号来停止该进程的执行,并将其送到就绪队列的末尾,如此反复,就可以保证就绪队列中的所有进程在一个给定的时间内,均能获得一时间片处理机执行时间。
4、在实际的进程调度中,除了按调度算法选择下一个执行的进程外,还应处理哪些工作?
最高优先权调度算法,常用于批处理系统中,作为作业调度算法,也作为多种操作系统中的进程调度算法,还可以用于实时系统中:
时间轮转调度算法,一般用于分时系统中。
五、课程设计总结
1、当把该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业,装入内存,当用于进程调度算法时,该算法是把处理及分配给就绪队列中优先权最高的进程。
2、当系统空闲(就绪队列为空)时,系统运行闲逛进程,否则运行其他进程,发生变迁(就绪→运行)
3、在运行进程(包括闲逛进程)的过程中,可能发生变迁2(运行→阻塞),即将运行进程插入到阻塞队列(闲逛进程不能不被阻塞),可能有其他的进程创建PCB,还可能唤醒阻塞队列中的某些进程PCB,发生变迁3(阻塞→就绪),即从阻塞队列中插入就绪队列中。
4、时间片运行结束后,若进程累积占用CPU时间大于等于进程需要运行时间,则进程执行结束,释放其PCB。
若进程累积占用CPU时间小于进程需要运行时间,发生变迁4(运行→就绪),即将当前运行的进程插入就绪队列中。
编译器:
visualstidio2008professional
附:
进程调度算法代码
//process.cpp:
Definestheentrypointfortheconsoleapplication.
//
#include"stdafx.h"
#include"stdio.h"
#include"stdlib.h"
#include"iostream"
#defineNULL0
#definefalse0
#definetrue1
bool_state=0;
structPCB
{
intID;
intpriority;
intCPUtime;
intALLtime;
intState;
PCB*next;
};
voidinit();/*产生idle进程,输入用户进程数目,调用insert()*/
voidprint(PCB*pcb);/*输出进程属性信息*/
voidprint_init(PCB*pcb);/*输出所有PCB的初始值*/
voidinsert();/*生成进程属性信息,插入进程就绪队列*/
voidRun_priority(PCB*pcb);/*运行进程,随机阻塞进程、产生新进程,插入就绪队列,唤醒阻塞进程*/
voidblock(PCB*pcb);/*调用destroy()将进程插入阻塞队列*/
voidwakeup();/*唤醒进程,插入就绪队列*/
voidproc_priority();/*优先权调度算法模拟*/
//voidRun_loop(PCB*pcb);
voidproc_loop();/*轮转法调度算法模拟*/
voidupdate(PCB*pcb);/*更新进程信息*/
voidpushback_queue(PCB*queue,PCB*item);/*将item插入到队列的尾部*/
voidinsert_queue(PCB*queue,PCB*item);/*将item插入到队列中,使得插入后,队列中按照优先级从高到低有序*/
voidsort_queue(PCB*&queue);/*对queue中的结点进行排序,按照优先级从大到小*/
PCB*ready_queue,*block_queue,*idleprocess;/*就绪队列,阻塞队列及闲逛进程指针变量*/
intmain(intargc,char*argv[])
{
inti=0;
while
(1)
{
cout<<"\\**********PROCESS**********/";
cout<<("\nPleaseselectanumin(1,2,0)");
cout<<("\n1--priority");
cout<<("\n2--loop");
cout<<("\n0--exit\n");
cout<<"Pleaseselectanum:
";
cin>>i;
while(i)
{
if(i==1)
{
cout<<("\nThisisaexampleforpriorityprocessing:
\n");
init();
proc_priority();
}
elseif(i==2)
{
cout<<("\nThisisaexampleforroundrobinprocessing:
\n");
init();
proc_loop();
}
else
{
cout<<"Pleaseselectanumin(1,2,0)\n";
}
cout<<"Pleaseselectanum:
";
cin>>i;
}
return0;
}
}
///////输出所有PCB的初始值
voidprint_init(PCB*pcb)
{
PCB*temp=pcb->next;
cout<<("\nIDpriorityCPUtimeALLtimeState");
while(temp!
=NULL)
{
cout<<"\n"<
if(temp->State==0)
cout<<("ready");
elseif(temp->State==1)
cout<<("running");
else
cout<<("blocked");
temp=temp->next;
}
}
///////输出进程属性信息
voidprint(PCB*pcb)
{
PCB*temp;
temp=pcb;
if(pcb->ID==0)
cout<<("\nTheidlepeocessidrunning!
");
else
{
cout<<"\n"<
if(temp->State==0)
cout<<("ready");
elseif(temp->State==1)
cout<<("running");
else
cout<<("blocked");
}
}
///////将item插入到队列中,使得插入后,队
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 调度 算法 课程设计