文档库 最新最全的文档下载
当前位置:文档库 › 高响应比调度算法

高响应比调度算法

高响应比调度算法
高响应比调度算法

淮北师范大学

计算机学院实验设计报告

操作系统程序设计

实验报告

实验课题:高响应比调度算法

所属学院:计算机科学与技术

所属班级:11级计算机非师

姓名:李志国

辅导老师:施汉琴

2014年3月20日

目录

实验设计课题 (03)

课程设计目的 (03)

课程设计内容 (03)

课程设计要求 (04)

相关知识介绍 (05)

程序功能说明 (06)

各段程序说明 (07)

设计的流程图 (09)

程序执行截图 (11)

源程序的代码 (14)

实验小结体会 (19)

实验设计课题

设计题目:采用高响应比算法的进程调度程序

指导老师:施汉琴

课程设计目的

操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。

?进一步巩固和复习操作系统的基础知识。

?培养学生结构化程序、模块化程序设计的方法和能力。

?提高学生调试程序的技巧和软件设计的能力。

?提高学生分析问题、解决问题以及综合利用 C 语言进行程

序设计的能力。

课程设计内容

问题分析:

在批处理系统中,短作业优先算法是一种比较好的算法,其主要的不足之处是长作业的运行得不到保证。于是我们想到了一种办法解决这个问题,就是引用动态优先权、并使作业的优先级随着等待时间的增加而以速率a提高,长作业在等待一定的时间后,必然有机会分配到处理机,这样长作业也得到了运行。由此可见:

(1)如果作业的等待时间相同,则要求服务的时间越短,其优先权越高,因此该算法有利于短作业。

(2)当要求服务的时间相同时,作业的优先权取决与其等待的时间,等待时间越长,其优先权越高,因而它实现的是先来先服务。

(3)对于长作业,作业的优先权可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高,从而也可以获得处理机。

设计内容:

设计并实现一个采用高响应比算法的进程调度演示程序,响应比 R 定义如下:RWT/T1W/T 其中 T 为该作业估计需要的执行时间,为作业在后备状态队列中的等待时 W间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中 R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W/T 也就随着增加,也就有机会获得调度执行。这种算法是介于 FCFS 和 SJF 之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF 法,从而采用 HRRN 方式时其吞吐量将小于采用 SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。

课程设计要求

1.每一个进程有一个PCB,其内容可以根据具体情况设定。

2.进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定

3.可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、

时间片长度、进程优先级的初始化

4.可以在运行中显示各进程的状态:就绪、执行(由于不要求设置互斥资

源与进程间的同步关系,故只有两种状态)

5.采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状

态以及相应的阻塞队列

6.有性能比较功能,可比较同一组数据在不同调度算法下的平均周转时间

7.具有一定的数据容错性

相关知识介绍

定义

高响应比优先调度算法的基本思想是把CPU分配给就绪队列中响应比最高的进程。

基本思想

短作业优先调度算法+ 动态优先权机制,既考虑作业的执行时间也考虑作业的等待时间,综合了先来先服务和最短作业优先两种算法的特点。

原理

高响应比优先调度算法既考虑作业的执行时间也考虑作业的等待时间,综合了先来先服务和最短作业优先两种算法的特点。该算法中的响应比是指作业等待时间与运行比值,响应比公式定义如下:响应比=(等待时间+要求服务时间)/ 要求服务时间,即RR=(w+s)/s=1+w/s,因此响应比一定是大于1的。

如实例:

某系统有3个作业,系统确定它们在全部到达后,再开始采用响应比高者优先的调度算法,则它们的调度顺序是什么?各自的周转时间是什么?

作业号提交时间运行时间

1 8.8 1.5

2 9.0 0.4

3 9.5 1.0

(1)如果都到达再算的话,等待时间=最后一个的提交时间-该作业到达的时刻

1: 9.5-8.8=0.7

2: 9.5-9=0.5

3: 0

所以响应比为(等待时间+要求服务时间)\要求服务时间=等待时间/要求服务时间+1

1: 0.7/1.5+1=1.47

2: 0.5/0.4+1=2.25

3:1

所以2先运行,2从9.5开始运行到9.9结束;

再以9.9时刻算响应比:

1:(9.9-8.8)/1.5+1=1.73

3:(9.9-9.5)/1+1=1.4

所以2执行完后1开始执行,从9.9执行到11.4结束

最后一个是3:从11.4开始执行到12.4结束

(2)如果不是都到达后才运行,那么在8.8时只有作业1到达,所以先运行作业18.8+1.5(运行时间)=10.3到10.3的时候作业1完成,此时作业2和3都已到达所以计算其响应比(等待时间+要求服务时间)\要求服务时间=等待时间/要求服务时间+1

作业2:(10.3-9.0)/0.4+1=4.325

作业3:(10.3-9.5)/1.0+1=1.8

所以先运行作业210.3+0.4=10.7到10.7运行

作业310.7+1.0=11.7到11.7结束

优缺点

短作业与先后次序的兼顾,且不会使长作业长期得不到服务响应比计算系统开销,增加系统开销。

适用场合

批处理系统。

程序功能说明

程序通过定义调用函数,杜如用户从键盘输入的需要服务的进程的各项参数,并进行调度算法模拟。首相对读入的进程各个参数进行保存,而后进行判断是否进入内存之中,如果在内存之中则进行高响应比优先的的方式进行排队服务运行,如果没有进入内存,则进程等待。直到所有进程服务运行完毕为止。各个

函数都有各自的功能,相互协调进行整体函数功能的实现。采用响应比高者优先调度算法进行调度时,必须计算出系统中所有满足必要条件作业的响应比,从中选择响应比最高的一个作业装入主存储器分配资源。由于是实验,所以就将作业控制块出队,并输出作业名代替装入处存储器,同时修改系统的资源数量。

各段程序说明

首先进行函数相关参数定义,具体函数如下:

struct P

{

char name[10];

float arrivetime;

float servicetime;

float starttime;

float finishtime;

float zztime;

float dqzztime;

};

定义函数参数中进程的名字“name”、进程到达的时间“arrivetime”、进程所需服务时间“servicetime”、以及处理时间“starttime”和完成时间“finishtime”。

Input函数接收用户键盘输入的进程各个参数并作为函数后期执行的引用数据,包括进程的名称、到达时间、要求服务时间。

for(i=0;i<=N-1;i++)

{

printf("请输入第%d个进程的进程名: \n",i+1);

scanf("%s",&p[i].name);

printf("请输入第%d个进程的到达时间:\n",i+1);

scanf("%f",&p[i].arrivetime);

printf("请输入第%d个进程的要求服务的时间:\n",i+1);

scanf("%f",&p[i].servicetime);

由此函数可实现对用户所输入的数据的接收功能。

sort(P *p,int N),run(P *p,int N)函数实现对进程响应比的计算和排序。首先利用公式“优先权=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间”计算用户输入的进程的响应比,函数实现如下:

for(int i=0;i

for(int j=i+1;j

if(p[i].arrivetime>p[j].arrivetime)

{

P temp;

temp=p[i];

p[i]=p[j];

p[j]=temp;

}

int k;

for(k=0;k<=N-1;k++)

{

if(k==0)

{

p[k].starttime=p[k].arrivetime;

p[k].finishtime=p[k].arrivetime+p[k].servicetime;

}

else

{

p[k].starttime=p[k-1].finishtime;

p[k].finishtime=p[k-1].finishtime+p[k].servicetime;

}

}

for(k=0;k<=N-1;k++)

{

p[k].zztime=p[k].finishtime-p[k].arrivetime;

p[k].dqzztime=p[k].zztime/p[k].servicetime;

}

计算的响应比进行比较,结果根据需要进行排序响应比高的进程排在前面,响应比低的进程排在后面,这样就可以使响应比搞得进程获得较高的优先权,能够先运行。

最后通过函数Grade(P *p,int N)来实现输出进程在各个时间短的运行状况,包括正在运行,正在等待和已到达状态。

设计的流程图

程序设计总流程图:

高响应比函数执行过程流程图:

程序执行截图

用户手动输入进程的各项信息:

确定后程序执行输出如下图:

源程序的代码

#include

struct P

{

char name[10];

float arrivetime;

float servicetime;

float starttime;

float finishtime;

float zztime;

float dqzztime;

};

P a[100];

void input(P *,int);

void Traverse(P *,int);

void sort(P *,int);

void Grade(P *,int);

void main()

{

int N;

printf("\n");

printf("\t\t\t模拟高响应比调度算法\n");

printf("\n");

printf("NOW!模拟开始:\n");

printf("\n");

printf("请输入需要服务的进程的个数:\n");

scanf("%d",&N);

Grade(a,N);

}

void input(P *p,int N)

{

int i;

for(i=0;i<=N-1;i++)

{

printf("请输入第%d个进程的进程名: \n",i+1);

scanf("%s",&p[i].name);

printf("请输入第%d个进程的到达时间:\n",i+1);

scanf("%f",&p[i].arrivetime);

printf("请输入第%d个进程的要求服务的时间:\n",i+1);

scanf("%f",&p[i].servicetime);

}

}

void Traverse(P *p,int N)

{

int k;

printf("\n");

printf("\n");

printf("进程运行的顺序为:");

printf("%s",p[0].name);

for(k=1;k

{

printf("->%s",p[k].name);

}

printf("\n");

printf("\n");

printf("进程运行的详细信息如下:\n");

printf("名称到达时间服务时间开始时间结束时间\n");

for(k=0;k<=N-1;k++)

{

printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n",p[k].name,p[k].arrivetime,p[k].ser vicetime,p[k].starttime,p[k].finishtime);

}

printf("名称周转时间带权周转时间\n");

for(k=0;k<=N-1;k++)

{

printf("%s\t%-.2f\t%-.2f\t\n",p[k].name,p[k].zztime,p[k].dqzztime);

}

}

void sort(P *p,int N)

{

for(int i=0;i

for(int j=i+1;j

if(p[i].arrivetime>p[j].arrivetime)

{

P temp;

temp=p[i];

p[i]=p[j];

p[j]=temp;

}

}

void run(P *p,int N)

{

int k;

for(k=0;k<=N-1;k++)

{

if(k==0)

{

p[k].starttime=p[k].arrivetime;

p[k].finishtime=p[k].arrivetime+p[k].servicetime;

}

else

{

p[k].starttime=p[k-1].finishtime;

p[k].finishtime=p[k-1].finishtime+p[k].servicetime;

}

}

for(k=0;k<=N-1;k++)

{

p[k].zztime=p[k].finishtime-p[k].arrivetime;

p[k].dqzztime=p[k].zztime/p[k].servicetime;

}

}

void Grade(P *p,int N)

{

float arrivetime=0;

float servicetime=0;

float starttime=0;

float finishtime=0;

float zztime=0;

float dqzztime=0;

sort(p,N);

printf("\n");

printf("\n");

for(int m=0 ; m

{

if(m==0)

{

p[m].finishtime=p[m].arrivetime+p[m].servicetime;

printf("在第%-.0f时刻进程信息\n",p[m].arrivetime);

}

else

{

p[m].finishtime=p[m-1].finishtime+p[m].servicetime;

printf("在第%-.0f时刻进程信息\n",p[m-1].finishtime);

}

int i=0,n;

printf("%s正在运行\n",p[m].name);

for(n=m+1;n<=N-1;n++)

{

if(p[n].arrivetime<=p[m].finishtime)

{

printf("%s进程已到达\n",p[n].name);

i++;

}

else

printf("%s进程未到达\n",p[n].name);

}

for(int l=0;l

{

printf("%s进程已完成\n",p[l].name);

}

float max=(p[m].finishtime-p[m+1].arrivetime)/p[m+1].servicetime; int follow=m+1;

for(int k=m+1;k

{

if(max<=(p[m].finishtime-p[k+1].arrivetime)/p[k+1].servicetime) {

max=(p[m].finishtime-p[k+1].arrivetime)/p[k+1].servicetime;

follow=k+1;

}

}

P temp;

temp=p[m+1];

p[m+1]=p[follow];

p[follow]=temp;

}

run(p,N);

Traverse(p,N);

}

实验小结体会

本次课程设计题目较为简单,主要是对优先级和最高响应比这两个算法的理解和对进程调度的功能以及进程调度算法有深入的理解。在这次的课程设计中,让我感觉较为不满意的地方是,在课程设计开始之前我对于最高响应比优先法理解不熟悉,导致了响应比的计算错误,从而加大了完成代码的时间量。对于这次出现的这个问题,使我有了对程序设计的严谨性,课本基础知识的理解程度上有了更深刻的认识,也让我明白到了基础知识的重要性。完成此次课程实际之后,我对进程调度模拟设计的各种算法有了更进一步的理解,也加深了我对于C++面向对象方面的掌握,在编写程序中所遇到的问题让我有了对操作系统有了迫切要更深层次的掌握,并操作系统这门课程实在是很重要的一门课程。

通过本次实验对用高响应比算法的优先调度算法有了更深入的理解和掌握,进一步巩固和复习操作系统的基础知识,更进一步的了解了结构化模块化程序设计的方法,提高了调试程序的技巧。

操作系统高响应比调度算法

操作系统 采用高响应比算法 课程设计 学号: 姓名: 专业: 班级: 指导老师: 目录 一、实验题目 (1) 二、课程设计的目的............................................................................. 错误!未定义书签。 三、设计内容 (1) 四、设计要求 (1) 五、主要数据结构及其说明................................................................. 错误!未定义书签。 六、测试数据设计及测试结果分析 (2) 七、程序运行结果 (2)

八、实验体会 (4) 九、源程序文件 (4) 实验题目 采用高响应比算法的进程调度程序 课程设计的目的 操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合一起,独立分析和解决实际问题的机会。 进一步巩固和复习操作系统的基础知识。 培养学生结构化程序、模块化程序设计的方法和能力。 提高学生调试程序的技巧和软件设计的能力。 提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。 设计内容 设计并实现一个采用高响应比算法的进程调度演示程序 设计要求 1. 每一个进程有一个PCB,其内容可以根据具体情况设定。 2. 进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定 3. 可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、进程优先级的初始化 4. 可以在运行中显示各进程的状态:就绪、执行(由于不要求设置互斥资源与进程间的同步关系,故只有两种状态) 5. 采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态以及相应的阻塞队列 6. 有性能比较功能,可比较同一组数据在不同调度算法下的平均周转时间 7. 具有一定的数据容错性 五、流程图

先来先服务+响应比算法

实验报告书 课程名:《操作系统原理》题目:进程调度 班级: 学号: 姓名:

一、实验目的 进程是操作系统最重要的概念之一,进程调度是操作系统内核的重要功能,本实验要求用C/C++/Java语言编写一个进程调度模拟程序,使用优先级或时间片轮转法实现进程调度。本实验可加深对进程调度算法的理解。 二、实验内容 1、设计有5个进程并发执行的模拟调度程序,每个程序由一个PCB表示。 2、模拟调度程序可任选两种调度算法实现。 3、程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过 程。 三、实验说明 1.先来先服务算法 FCFS调度算法需分别列出各进程的到达时间(arrivetime),要求服务时间(servertime),开始执行时间(starttime),完成时间(endtime)。并计算出相应的周转时间(turnroundtime),平均周转时间(avturnaroundtime)。这些数据都在程序中以变量的形式出现。 FCFS调度算法中的进程运行顺序由进程的到达时间所决定,即先到达的进程无论服务时间的长短优先运行。这种算法有利于长作业进程而不利于短作业进程。 2.最高响应比算法 高响应比算法是一种为各个进程引入了动态优先权的算法。优先权=(等待时间+要求服务时间)/要求服务时间。这使得进程的优先级一直随着等待时间的增加而以速率a 提高。因此高响应比算法与其他几种算法的不同在于短作业和先到达的作业会优先得到处理,但长作业在经过一定的等待时间之后,必然会有机会分配到处理机,因此长、短作业的处理得到了更加合理的分配。该算法既照顾了短作业,又考虑到了作业到达的先后顺序,不会使得长作业得不到服务,实现了一种较好的折衷。由于每次进行进程调度前都需要计算相应响应比,因此会增加系统开销。 3.实验程序流程图

高响应比调度算法

淮北师范大学 计算机学院实验设计报告 操作系统程序设计 实验报告 实验课题:高响应比调度算法 所属学院:计算机科学与技术 所属班级:11级计算机非师 姓名:李志国 辅导老师:施汉琴 2014年3月20日

目录 实验设计课题 (03) 课程设计目的 (03) 课程设计内容 (03) 课程设计要求 (04) 相关知识介绍 (05) 程序功能说明 (06) 各段程序说明 (07) 设计的流程图 (09) 程序执行截图 (11) 源程序的代码 (14) 实验小结体会 (19)

实验设计课题 设计题目:采用高响应比算法的进程调度程序 指导老师:施汉琴 课程设计目的 操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。 ?进一步巩固和复习操作系统的基础知识。 ?培养学生结构化程序、模块化程序设计的方法和能力。 ?提高学生调试程序的技巧和软件设计的能力。 ?提高学生分析问题、解决问题以及综合利用 C 语言进行程 序设计的能力。 课程设计内容 问题分析: 在批处理系统中,短作业优先算法是一种比较好的算法,其主要的不足之处是长作业的运行得不到保证。于是我们想到了一种办法解决这个问题,就是引用动态优先权、并使作业的优先级随着等待时间的增加而以速率a提高,长作业在等待一定的时间后,必然有机会分配到处理机,这样长作业也得到了运行。由此可见:

(1)如果作业的等待时间相同,则要求服务的时间越短,其优先权越高,因此该算法有利于短作业。 (2)当要求服务的时间相同时,作业的优先权取决与其等待的时间,等待时间越长,其优先权越高,因而它实现的是先来先服务。 (3)对于长作业,作业的优先权可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高,从而也可以获得处理机。 设计内容: 设计并实现一个采用高响应比算法的进程调度演示程序,响应比 R 定义如下:RWT/T1W/T 其中 T 为该作业估计需要的执行时间,为作业在后备状态队列中的等待时 W间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中 R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W/T 也就随着增加,也就有机会获得调度执行。这种算法是介于 FCFS 和 SJF 之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF 法,从而采用 HRRN 方式时其吞吐量将小于采用 SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。 课程设计要求 1.每一个进程有一个PCB,其内容可以根据具体情况设定。 2.进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定 3.可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、 时间片长度、进程优先级的初始化 4.可以在运行中显示各进程的状态:就绪、执行(由于不要求设置互斥资 源与进程间的同步关系,故只有两种状态) 5.采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状 态以及相应的阻塞队列

操作系统最高响应比优先调度算法实验报告(广西民大)

进程调度模拟设计 ——最高响应比优先调度算法实验报告 一、实验题目与要求 1、实验题目:加深对作业概念的理解。深入了解批处理系统如何组织作业、管理作业和调度作业。 2、实验要求:编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。实现具体包括:首先确定作业控制块的容和组成方式;然后完成作业调度;最后编写主函数,对所做工作进行测试。 二、总的设计思想及语言环境、工具 1、总的设计思想: 最高响应比优先法(HRRN)是对FCFS方式和SJF 方式的一种综合平衡。HRRN 调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。 响应比R定义如下: R=(W+T)/T=1+W/T 其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。 每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W/T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF 之间的一种折中算法。由

于长作业也有机会投入运行,在同一时间处理的作业数显然要少于SJF 法,从而采用HRRN 方式时其吞吐量将小于采用SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。 2、语言环境: 计算机基本配置要求: 操作系统:WIN 98/2000/XP/2003 等Windows平台 存:256MB及以上 主存64KB(Memory)(以KB为单位分配) 开发语言:Visual C++ 6.0 3、工具:Windows平台+Visual C++ 6.0 三、数据结构与模块说明(功能与框图) 作业调度的实现主要有两个问题:一个是如何将系统中的作业组织起来;另一个是如何进行作业调度。 为了将系统中的作业组织起来,需要为每个进入系统的作业建立档案以记录和作业相关的信息,例如,作业名、作业所需资源、作业执行时间、作业进入系统的时间、作业信息在存储器中的位置、指向下一个作业控制块的指针等信息。这个记录作业相关信息的数据块称为作业控制块(JCB ),并将系统中等待作业调度的作业控制块组织成一个队列,这个队列称为后备队列。当进行作业调度时,从后备队列中查找选择作业。 由于实验中没有实际作业,作业控制块中的信息容只使用了实验中需要的数据。作业控制块中首先应该包括作业名;其次是作业所需资源(存大小、打印机的数量和磁带机的数量);采用响应比高者优先作业调度算法,为了计算响应比,还需要有作业的估计执行时间、作业在系统中的等待时间;另外,指向下一个作业控制块的指针必不可少。

高响应比调度算法(c语言程序实现)

ame,&p[i].arrivetime,&p[i].servicetime); } } void Print(struct zgxyb *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) {int k; printf("run order:"); printf("%s",p[0].name); for(k=1;k%s",p[k].name); } printf("\nthe process's information:\n"); printf("\nname\tarrive\tservice\tstart\tfinish\tzz\tdqzz\n"); for(k=0;k<=N-1;k++) { printf("%s\t%\t%\t%\t%\t%\t%\t\n",p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[ k].finishtime,p[k].zztime,p[k].dqzztime); } } rrivetime

操作系统复习题(第三章)

第三章处理机调度与死锁 1.在三种基本类型的操作系统中,都设置了(),在批处理系统中还应设置(),在分时系统中除了()外,通常还设置了(),在多处理机系统中则还需设置() A 剥夺调度 B 作业调度 C 进程调度 D 中级调度 E 多处理机调度 2. 在面向用户的调度准则中,()是选择实时调度算法的重要准则,()是选择分时系统中进程调度算法的重要准则,()是批处理系统中选择作业调度算法的重要准则,而()准则是为了照顾紧急作业用户的要求而设置的。 A 响应时间快 B 平均周转时间短 C 截止时间的保证 D 优先权高的作业能获得优先服务 E 服务费低 3. 作业调度是从处于()状态的队列中选取作业投入运行。 A 运行 B 提交 C 后备 D 完成 E 阻塞 F 就绪 4.()是指作业进入系统到作业完成所经历的时间间隔。 A 响应时间 B 周转时间 C 运行时间 D 等待时间 E 触发时间 5. ()算法不适合作业调度。 A 先来先服务 B 短作业优先 C 最高优先权优先 D 时间片轮转 6. 下列算法中,()只能采用非抢占调度方式,()只能采用抢占调度方式,而其余的算法即可采用抢占方式,也可采用非抢占方式。 A 高优先权优先法 B 时间片轮转法 C FCFS调度算法

D 短作业优先算法 7. 如果为每一个作业只建立一个进程,则为了照顾短作业用户,应采用();为照顾紧急作业的用户,应采用();为能实现人机交互作用应采用();为了兼顾短作业和长时间等待的作业,应采用();为了使短作业、长作业以及交互作业用户都比较满意,应采用();为了使作业的平均周转时间最短,应采用() A FCFS调度算法 B 短作业优先 C 时间片轮转法 D 多级反馈队列调度算法 E 基于优先权的剥夺调度算法 F 高响应比优先 8. 下述解决死锁的方法中,属于死锁预防策略的是(),属于死锁避免的策略是() A 银行家算法 B 资源有序分配法 C 资源分配图化简法 D 撤销进程法 9. 死锁的预防是通过破坏产生死锁的四个必要条件来实现的。下列方法中,()破坏了“请求与保持”条件,()破坏了“循环等待”条件。 A 银行家算法 B 一次性分配策略 C 资源有序分配策略 D SPOOLing技术 10. 从下面关于安全状态和非安全状态的论述中,选出一条正确的论述。 A 安全状态是没有死锁的状态,非安全状态是有死锁的状态。 B安全状态是可能有死锁的状态,非安全状态也是可能有死锁的状态。 C安全状态是可能没有死锁的状态,非安全状态是有死锁的状态。 D安全状态是没有死锁的状态,非安全状态是可能有死锁的状态。

响应比最高者优先算法

实验题目:响应比最高者优先算法 一、实验目的 熟悉操作系统作业管理步骤,用C语言编程模拟实现响应比最高者优先算法。 二、实验环境及仪器设备 硬件环境:IBM-PC或兼容机 软件环境:C语言编程环境 三、实验算法思想 最高响应比优先法(HRN,Highest Response_ratio Next)是对FCFS方式和SJF方式的一种综合平衡。FCFS方式只考虑每个作业的等待时间而未考虑执行时间的长短,而SJF方式只考虑执行时间而未考虑等待时间的长短。因此,这两种调度算法在某些极端情况下会带来某些不便。HRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。 响应比R定义如下:R =(W+T)/T = 1+W/T 其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W / T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法,从而采用HRN方式时其吞吐量将小于采用SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加 (1)等待时间相等时。则服务时间越短,优先级越高,符合SJF思想。 (2)服务时间相等时,则等待时间越长,优先级越高,符合FCFS思想。 (3)对于长作业,只要其等待时间足够长,也能获得处理机。 四、实验步骤 实验中,作业控制块及队列的数据结构定义如下: struct task { string name; /*作业号*/ int arrTime; /* 作业到达时间*/ int serTime; /*作业要求服务时间*/ int waiTime; /*等待时间*/ int begTime; /*开始运行时间*/ int finTime; /*结束运行时间*/

最高响应比调度算法代码

实验四模拟处理机HRRN调度算法 一、实验目的:用c++设计HRRN调度算法程序。 二、实验内容:本实验随机输入的进程个数、进程名称、进程提交到系统的时间、进程运行所需时间。通过模拟程序。显示以下信息: 1)处理机对进程的调度过程。 2)计算这N个进程的平均周转时间。 三、HRRN(最高响应比调度算法)原理 最高响应比调度:在每次调度作业时,先计算后备队中每个作业的响应比,然后挑选响应比高者投入运行。响应比R定义: R=(w+S)/S (R:响应比,W=等待时间,S=运行时间) 响应比R= 周转时间/ 运行时间 =(运行时间+ 等待时间)/ 运行时间 = 1 +(等待时间/ 运行时间) 四、示例

如:输入 进程个数:5 进程名称到达系统时间所需服务时间 A 0 3 B 2 6 C 4 4 D 6 5 E 8 2 显示运行结果: 进程名称到达系统时间所需服务时间开始时间结束时间 A 0 3 0 3 B 2 6 3 9 C 4 4 9 13 E 8 2 13 15 D 6 5 15 20 5个进程的平均周转时间:(3+7+9+7+14)/5=8

五、运行结果 六、代码 #include #include typedef struct Node { char name[10]; int into; int runtime; int start; int finish;

int status; int hrrn; int sum; }Node; int select(Node node[],int n) { int i,flag=0; for(i=0;i

经典调度算法的实现

经典调度算法的实现 学院: 专业: 姓名: 学号: 指导老师: 2014-3-18

目录 一、课设简介 (3) 1. 课程设计题目 (3) 2. 课程设计目的 (3) 3. 课程设计的内容 (3) 4. 课程设计要求 (3) 二、原理分析 (4) 1. 先来先服务算法介绍与分析 (4) 2. 短作业优先算法介绍与分析 (4) 3. 高响应比优先调度算法介绍与分析 (4) 4. 流程图 (5) 三、主要功能模块 (7) 1. 先来先服务算法实现代码 (7) 2. 短作业优先算法实现代码 (8) 3. 高响应比优先调度算法实现代码 (8) 四、测试与运行结果 (9) 1. 主界面 (9) 2. 先来先服务算法测试 (10) 3. 短作业优先算法测试 (11)

4. 高响应比优先调度算法测试 (13) 五、总结 (16) 六、参考文献 (16) 七、附录 (16)

一、课设简介 1.课程设计题目 经典调度算法的实现 2.课程设计目的 操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。 ●进一步巩固和复习操作系统的基础知识。 ●培养学生结构化程序、模块化程序设计的方法和能力。 ●提高学生调试程序的技巧和软件设计的能力。 ●提高学生分析问题、解决问题以及综合利用 C 语言进行程序设计的能力。 3.课程设计的内容 实现以下几种调度算法 1 FCFS 2 SJF 3 高响应比优先调度算法。 4.课程设计要求 1.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。对程序其它部分也进行必要的注释。 2.对系统进行功能模块分析、画出总流程图和各模块流程图。 3.用户界面要求使用方便、简洁明了、美观大方、格式统一。所有功能可以反复使用,最好使用菜单。 4.通过命令行相应选项能直接进入某个相应菜单选项的功能模块。 5.所有程序需调试通过。

时间片轮转、最高响应比优先调度算法剖析

学号: 课程设计 题目时间片轮转、最高响应比优先调度 算法 学院计算机科学与技术 专业 班级 姓名 指导教师吴利军 2013 年 1 月14 日

课程设计任务书 学生姓名: 指导教师:吴利军工作单位:计算机科学与技术学院题目: 进程调度模拟设计——时间片轮转、最高响应比优先调度算法初始条件: 1.预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。 2.实践准备:掌握一种计算机高级语言的使用。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写 等具体要求) 1.模拟进程调度,能够处理以下的情形: ⑴能够选择不同的调度算法(要求中给出的调度算法); ⑵能够输入进程的基本信息,如进程名、到达时间和运行时间等; ⑶根据选择的调度算法显示进程调度队列; ⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。 2.设计报告内容应说明: ⑴需求分析; ⑵功能设计(数据结构及模块说明); ⑶开发平台及源程序的主要部分; ⑷测试用例,运行结果与运行情况分析; ⑸我评价自与总结: i)你认为你完成的设计哪些地方做得比较好或比较出色; ii)什么地方做得不太好,以后如何改正; iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训); iv)完成本题是否有其他方法(如果有,简要说明该方法); v)对实验题的评价和改进意见,请你推荐设计题目。 时间安排: 设计安排一周:周1、周2:完成程序分析及设计。 周2、周3:完成程序调试及测试。 周4、周5:验收、撰写课程设计报告。 (注意事项:严禁抄袭,一旦发现,一律按0分记) 指导教师签名:年月日 系主任(或责任教师)签名:年月日

进程调度模拟设计——优先级法、最高响应比优先调度算法

附件1: 课程设计 进程调度模拟设计——优先级 题目 法、最高响应比优先调度算法 学院计算机科学与技术 专业计算机科学与技术 班级计算机科学与技术 姓名 指导教师 2011 年01 月18 日

课程设计任务书 学生姓名:专业班级:计算机科学与技术 指导教师:工作单位:计算机科学与技术学院 题目: 进程调度模拟设计——优先级法、最高响应比优先调度算法初始条件: 1.预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。 2.实践准备:掌握一种计算机高级语言的使用。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写 等具体要求) 1.模拟进程调度,能够处理以下的情形: ⑴能够选择不同的调度算法(要求中给出的调度算法); ⑵能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等; ⑶根据选择的调度算法显示进程调度队列; ⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。 2.设计报告内容应说明: ⑴课程设计目的与功能; ⑵需求分析,数据结构或模块说明(功能与框图); ⑶源程序的主要部分; ⑷测试用例,运行结果与运行情况分析; ⑸自我评价与总结: i)你认为你完成的设计哪些地方做得比较好或比较出色; ii)什么地方做得不太好,以后如何改正; iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训); iv)完成本题是否有其他方法(如果有,简要说明该方法); v)对实验题的评价和改进意见,请你推荐设计题目。 时间安排: 设计安排一周:周1、周2:完成程序分析及设计。 周2、周3:完成程序调试及测试。 周4、周5:验收、撰写课程设计报告。 (注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记) 指导教师签名:年月日 系主任(或责任教师)签名:年月日

采用高响应比算法的进程调度程序

操作系统课程设计 采用高响应比算法的进程调度程序 学院 专业 学生姓名 学号 指导教师姓名

目录 一、实验题目........................... 错误!未定义书签。 二、课程设计的目的..................... 错误!未定义书签。 三、设计内容........................... 错误!未定义书签。 四、程序功能分析....................... 错误!未定义书签。 五、实验原理 (2) 六、设计要求 (6) 七、程序总设计流程图 (6) 八、程序运行结果及分析................. 错误!未定义书签。 九、小结............................... 错误!未定义书签。 十、源代码 (9)

一、实验题目 采用高响应比算法的进程调度程序 二、课程设计的目的: 了一个既动手又动脑,将课本上的理论知识和实际有机的结合一起,独立分析和解决实际问题的机会。同时提高了同学的动手能力和团队合作精神,充分体现了合作的重要性。编写程序,采用高响应比作业调度算法,首先要确定作业控制块的内容和组成方式;然后完成作业调度,最后编写主函数,对所做工作进行测试。 (1)进一步巩固和复习操作系统的基础知识。 (2)培养学生结构化程序、模块化程序设计的方法和能力。 (3)提高学生调试程序的技巧和软件设计的能力. (4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。操作系统课程设计是计算机专业重要的教学环节,它为学生提供 三、设计内容: 设计并实现一个采用高响应比算法的进程调度演示程序,响应比 R 定义如下: RWT/T1W/T 其中 T 为该作业估计需要的执行时间,为作业在后备状态队列中的等待时 W间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中 R 最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W/T 也就随着增加,也就有机会获得调度执行。这种算法是介于 FCFS 和 SJF 之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于 SJF 法,从而采用 HRRN 方式时其吞吐量将小于采用 SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。 四、程序功能分析 在批处理系统中,短作业优先算法是一种比较好的算法,其主要的不足之处是长作业的运行得不到保证。于是我们想到了一种办法解决这个问题,就是引用动态优先权、并使作业的优先级随着等待时间的增加而以速率a提高,长作业在等待一定的时间后,必然有机会分配到处理机,这样长作业也得到了运行。由此可见: (1)如果作业的等待时间相同,则要求服务的时间越短,其优先权越高,因此该算法有利于短作业。 (2)当要求服务的时间相同时,作业的优先权取决与其等待的时间,等待时间越长,其优先权越高,因而它实现的是先来先服务。 (3)对于长作业,作业的优先权可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高,从而也可以获得处理机。 五、实验原理 高响应比优先调度算法既考虑作业的执行时间也考虑作业的等待时间,综

高(动态)优先权优先的进程调度算法模拟

河南工业大学实验报告 课程计算机操作系统实验名称高(动态)优先权优先的进程调度算法模拟 系别信息科学与工程学院计算机科学系 专业班级实验日期 2012-10-26 姓名学号 教师审批签字 1.实验目的 通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。 2.实验环境 装有操作系统Windows XP和开发工具VC++6.0,内存在256M以上的微机; 或者:装有Linux(Fedora 7)操作系统和gcc编译器,内存在256M以上的微机。3.实验内容 (1)用C语言来实现对N个进程采用动态优先权优先算法的进程调度。 (2)每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段: ●进程标识数ID; ●进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高; ●进程已占用的CPU时间CPUTIME; ●进程还需占用的CPU时间NEEDTIME。当进程运行完毕时,NEEDTIME变为0; ●进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进 程将进入阻塞状态; ●进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片 后,进程将转换成就绪状态; ●进程状态STATE;(READY, RUNNING, BLOCK, FINISH) ●队列指针NEXT,用来将PCB排成队列。 (3)优先数改变的原则: ●进程在就绪队列中呆一个时间片,优先数增加1; ●进程每运行一个时间片,优先数减3。 (4)假设在调度前,系统中有5个进程,它们的初始状态如下: ID 0 1 2 3 4 PRIORITY 9 38 30 29 0 CPUTIME 0 0 0 0 0 NEEDTIME 3 3 6 3 4 STARTBLOCK 2 -1 -1 -1 -1

调度算法总结

调度算法总结 例:在下表中给出进程的到达时间、执行时间和优先级,请给出三种调度算法的进程执行次序和三种调度算法的平均周转时间。这三种调度算法是:短作业优先调度算法、优先级高者优先调度算法和简单轮转法调度算法(简单轮转法中的时间片为2个单位)。 一、先来先服务 先来先服务:按照进程进入就绪队列的先后次序进行选择。是最简单的调度方法。 1.进程运行顺序:P1→P2 →P3 →P4 →P5 2.进程平均运行时间: {(10-0)+(11-2)+(13-3)+(14-5)+(19-5)}/5=10.4 因为P1、P2、P3的到达时间依次递增,所以按照P1、P2、P3

的顺序依次执行;P4、P5的到达时间相同,但是P4的优先级比P5的高,所以先执行P4。 进程运行的分析图: 二、非剥夺的优先级调度算法 非剥夺的优先级调度算法:一旦某个高优先级的进程占有了处理机,就一直运行下去,直到由于自身的原因而主动让出处理机时(任务完成或等待事件)才让另一高优先级进程运行。 1.进程运行顺序:P1→P4 →P5 →P3→P2 2.进程平均运行时间: {(10-0)+(19-2)+(18-3)+(11-5)+(16-5)}/5=11.8 因为P1的到达时间是0s,所以P1占有了处理机,然后剩下的按照优先级的大小依次执行,它的顺序是:P4、P5、P3、P2.

三、可剥夺的优先级调度算法 可剥夺的优先级调度算法:任何时刻都严格按照高优先级进程在处理机上运行的原则进行进程的调度,或者说,在处理机上运行的进程永远是就绪进程队列中优先级最高的进程。 1.进程运行顺序:P1→P4→P1→P5→P3→P2 2.进程平均运行时间: {(11-0)+(19-2)+(18-3)+(6-5)+(16-5)}/5=11 因为P1到达时间是0s,所以先执行P1,经过2s后,P2到达,但是由于P2的优先级低于P1,所以仍由P1继续执行,同理P3也一样;但经过5s后,P4、P5到达,由于P4、P5优先级均高于P1,且P4优先级高于P5,所以先执行P4,等P4执行完以后,再执行P1,然后按照优先级顺序依次执行P5、P3、P2。

进程调度模拟设计——先来先服务、最高响应比优先调度算法

学号:012091034001 课程设计 题目进程调度模拟设计——先来先服 务、最高响应比优先调度算法学院计算机科学与技术 专业计算机科学与技术 班级计算机009班 姓名旭 指导教师汪祥莉 2012 年 1 月9 日

课程设计任务书 学生姓名:旭专业班级:计算机009 指导教师:汪祥莉工作单位:计算机科学与技术学院题目: 进程调度模拟设计——先来先服务、最高响应比优先调度算法初始条件: 1.预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。 2.实践准备:掌握一种计算机高级语言的使用。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写 等具体要求) 1.模拟进程调度,能够处理以下的情形: ⑴能够选择不同的调度算法(要求中给出的调度算法); ⑵能够输入进程的基本信息,如进程名、到达时间和运行时间等; ⑶根据选择的调度算法显示进程调度队列; ⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。 2.设计报告内容应说明: ⑴课程设计目的与功能; ⑵需求分析,数据结构或模块说明(功能与框图); ⑶源程序的主要部分; ⑷测试用例,运行结果与运行情况分析; ⑸自我评价与总结: i)你认为你完成的设计哪些地方做得比较好或比较出色; ii)什么地方做得不太好,以后如何改正; iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训); iv)完成本题是否有其他方法(如果有,简要说明该方法); v)对实验题的评价和改进意见,请你推荐设计题目。 时间安排: 设计安排一周:周1、周2:完成程序分析及设计。 周2、周3:完成程序调试及测试。 周4、周5:验收、撰写课程设计报告。 (注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记) 指导教师签名:年月日 系主任(或责任教师)签名:年月日

移动通信中的调度算法

无线资源管理主要包括切换控制、功率控制、接入控制、负荷控制以及分组调度等方面的内容。 无线资源管理是3G系统无线网络控制器(RNC)的重要组成部分,其主要作用是负责空中接口资源的分配和使用,确保用户业务的服务质量、系统规划的覆盖区域以及提高系统容量。在3G的演进过程中,标准化组织3GPP和3GPP2也在不断完善和增强相关技术。对于分组调度算法,一方面要考虑到算法实现的复杂度,另一方面需要注意对系统性能指标的影响,如公平性、时延、业务的服务质量(QoS)等。目前采用比较多的调度算法主要有轮循调度、最大载干比调度、比例公平调度三种类型。 在分组通信中,为了获得统计复用增益,需要多个业务流共享带宽。因此,当多个用户争用资源时,就需要有一种机制来确定服务次序,有效地分配无线资源,这就是分组调度。由于无线信道时变特性、带宽资源有限和移动台功率受限等因素的影响,无线网络中的分组调度算法有别于有线网络。 调度器首先根据信道状态监视/预测模块提供的信道信息和用户的队列状态,依据一定的调度算法,计算出每个用户的优先级,然后根据优先级对用户数据排队,并分配无线资源,最后送到发射机。 1.Round Robin 轮叫调度(Round-Robin Scheduling) 狭义解释: 时间片轮转算法的基本思想是,系统将所有的就绪进程按先来先服务算法的原则,排成一个队列,每次调度时,系统把处理机分配给队列首进程,并让其执行一个时间片。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序根据这个请求停止该进程的运行,将它送到就绪队列的末尾,再把处理机分给就绪队列中新的队首进程,同时让它也执行一个时间片。 广义解释: 时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法是时间片调度。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,,当进程用完它的时间片后,它被移到队列的末尾。 时间片轮转调度中唯一有趣的一点是时间片的长度。从一个进程切换到另一个进程是需要一定时间的--保存和装入寄存器值及内存映像,更新各种表格和队列等。假如进程切换(process switch) - 有时称为上下文切换(context switch),需要5毫秒,再假设时间片设为20毫秒,则在做完20毫秒有用的工作之后,CPU将花费5毫秒来进行进程切换。CPU 时间的20%被浪费在了管理开销上。 为了提高CPU效率,我们可以将时间片设为500毫秒。这时浪费的时间只有1%。但考虑在一个分时系统中,如果有十个交互用户几乎同时按下回车键,将发生什么情况?假设所有其他进程都用足它们的时间片的话,最后一个不幸的进程不得不等待5秒钟才获得运行机会。多数用户无法忍受一条简短命令要5秒钟才能做出响应。同样的问题在一台支持多道程序的个人计算机上也会发生。 结论可以归结如下:时间片设得太短会导致过多的进程切换,降低了CPU效率;而设得太长又可能引起对短的交互请求的响应变差。将时间片设为100毫秒通常是一个比较合理的折衷。 一,基本原理 在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则,排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片.时间片的大小从几ms到

操作系统--最高响应比优先调度算法实验报告(广

操作系统--最高响应比优先调度算法实验报告(广西民大)

进程调度模拟设计 ——最高响应比优先调度算法实验报告 一、实验题目与要求 1、实验题目:加深对作业概念的理解。深入了解批处理系统如何组织作业、管理作业和调度作业。 2、实验要求:编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。实现具体包括:首先确定作业控制块的内容和组成方式;然后完成作业调度;最后编写主函数,对所做工作进行测试。 二、总的设计思想及语言环境、工具 1、总的设计思想: 最高响应比优先法(HRRN)是对FCFS方式和SJF 方式的一种综合平衡。HRRN 调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。 响应比R定义如下: R=(W+T)/T=1+W/T 其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。 每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W/T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF 之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF 法,从而采用HRRN 方式时其吞吐量将小于采用SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。 2、语言环境:

计算机基本配置要求: 操作系统:WIN 98/2000/XP/2003 等Windows平台 内存:256MB及以上 主存64KB(Memory)(以KB为单位分配) 开发语言:Visual C++ 6.0 3、工具:Windows平台+Visual C++ 6.0 三、数据结构与模块说明(功能与框图) 作业调度的实现主要有两个问题:一个是如何将系统中的作业组织起来;另一个是如何进行作业调度。 为了将系统中的作业组织起来,需要为每个进入系统的作业建立档案以记录和作业相关的信息,例如,作业名、作业所需资源、作业执行时间、作业进入系统的时间、作业信息在存储器中的位置、指向下一个作业控制块的指针等信息。这个记录作业相关信息的数据块称为作业控制块(JCB ),并将系统中等待作业调度的作业控制块组织成一个队列,这个队列称为后备队列。当进行作业调度时,从后备队列中查找选择作业。 由于实验中没有实际作业,作业控制块中的信息内容只使用了实验中需要的数据。作业控制块中首先应该包括作业名;其次是作业所需资源(内存大小、打印机的数量和磁带机的数量);采用响应比高者优先作业调度算法,为了计算响应比,还需要有作业的估计执行时间、作业在系统中的等待时间;另外,指向下一个作业控制块的指针必不可少。 实验中,作业控制块及队列的数据结构定义如下: struct task { string name; /*作业号*/ int arrTime; /* 作业到达时间*/ int serTime; /*作业要求服务时间*/ int waiTime; /*等待时间*/ int begTime; /*开始运行时间*/

C++,实现进程调度算法,有先来先服务、优先级调度、短作业优先、响应比高优先

课程设计报告书 实践课题:操作系统课程设计姓名: 学号: 完成时间:2010.6.28 指导老师:(老师)

一、设计摘要 利用C++,实现进程调度算法,有先来先服务、优先级调度、短作业优先、响应比高优先,进一步理解了进程调度各种算法的概念及含义。 二、设计背景 在OS中,调度的实质是一种资源分配,调度算法即指:根据系统的资源分配策略所规定的资源分配算法。对于不同的系统和系统目标,通常采用不同的调度算法,如在批处理系统中,为照顾为数众多的短作业,采用短作业有限调度算法;在分时系统中,为保证系统具有合理的响应时间,采用轮转法进行调度。采用算法时,则要考虑多方面因素,以便达到最佳效果。 三、主要技术/算法简介 #include using namespace std; #define MAX 10 struct task_struct { char name[10]; /*进程名称*/ int number; /*进程编号*/ float come_time; /*到达时间*/ float run_begin_time; /*开始运行时间*/ float run_time; /*运行时间*/ float run_end_time; /*运行结束时间*/ int priority; /*优先级*/ int order; /*运行次序*/ int run_flag; / *调度标志*/ }tasks[MAX]; int counter; /*实际进程个数*/ int fcfs(); /*先来先服务*/

int ps(); /*优先级调度*/ int sjf(); /*短作业优先*/ int hrrn(); /*响应比高优先*/ int pinput(); /*进程参数输入*/ int poutput(); / *调度结果输出*/ void main() { int option; pinput(); printf("请选择调度算法(0~4):\n"); printf("1.先来先服务\n"); printf("2.优先级调度\n"); printf("3.短作业优先\n"); printf("4.响应比高优先\n"); printf("0.退出\n"); scanf("%d",&option); switch (option) { case 0: printf("运行结束。\n"); break; case 1: printf("对进程按先来先服务调度。\n\n"); fcfs(); poutput(); break; case 2: printf("对进程按优先级调度。\n\n"); ps(); poutput(); break; case 3: printf("对进程按短作业优先调度。\n\n"); sjf(); poutput(); break; case 4: printf("对进程按响应比高优先调度。\n\n"); hrrn(); poutput(); break; } } int fcfs() /*先来先服务*/

相关文档
相关文档 最新文档