操作系统课程设计-对处理机的调度

福建农林大学金山学院

课程设计报告

课程名称: 课程设计题目: 姓 名:

系: 专 业: 年 级: 学 号: 指导教师: 职 称:

《操作系统》 对处理机的调度

信息与机电工程系 计算机科学与技术

李盼盼 助教

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


相关文章

  • 进程调度模拟设计--先来先服务.最高响应比优先调度算法
  • 课 程 设 计 题 目 学 院 专 业 班 级 姓 名 指导教师 进程调度模拟设计-先来先服务.最高响应比优先调度算法 计算机科学与技术学院 计算机科学与技术专业 计算机科学与技术0902班 庞竞强 郭羽成 2011 年 01 月 12 日 ...查看


  • 课程设计--磁盘调度算法及代码的实现
  • 课程设计报告 <计算机操作系统> 课程设计题目: 磁盘调度算法 学生姓名: 专 业: 班 级: 学 号: 指导教师: 2014年01月10日 目 录 1.需求分析 „„„„„„„„„„„„„„„„„„„„„„„„„„„„01 2 ...查看


  • 采用高响应比算法的进程调度程序
  • 操作系统课程设计 采用高响应比算法的进程调度程序 学 院 专 业 学 生 姓 名 学 号 指导教师姓名 2014 年 3月 18日 目 录 一. 实验题目 .......................................... ...查看


  • 磁盘调度算法的编程实现及评估
  • 操作系统课程设计报告 --磁盘调度算法的编程实现及评估 姓名 学号 日期 一.课程设计题目 磁盘调度算法的编程实现及评估 二.课程设计目的 通过编程实现磁盘调度算法设计,加深理解磁盘调度算法的理解及提高编程能力. 三.课程设计内容 编程实现 ...查看


  • 排课软件的使用
  • 摘要:排课调度系统是高校教学管理工作的重要部分,本文在明确系统需求分析的基础上,利用排课软件完成大量繁杂的数据处理工作直到自动生成全校课程表,系统的实现很好地保障了教学任务的有序运行. 关键字:排课软件 优化 教学任务 教学调度系统 课程 ...查看


  • 铁道交通运营管理简述
  • 铁道交通运营管理(铁道运输方向)专业 A.培养目标:本专业培养适应国家铁路运输发展需要的德.智.体.美全面发展的具有铁路运输组织.客运.货运.行车基本知识和基本技能的高级应用型技术人才.本专业毕业生有扎实的基础理论知识,较强的实际工作能力, ...查看


  • 磁盘调度实验报告
  • 磁盘调度 一 .实验目的: 磁盘是高速.大容量.旋转型.可直接存取的存储设备.它作为计算机系统的辅助存储器,担负着繁重的输入输出工作,在现代计算机系统中往往同时会有若干个要求访问磁盘的输入输出要求.系统可采用一种策略,尽可能按最佳次序执行访 ...查看


  • 清华大学课程学习
  • 电机工程与应用电子技术系 00220012 高档单片机原理及应用 2学分 32学时 The Principles and Application of Advanced Single-Chip Computer 本课程受日本瑞萨科技公司资助 ...查看


  • 进程调度的设计与实现
  • 院 系:计 算 机 学 院 实验课程:计算机操作系统实验 实验名称:进程调度的设计与实现 指导老师:陈红英 开课时间:2011 - 2012年度第 2学期 专 业:网络工程 班 级:10 级5班 学 生:袁沛权 学 号:[1******** ...查看


热门内容