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

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

操作系统课程设计

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

学院

专业

学生姓名

学号

指导教师姓名

目录

一、实验题目........................... 错误!未定义书签。

二、课程设计的目的..................... 错误!未定义书签。

三、设计内容........................... 错误!未定义书签。

四、程序功能分析....................... 错误!未定义书签。

五、实验原理 (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)对于长作业,作业的优先权可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高,从而也可以获得处理机。

五、实验原理

高响应比优先调度算法既考虑作业的执行时间也考虑作业的等待时间,综

合了先来先服务和最短作业优先两种算法的特点。该算法中的响应比是指作业等待时间与运行比值,响应比公式定义如下:响应比 =(等待时间+要求服务时间)/ 要求服务时间,即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结束

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

六、设计要求:

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

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

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

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

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

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

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

以及相应的阻塞队列

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

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

七、程序总设计流程图

随机进程调度算法

《操作系统原理》实验报告 实验名称:Linux随机进程调度算法实现 班级: 学号: 姓名: 日期: 2012/12/31

一、实验名称 Linux随机进程调度算法实现 二、所属课程名称 《操作系统原理》 三、实验原理 linux 0.11内核目录linux/kernel中的sched.c函数是内核中进程调度管理的程序,其中schedule()函数负责选择系统中下一个要运行的进程。 schedule()函数首先对所有任务(进程)进行检测,唤醒任何一个已经得到信号的进程。具体方法是任务数组中的每个进程,检查其报警定时值alarm。如果进程的alarm时间已经过期(alarm

NR_TASKS:系统能容纳的最大进程数(64个); task[]:任务(进程)数组; 更改代码如下:(linux 0.11内核目录下linux/kernel/sched.c 源文件的scheduling()函数while(1)循环)while (1) { //定义c用来判断系统中是否可运行的任务(进程)存在; c=-1; //c初值设为-1,默认不存在可运行进程; next = 0;//next记录下一个即将运行的进程; i=jiffies % NR_TASKS+1; //i的值是随机产生的; p=&task[i];//p指向在task表中下标为i的进程; while (--i) { //遍历task[]; if(!*--p)continue; //如果task[i]不包含进程,跳过; //如果task[i]包含进程且该进程处于就绪状态,记录 //该任务(进程)序号,跳出无限循环while(1),转向 //switch_to()函数执行该任务(进程); if ((*p)->state == TASK_RUNNING) { next = i; c=i; break; } } if (c) break;//如果没有任何任务(进程)要执行,则跳出, //转向switch_to(),执行0号进程(idle)。 }

进程调度算法实验报告

进程调度算法实验报告 篇一:操作系统进程调度算法模拟实验报告 进程调度算法模拟 专业:XXXXX 学号:XXXXX 姓名:XXX 实验日期:20XX年XX月XX日 一、实验目的 通过对进程调度算法的模拟加深对进程概念和进程调度算法的理解。 二、实验要求 编写程序实现对5个进程的调度模拟,要求至少采用两种不同的调度算 法分别进行模拟调度。 三、实验方法内容 1. 算法设计思路 将每个进程抽象成一个控制块PCB, PCB用一个结构体描述。 构建一个进程调度类。将进程调度的各种算法分装在一个类中。类中存 在三个容器,一个保存正在或未进入就绪队列的进程,一个保存就绪的进程,另一个保存已完成的进程。还有一个PCB实例。主要保存正在运行的进程。类中其他方法都是围绕这三个容器可以这个运行中的PCB展开。

主要用到的技术是STL中的vector以维护和保存进程容器、就绪容器、 完成容器。 当程序启动时,用户可以选择不同的调度算法。然后用户从控制台输入 各个进程的信息,这些信息保存到进程容器中。进程信息输入完毕后,就开始了进程调度,每调度一次判断就绪队列是否为空,若为空则系统时间加一个时间片。判断进程容器中是否有新的进程可以加入就绪队列。 2. 算法流程图主程序的框架: ();//先来先服务 ();//最短进程优先调度//简单时间片轮转//最高优先数优先//输入进程信息 ();.m_WaitQueue.empty()||.m_ProcessQueue.empt() (); (); 进程调度过程: ; 3. 算法中用到的数据结构 struct fcfs{//先来先服务算法从这里开始char name[10];float arrivetime;float servicetime;float starttime;float finishtime;float zztime;float

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

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

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

进程调度算法实验报告

作业调度 一、实验名称 作业调度算法 二、实验目标 在单道环境下编写作业调度的模拟程序,以加深对作业调度的理解。单道环境的特点使被调度的作业占有所有的资源。实现的算法有先来先服务,最短作业优先,最高响应比三种作业调度算法。 三、实验环境要求: 1.PC机。 2.Windows; 3.CodeBlocks 四、实验基本原理 1.本实验设计一个可指定作业个数的作业调度系统。可以输出先来先服务,最短作业优先,最高响应比三种作业调度算法的结果。 2.先来先服务就是按照各个作业进入系统的自然次序进行调度。最短作业优先就是优先调度并且处理短作业。最高响应比优先就是根据在程序运行过程中的最高响应比对应的作业先进行调度处理。 3.在设计程序过程中,将time相关的内容封装到类中,重载了加减乘除和输入输出以及比较运算符,方便12:00这种形式的数据的加减乘除运算和比较运算, 五、数据结构设计 1.时间类

class time { public: time(int x = 0, int y = 0) { time::hour = x; time::minute = y; } time& operator = (const time &t1) { this->hour=t1.hour; this->minute=t1.minute; return *this; } time operator + (time t2) { intminutes,hours; minutes = (minute + t2.minute) % 60; hours=hour+t2.hour+ (minute + t2.minute) /60; return time(hours,minutes); } time operator -(time t2) { intminutes,hours; minutes =minute - t2.minute; if (minute<0) { minutes += 60; hour--; }

先来先服务+响应比算法

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

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

进程调度算法实验报告

操作系统实验报告(二) 实验题目:进程调度算法 实验环境:C++ 实验目的:编程模拟实现几种常见的进程调度算法,通过对几组进程分别使用不同的调度算法,计算进程的平均周转时间和平均带权周转时间,比较 各种算法的性能优劣。 实验内容:编程实现如下算法: 1.先来先服务算法; 2.短进程优先算法; 3.时间片轮转调度算法。 设计分析: 程序流程图: 1.先来先服务算法 开始 初始化PCB,输入进程信息 各进程按先来先到的顺序进入就绪队列 结束 就绪队列? 运行 运行进程所需CPU时间 取消该进程 2.短进程优先算法

3.时间片轮转调度算法 实验代码: 1.先来先服务算法 #include #define n 20 typedef struct { int id; //进程名

int atime; //进程到达时间 int runtime; //进程运行时间 }fcs; void main() { int amount,i,j,diao,huan; fcs f[n]; cout<<"请输入进程个数:"<>amount; for(i=0;i>f[i].id; cin>>f[i].atime; cin>>f[i].runtime; } for(i=0;if[j+1].atime) {diao=f[j].atime; f[j].atime=f[j+1].atime; f[j+1].atime=diao; huan=f[j].id; f[j].id=f[j+1].id; f[j+1].id=huan; } } } for(i=0;i #define n 5 #define num 5 #define max 65535 typedef struct pro { int PRO_ID; int arrive_time;

高响应比调度算法

淮北师范大学 计算机学院实验设计报告 操作系统程序设计 实验报告 实验课题:高响应比调度算法 所属学院:计算机科学与技术 所属班级: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.1.设计构想 程序能够完成以下操作:创建进程:先输入进程的数目,再一次输入每个进程的进程名、运行总时间和优先级,先到达的先输入;进程调度:进程创建完成后就选择进程调度算法,并单步执行,每次执行的结果都从屏幕上输出来。 1.2.需求分析 在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目,要使这多个进程能够并发地执行,这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。由于处理机是最重要的计算机资源,提高处理机的利用率及改善系统必(吞吐量、响应时间),在很大程度上取决于处理机调度性能的好坏,因而,处理机调度便成为操作系统设计的中心问题之一。本次实验在VC++6.0环境下实现先来先服务调度算法,短作业优先调度算法,高优先权调度算法,时间片轮转调度算法和多级反馈队列调度算法。 1.3.理论依据 为了描述和管制进程的运行,系统为每个进程定义了一个数据结构——进程控制块PCB(Process Control Block),PCB中记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息,系统总是通过PCB对进程进行控制,亦即,系统是根据进程的PCB 而不是任何别的什么而感知进程的存在的,PCB是进程存在的惟一标志。本次课程设计用结构体Process代替PCB的功能。 1.4.课程任务 一、用C语言(或C++)编程实现操作模拟操作系统进程调度子系统的基本功能;运用多 种算法实现对进程的模拟调度。 二、通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转、短作业优先、多 级反馈队列调度算法,使学生进一步掌握进程调度的概念和算法,加深对处理机分配的理解。 三、实现用户界面的开发

进程调度算法1

进程调度算法(附录)#include #include #include #include #include #include #define P_NUM 5 #define P_TIME 50 enum state { ready, execute, block, finish }; struct pcb { char name[4]; int priority; int cputime; int needtime; int count; int round; state process; pcb * next; }; pcb * get_process(); pcb * get_process() { pcb *q; pcb *t; pcb *p; int i=0; cout<<"input name and time"<>q->name; cin>>q->needtime; q->cputime=0; q->priority=P_TIME-q->needtime; q->process=ready; q->next=NULL; if (i==0){ p=q; t=q;} else{t->next=q;t=q; } i++; } //while return p; }

void display(pcb *p) { cout<<"name"<<" "<<"cputime"<<" "<<"needtime"<<" "<<"priority"<<" "<<"state"<name; cout<<" "; cout<cputime; cout<<" "; cout<needtime; cout<<" "; cout<priority; cout<<" "; switch(p->process) { case ready:cout<<"ready"<next; } } int process_finish(pcb *q) { int bl=1; while(bl&&q){ bl=bl&&q->needtime==0; q=q->next; } return bl; } void cpuexe(pcb *q) { pcb *t=q; int tp=0; while(q){ if (q->process!=finish) { q->process=ready; if(q->needtime==0){ q->process=finish; } } if(tppriority&&q->process!=finish) { tp=q->priority; t=q;

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

进程调度模拟设计 ——最高响应比优先调度算法实验报告 一、实验题目与要求 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.先来先服务调度算法 先来先服务调度算法是一种最简单的调度算法,该算法既可以用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将他们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。 2.短作业(进程)优先调度算法 短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机再重新调度。SJ(P)F调度算法能有效地降低作业(进程)的平均等待时间,提高系统吞吐量。该算法对长作业不利,完全未考虑作业的紧迫程度。 3.高响应比优先调度算法 在批处理系统中,短作业优先算法是一种比较好的算法,其主要不足之处是长作业的运行得不到保证。如果我们能为每个作业引人动态优先权,并使作业的优先级随着等待时间的增加而以速率a提高,则长作业在等待一定的时间后,必然有机会分配到处理机。该优先权的变化规律可描述为: 优先权=(等待时间+要求服务时间)/要求服务时间 即优先权=响应时间/要求服务时间 如果作业的等待时间相同,则要求服务的时间越短,其优先权越高,因而该算法有利于短作业。 当要球服务的时间相同时,作业的优先权决定于其等待时间,等待时间越长,优先权越高,因而它实现的是先来先服务 对于长作业,作业的优先级可以随着等待时间的增加而提高,当其等待时间足够长时,其优先级便可以升到很高,从而也可获得处理机。 4.时间片轮转算法 在时间片轮转算法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。当执行的时间片用完时,由一个计数器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一给定的时间内均能获得一时间片的处理机执行时间。换言之,系统能在给定的时间内响应所有用户的请求。 二、核心算法流程图

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

第三章处理机调度与死锁 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安全状态是没有死锁的状态,非安全状态是可能有死锁的状态。

进程调度算法论文优先级调度~

题目操作系统课程设计 实验一:进程调度算法 1.实验目的 通过优先权法和轮转算法的模拟加深对进程概念和进程调度过程的理解,掌握进程状态之间的切换,同时掌握进程调度算法的实现方法和技巧。2.实验内容 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)进程每运行一个时间片,优先数减3. 4)在调度前,系统中拥有的进程数PCB_number由键盘输入,经初始化后,所有的进程控制块PCB链接成就绪队列。 3.实验步骤 a)画出程序流程图 a)动态优先权的进程调度算法模拟流程

b)轮转法进程调度算法模拟流程

b)程序算法如下: #include "stdafx.h" #define NULL 0 #include #include #include using namespace std; /*进程PCB结构*/ struct PCB { int ID; //进程标识 int priority; //优先级 int CPUtime; // 进程占用CPU的时间 int ALLtime; // 进程总共需要运行的时间 int State; // 进程状态 struct PCB *next; // 指向下一节点的指针 }; typedef struct PCB pcb; void init(); //产生idle进程,输入用户进程数目,

最高响应比调度算法代码

实验四模拟处理机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

LINUX进程调度算法的分析

LINUX进程调度算法的分析 何 翔,顾 新 (西安电子科技大学,陕西西安 710071) 摘 要进程调度对一个操作系统来说是至关重要的,它起着非常关键的作用。本文针对Linux操作系统中的普通进程调度算法进行了分析,对以进程为CPU时间分配单位和以用户为CPU时间分配单位的两种算法进行了分析和对比。对它们在不同环境下对进程调度效率和公平性的影响进行了探讨,并总结出它们各自适用的环境。 最后为了进一步提高进程调度的效率和公平性,提出了混合算法的思想。 关键词进程调度;普通进程;动态优先级 中图分类号 TP316 1 前 言 在Linux操作系统中,有两种常用的普通进程 调度算法。它们分别以进程和用户为调度单位来进 行CPU时间的分配。这两种算法分别体现了多进程 环境下系统运行的高效性和多用户环境下的公平 性。但是这两种算法都有各自的适用环境,因此它 们各自都有优缺点。本文从多用户的公平性和多进 程的高效性出发对这两种算法进行了分析和比较, 最后提出了混合算法的思想,使进程调度更加高效 和公平。 2 进程调度 进程调度要满足高效率,公平性,响应时间快,周转时间短和吞吐量大等要求。Linux操作系统的内核根据进程响应时间的情况把进程分为3大类:交互进程;批处理进程;实时进程。内核在此基础上实现了3种不同的调度策略:SCHED_ FIFO(即先进现出策略);SCHED_RR(即轮转策略);SCHED_OTHER(适合交互分时的程序)。 进程调度时机,即调度器何时开始启动。可以在以下几个时刻进行进程调度: (1)进程状态转换的时刻; (2)可运行队列中新增加一个进程时; (3)当前进程的时间片用完时; (4)进程从系统返回到用户态时; (5)内核处理完中断后,进程返回到用户态时。 在以上几种情况下进程调度可以解释为在下面几 个状态中进行切换。 进程调度的流程如图1所示。 图1 进程调度的流程图 图1的转换条件如下: (1)调度;(2)时间片用完;(3)跟踪并调度; (4)退出;(5)收到信号并醒来;(6)等待资源 到位再调度;(7)等待资源到位再调度;(8)等待 资源到位;(9)资源到位或收到信号。 3 普通进程调度算法的分析 3.1 按进程调度的算法分析 Schedulue()是按进程调度算法的主要函数, 是系统的核心函数。它的核心代码如下: next=idle_task(this_cpu); 电子科技 2005年第9期(总第192期) 21

响应比最高者优先算法

实验题目:响应比最高者优先算法 一、实验目的 熟悉操作系统作业管理步骤,用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; /*结束运行时间*/

操作系统五种进程调度算法的代码

进程调度算法的模拟实现 ?实验目的 1.本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。 2.利用程序设计语言编写算法,模拟实现先到先服务算法FCFS、轮转调度算法RR、最短作业优先算法SJF、优先级调度算法PRIOR、最短剩余时间优先算法SRTF。 3.进行算法评价,计算平均等待时间和平均周转时间。 ?实验内容及结果 1.先来先服务算法

2.轮转调度算法

3. 优先级调度算法

4. 最短时间优先算法 5. 最短剩余时间优先算法

?实验总结 在此次模拟过程中,将SRTF单独拿了出来用指针表示,而其余均用数组表示。 ?完整代码 【Srtf.cpp代码如下:】 //最短剩余时间优先算法的实现 #include #include #include typedef struct { int remain_time; //进程剩余执行时间 int arrive_time; //进程到达时间 int Tp; //进入就绪队列的时间int Tc; //进入执行队列的时间int To; //进程执行结束的时间int number; //进程编号 }Process_Block; //定义进程模块 typedef struct _Queue { Process_Block PB; struct _Queue *next; }_Block,*Process; //定义一个进程模块队列中结点 typedef struct { Process head; //队列头指针 Process end; //队列尾指针

经典调度算法的实现

经典调度算法的实现 学院: 专业: 姓名: 学号: 指导老师: 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.所有程序需调试通过。

相关文档
最新文档