福建农林大学金山学院
课程设计报告
课程名称: 课程设计题目: 姓 名:
系: 专 业: 年 级: 学 号: 指导教师: 职 称:
《操作系统》 对处理机的调度
信息与机电工程系 计算机科学与技术
李盼盼 助教
2013年12月31日
福建农林大学金山学院课程设计结果评定
目 录
1设计目的………………………………………………………………………4 2设计要求………………………………………………………………………4 3设计方案………………………………………………………………………4 3.1先到先服务算法…………………………………………………………… …4 3.2短进程优先算法…………………………………………………………… …6 4设计内容………………………………………………………………………8 4.1输入进程信息………………………………………………………… …8 4.2先到先服务算法输出……………………………………………………… …9 4.3短进程优先算法输出……………………………………………………… …9 5总结………………………………………………………………………10 6参考文献……………………………………………………………………10
对处理机的调度
1. 设计目的
进程是操作系统最重要的概念之一,进程调度是操作系统内核的重要功能,本实验要求用C 语言编写一个进程调度模拟程序,使用短作业优先调度算法,高响应比调度算法,先到先服务算法实现进程调度。可以手动阻塞与唤醒。本实验可加深对进程调度算法的理解。
在OS 中,调度的实质是一种资源分配,调度算法即指:根据系统的资源分配策略所规定的资源分配算法。对于不同的系统和系统目标,通常采用不同的调度算法,如在批处理系统中,为照顾为数众多的短作业,采用短作业有限调度算法;把当前处于就绪队列之首的那个进程调度到运行状态,采用先到先服务算法。采用算法时,则要考虑多方面因素,以便达到最佳效果。
2. 设计要求
对处理机的调度
设计一个有多个进程共行的进程调度程序。
进程调度算法:先到先服务算法,短作业优先调度算法
每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:到达时间,服务时间,完成时间,周转时间,帯权周庄时间,平均周转时间,平均帯权周转时间。
int ArrivalTime[Max];//到达时间 int ServiceTime[Max];//服务时间 int FinishTime[Max];//完成时间 int WholeTime[Max];//周转时间
double WeightWholeTime[Max];//帯权周转时间
double AverageWT_FCFS,AverageWT_SJF; //平均周转时间 double AverageWWT_FCFS,AverageWWT_SJF;//平均帯权周转时间
3. 设计方案 3.1 先到先服务算法
采用先来先服务FCFS 调度进程运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间 void FCFS()//找最早到达的。 {
cout
"
for(i=0;i
if(ArrivalTime[i]>NowTime)//假如进程到达的时间比现在已经运行的
时间NowTime 大,说明在NowTime 时刻进程未到达
{ }
NowTime+=ServiceTime[i];//把进程的服务时间加到NowTime 上 FinishTime[i]=NowTime;//计算完成时间
WholeTime[i]=FinishTime[i]-ArrivalTime[i];//计算周转时间=完成
NowTime=ArrivalTime[i];//把进程的到达时间赋给NowTime
时间-到达时间
WeightWholeTime[i]=(double)WholeTime[i]/ServiceTime[i];//计算
带权周转时间=周转时间/服务时间
}
AverageWT_FCFS=SumWT/Num;//平均周转时间 AverageWWT_FCFS=SumWWT/Num;//平均帯权周转时间 for(i=0;i
cout
SumWT+=WholeTime[i];//计算总的周转时间
SumWWT+=WeightWholeTime[i];//计算总的帯权周转时间
}
}
cout3.2短进程优先算法
void SJF()//找已经到达的且服务时间最短的进程(假定输入的进程是按照到达时间先后输入的) {
cout
NowTime=ArrivalTime[0]+ServiceTime[0];//计算第一次的NowTIme FinishTime[0]=NowTime;//计算第一个进程的完成时间 ServiceTime_SJF[0]=1000;//赋初值。
cout
行。";
int allin=0,j,k;
for(i=1;i
k=1;min=0;
if(allin==0)//找到已经到达的进程个数 {
j=0;
while(ArrivalTime[j]
j++; if(j>=Num)
}
}
}
allin=1;
else { }
j=j-1;//j是已经到达的进程数
while(k
if(ServiceTime_SJF[k]==0)//进程的服务时间如果等于0,则跳过j=Num;
该进程
k++;
else {
if(ServiceTime_SJF[min]>ServiceTime_SJF[k])//比较,找到
服务时间最短的进程
}
for(i=0;i
}
ServiceTime_SJF[min]=0;//找完后置零,便于下一次循环时使用 NowTime+=ServiceTime[min];//累加当前时间 FinishTime[min]=NowTime;//完成时间
}
min=k;
k++;
带权周转时间
}
AverageWT_SJF=SumWT/Num;//平均周转时间 AverageWWT_SJF=SumWWT/Num;//平均带权周转时间
cout
帯
权
周
转
时
间
:
WholeTime[i]=FinishTime[i]-ArrivalTime[i];
WeightWholeTime[i]=(double)WholeTime[i]/ServiceTime[i]; SumWT+=WholeTime[i]; SumWWT+=WeightWholeTime[i];
"
"
for(i=1;i
cout
始运行 "
帯
权
周
转
时
间
:
"
4. 设计内容 4.1 输入进程信息
}
cout
4.2 先到先服务算法输出
4.3 短进程优先算法输出
5. 总结
通过此次课程设计,更深入的理解了各个进程调度算法,及实现过程。增进了VC 编程的水平。对进程或作业先来先服务、短作业优先算法以及进程调度的概念和算法,有了更深入的认识!初步理解了操作系统对于作业处理的基本思想!并加深了我对于操作系统理论的理解。在此过程中,遇到了困难,能及时请教同学,查询相关资料,及时解决了问题,但仍有不足之处,将会在今后学习中更加努力。
参考文献
[1] 张尧学主编.计算机操作系统教程(第三版).北京:清华大学出版社,2006
[2] 张尧学编.计算机操作系统教程(第三版)习题解答与实验指导.北京:清华大学出版社,2006
[3] 汤子瀛主编.计算机操作系统(第三版).西安:西安电子科技大学出版社,2001 [4] 张坤等编.操作系统实验教程.北京:清华大学出版社,2008 [5] 张丽芬等编.操作系统实验教程.北京:清华大学出版社,2006 [6] 屠祁等编. 操作系统基础(第三版).北京:清华大学出版社,2000 [7] 冯耀霖等编. 操作系统. 西安:西安电子科技大学出版社,2001
[8] 左万历.计算机操作系统教程(第二版).北京:高等教育出版社,2004
福建农林大学金山学院
课程设计报告
课程名称: 课程设计题目: 姓 名:
系: 专 业: 年 级: 学 号: 指导教师: 职 称:
《操作系统》 对处理机的调度
信息与机电工程系 计算机科学与技术
李盼盼 助教
2013年12月31日
福建农林大学金山学院课程设计结果评定
目 录
1设计目的………………………………………………………………………4 2设计要求………………………………………………………………………4 3设计方案………………………………………………………………………4 3.1先到先服务算法…………………………………………………………… …4 3.2短进程优先算法…………………………………………………………… …6 4设计内容………………………………………………………………………8 4.1输入进程信息………………………………………………………… …8 4.2先到先服务算法输出……………………………………………………… …9 4.3短进程优先算法输出……………………………………………………… …9 5总结………………………………………………………………………10 6参考文献……………………………………………………………………10
对处理机的调度
1. 设计目的
进程是操作系统最重要的概念之一,进程调度是操作系统内核的重要功能,本实验要求用C 语言编写一个进程调度模拟程序,使用短作业优先调度算法,高响应比调度算法,先到先服务算法实现进程调度。可以手动阻塞与唤醒。本实验可加深对进程调度算法的理解。
在OS 中,调度的实质是一种资源分配,调度算法即指:根据系统的资源分配策略所规定的资源分配算法。对于不同的系统和系统目标,通常采用不同的调度算法,如在批处理系统中,为照顾为数众多的短作业,采用短作业有限调度算法;把当前处于就绪队列之首的那个进程调度到运行状态,采用先到先服务算法。采用算法时,则要考虑多方面因素,以便达到最佳效果。
2. 设计要求
对处理机的调度
设计一个有多个进程共行的进程调度程序。
进程调度算法:先到先服务算法,短作业优先调度算法
每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:到达时间,服务时间,完成时间,周转时间,帯权周庄时间,平均周转时间,平均帯权周转时间。
int ArrivalTime[Max];//到达时间 int ServiceTime[Max];//服务时间 int FinishTime[Max];//完成时间 int WholeTime[Max];//周转时间
double WeightWholeTime[Max];//帯权周转时间
double AverageWT_FCFS,AverageWT_SJF; //平均周转时间 double AverageWWT_FCFS,AverageWWT_SJF;//平均帯权周转时间
3. 设计方案 3.1 先到先服务算法
采用先来先服务FCFS 调度进程运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间 void FCFS()//找最早到达的。 {
cout
"
for(i=0;i
if(ArrivalTime[i]>NowTime)//假如进程到达的时间比现在已经运行的
时间NowTime 大,说明在NowTime 时刻进程未到达
{ }
NowTime+=ServiceTime[i];//把进程的服务时间加到NowTime 上 FinishTime[i]=NowTime;//计算完成时间
WholeTime[i]=FinishTime[i]-ArrivalTime[i];//计算周转时间=完成
NowTime=ArrivalTime[i];//把进程的到达时间赋给NowTime
时间-到达时间
WeightWholeTime[i]=(double)WholeTime[i]/ServiceTime[i];//计算
带权周转时间=周转时间/服务时间
}
AverageWT_FCFS=SumWT/Num;//平均周转时间 AverageWWT_FCFS=SumWWT/Num;//平均帯权周转时间 for(i=0;i
cout
SumWT+=WholeTime[i];//计算总的周转时间
SumWWT+=WeightWholeTime[i];//计算总的帯权周转时间
}
}
cout3.2短进程优先算法
void SJF()//找已经到达的且服务时间最短的进程(假定输入的进程是按照到达时间先后输入的) {
cout
NowTime=ArrivalTime[0]+ServiceTime[0];//计算第一次的NowTIme FinishTime[0]=NowTime;//计算第一个进程的完成时间 ServiceTime_SJF[0]=1000;//赋初值。
cout
行。";
int allin=0,j,k;
for(i=1;i
k=1;min=0;
if(allin==0)//找到已经到达的进程个数 {
j=0;
while(ArrivalTime[j]
j++; if(j>=Num)
}
}
}
allin=1;
else { }
j=j-1;//j是已经到达的进程数
while(k
if(ServiceTime_SJF[k]==0)//进程的服务时间如果等于0,则跳过j=Num;
该进程
k++;
else {
if(ServiceTime_SJF[min]>ServiceTime_SJF[k])//比较,找到
服务时间最短的进程
}
for(i=0;i
}
ServiceTime_SJF[min]=0;//找完后置零,便于下一次循环时使用 NowTime+=ServiceTime[min];//累加当前时间 FinishTime[min]=NowTime;//完成时间
}
min=k;
k++;
带权周转时间
}
AverageWT_SJF=SumWT/Num;//平均周转时间 AverageWWT_SJF=SumWWT/Num;//平均带权周转时间
cout
帯
权
周
转
时
间
:
WholeTime[i]=FinishTime[i]-ArrivalTime[i];
WeightWholeTime[i]=(double)WholeTime[i]/ServiceTime[i]; SumWT+=WholeTime[i]; SumWWT+=WeightWholeTime[i];
"
"
for(i=1;i
cout
始运行 "
帯
权
周
转
时
间
:
"
4. 设计内容 4.1 输入进程信息
}
cout
4.2 先到先服务算法输出
4.3 短进程优先算法输出
5. 总结
通过此次课程设计,更深入的理解了各个进程调度算法,及实现过程。增进了VC 编程的水平。对进程或作业先来先服务、短作业优先算法以及进程调度的概念和算法,有了更深入的认识!初步理解了操作系统对于作业处理的基本思想!并加深了我对于操作系统理论的理解。在此过程中,遇到了困难,能及时请教同学,查询相关资料,及时解决了问题,但仍有不足之处,将会在今后学习中更加努力。
参考文献
[1] 张尧学主编.计算机操作系统教程(第三版).北京:清华大学出版社,2006
[2] 张尧学编.计算机操作系统教程(第三版)习题解答与实验指导.北京:清华大学出版社,2006
[3] 汤子瀛主编.计算机操作系统(第三版).西安:西安电子科技大学出版社,2001 [4] 张坤等编.操作系统实验教程.北京:清华大学出版社,2008 [5] 张丽芬等编.操作系统实验教程.北京:清华大学出版社,2006 [6] 屠祁等编. 操作系统基础(第三版).北京:清华大学出版社,2000 [7] 冯耀霖等编. 操作系统. 西安:西安电子科技大学出版社,2001
[8] 左万历.计算机操作系统教程(第二版).北京:高等教育出版社,2004