当前位置:
文档之家› 时间片轮转、非强占式短进程优先算法
时间片轮转、非强占式短进程优先算法
课程设计
进程调度模拟设计——时间片题目
轮转、非强占式短进程优先算法学院计算机学院
专业
班级
姓名
指导教师吴利军
2013 年 1 月15 日
课程设计任务书
学生姓名:
指导教师:吴利军工作单位:计算机科学与技术学院
题目: 进程调度模拟设计——时间片轮转、非强占式短进程优先算法初始条件:
1.预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写
等具体要求)
1.模拟进程调度,能够处理以下的情形:
⑴能够选择不同的调度算法(要求中给出的调度算法);
⑵能够输入进程的基本信息,如进程名、到达时间和运行时间等;
⑶根据选择的调度算法显示进程调度队列;
⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。
2.设计报告内容应说明:
⑴需求分析;
⑵功能设计(数据结构及模块说明);
⑶开发平台及源程序的主要部分;
⑷测试用例,运行结果与运行情况分析;
⑸自我评价与总结:
i)你认为你完成的设计哪些地方做得比较好或比较出色;
ii)什么地方做得不太好,以后如何改正;
iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);
iv)完成本题是否有其他方法(如果有,简要说明该方法);
时间安排:
设计安排一周:周1、周2:完成程序分析及设计。
周2、周3:完成程序调试及测试。
周4、周5:验收、撰写课程设计报告。
(注意事项:严禁抄袭,一旦发现,一律按0分记)
指导教师签名:年月日
系主任(或责任教师)签名:年月日
1、需求分析
1.1通过设计一个模拟进程调度的系统,来实现进程调度,对进程调度的功能以及进程调度算法有一个更加深入的理解。
进程PCB(包含进程名、到达时间、预计运行时间等)
调度算法(时间片轮转算法、非强占式短进程优先算法)
能够处理以下的情形:
(1)能够选择不同的调度算法(要求中给出的调度算法)
(2)能够输入进程的基本信息,如进程名、到达时间和运行时间等
(3)根据选择的调度算法显示进程调度队列
(4)根据选择的调度算法计算平均周转时间和平均带权周转时间
此次做的进程调度模拟系统,用户可以输入各进程信息(包含进程名、到达时间、估计运行时间);输入完毕确认后,可选择两种调度算法中的一种执行,查看结果可得到相应算法的调度序列,每个进程的到达时间、预计运行时间、开始时间、结束时间和周转时间、带权周转时间,以及平均周转时间和平均带权周转时间。
1.2 对进程调度算法的描述与实现
进程基本信息所构成的模块作为基本单元,并且相关调度算法的侧重进程基本信息点不同,所以要根据其调度算法的特点来结合基本信息进行对应的设计。此次课程设计要求的调度算法描述如下:
(1)时间片轮转调度算法
时间片轮转法的基本思想是让每个进程在就绪队列的等待时间与享受服务成正比。基本概念是将CPU的处理时间分成固定大小的时间片。如果一个进程在被调度选中之后用完了系统规定的的时间片,但未完成要求的任务,则它释放自己所占有的CPU而排到就绪队列的末尾,等待下一次调度。同时,进程调度程序又去调度当前就绪队列中的第一个进程或作业。
原理如图所示:
1. 将系统中所有的就绪进程按照FCFS原则,排成一个队列。
2. 每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的
长度从几个ms到几百ms。
3. 在一个时间片结束时,发生时钟中断。调度程序据此暂停当前进程的
执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程。
4. 进程可以未使用完一个时间片,就提前调度(如完成/阻塞)
(2)非强占式短进程优先调度算法
不可抢占式(非剥夺式):分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程。
短作业优先调度算法(SJF),又称为“短进程优先”(SPN);这是对FCFS 算法的改进,其目标是减少平均周转时间。
基本思想:对预计执行时间短的作业(进程)优先处理。通常后来的短作业不抢先正在执行的作业。一般情况下这种调度算法比先来先服务调度算法的效率要高,吞吐量要大;但执行时间的估计及算法实现相对较困难,且如果作业的到来顺序及运行时间不合适,会出现饿死现象(如果不断地有短作业到来,运行时间长的作业有可能一直得不到调度执行)。
周转时间
周转时间T
i = 完成时刻Tc
i
-提交时刻Ts
i
= 等待时间Tw
i + 运行时间 Tr
i
对于进入系统的n个作业而言,平均周转时间T为
T=1/n(T1+T2+T3......Tn)
带权周转时间
带权周转时间是作业周转时间与作业执行时间的比:
Wi=Ti/Tri
对于进入系统的n个作业而言,其平均带权周转时间为:
W=1/n(W1+W2+W3+......+Wn)
(3)算法评价
(1)时间片轮转法
1.主要受时间片长度的影响:
过长:退化为FCFS算法,进程在一个时间片内可以都执行完。
过短:一个进程需要多个时间片才能处理完,上下文切换频繁,开销增加。
2.对时间片长度的要求
(时间片长度) = R(要求的响应时间) / N (最大进程数)
3.时间片长度的影响因素
系统的响应时间:时间片越大,响应时间越长(当进程数一定时)
就绪进程的数目:数目越多,时间片越小(当响应时间一定时)
CPU运行速度:CPU运行速度快,则时间片可以短些;反之,则取长些。
(2)短作业优先法——SJF法
优点: a缩短作业的等待时间;
b.提高系统的吞吐量;
c.比FCFS平均周转时间和平均带权周转时间短。
缺点: a.对长作业非常不利,可能长时间得不到执行;
b.未能依据作业的紧迫程度来划分执行的优先级;
c.难以准确估计作业(进程)的执行时间,从而影响调度性能。
2.功能设计(数据结构及模块说明)
2.1数据结构
在本次课设中,需要对进程的基本信息进行相关的描述,进程的基本信息包括进程名、达到的时间、预计的运行时间、开始时间、进程需要的运行时间等。在程序中可用一个结构体链表来储存进程信息。数据结构定义如下:
Struct PCB
{ string name;//进程名
int ta;//进程到达时间
int ts;//进程估计运行的时间
int tb;//进程开始运行时间
int tm;//进程仍需运行的时间
int to;//进程完成的时间
int rn;//进程运行的次数
int totalTime;//周转时间
double weightTotalTime;//带权周转时间(周转时间/估计运行时间)
PCB *next;//定义指向下一个进程的指针};
}
2.2 模块说明
几个主要函数的功能如下:
void main() 程序主函数,提示用户输入相关信息并输出时间片轮转, 非强占式短进程算法的运行结果
PCB *create(PCB *head);//创建进程队列
void SJFrun(PCB *head);//非强占式短进程优先算法
void cyclerun(PCB *head);//时间片轮转算法
3. 开发平台及源程序的主要部分
本程序主要在VS2010中用C++编写,经过运行之后,得到正确结果。
源程序主要部分如下:
(1)非抢占式短进程优先算法:
void SJFrun(PCB *head)
{
sort(head);
int time=0,count;
PCB *p,*q;
string re=””;
while(head->next!=NULL)
{
count=getCount(head,time);
if(count==0)
time++;//如果当前就绪队列中没有进程,时间自增
else
{
if(count==1)//如果就绪队列中只有1个进程,则必定是第一个节点
{
p=head;
q=p->next;
cout<<"******************************************************\n"<cout<<"进程名:"<name<cout<<"到达时间:"<ta<cout<<"进程开始运行时间:"<