多级反馈队列调度算法的研究与实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void Get_Fir(Queue *que);
/*5 取得就绪队列中的队头进程*/
多级反馈队列调度算法的研究与实现
姓名:邹善席
学号:201208080011
学院:计算机科学与技术学院 专业:计算机科学与技术
指导教师:王迤冉
职称:副教授
摘 要:多级反馈队列调度算法是一种综合性能较好的算法,能很好地实现作 业的公平性与系统资源利用率之间的平衡,兼顾多方面的系统目标。本论文以时间 片轮转调度算法和高优先级优先调度算法为基础,通过研究队列之间,同队列和不 同队列中的进程之间以及队列和进程之间的关系、设计并实现了该调度算法。目前, 该算法应用前景十分广泛,常用于多道和单道程序设计系统中的处理机调度,担任 着对各系统中昂贵和紧缺的资源进行合理分配的职责,故此多级反馈队列调度算法 的研究对各种系统的开发和调度算法的发展有着重要的意义。
2.调度算法分析
多级反馈队列调度算法是时间片轮转调度算法和高优先级优先调度算法的综合 和发展,通过动态调整作业的优先级和时间片大小,多级反馈队列调度算法可以兼顾 多方面的系统目标。
在此,我在多级就绪队列之间采用高优先级优先调度算法,它可以动态的调整 优先级,改变调度序列,十分灵活,同时兼顾了作业的紧迫性。在就绪队列内部, 采用时间片轮转调度算法和先来先服务调度算法相结合的原则,来处理就绪队列中 的进程,从而保证所有进程在一定时间内都能获得一个时间片的处理机时间,使得 短作业能在一到两个时间片就可完成,周转时间较短,而对长作业,不必担心长时 间得不到处理。由此实现的多级反馈队列调度算法就能具有短作业优先、周转时间 较短、长作业不会长时间得不到处理等优点,下面将对该算法的设计思想进行详细 的描述。
处理,对逻辑能力和编程能力的要求较高。在实现算法过程中,队列和进程之间的关
系复杂,各个函数相互调度,而且不同函数的执行结果相互影响,这给我带来了很
大的困扰,因此,编程过程中,我先实现设计思想的一部分,然后再将没有实现的
部分设计加入进去,比如我在编程过程中先将关于“新到进程的处理”部分“摘除”,
使得设计难度相对降低,编程实现也就相对容易,这样,我将设计思想分成几个模
片越小。 (3).只有高优先级队列为空时才调度下一级就绪队列中的进程。 (4).允 许 进 程 在 队 列 之 间 移 动 ,当一个新进程进入内存后,首先将其插入优
先级最高的就绪队列末尾。进程如果在一个时间片结束时尚未完成,将其插入下一 个就绪队列末尾;如果完成,插入完成队列末尾。
(5).当比运行进程的队列更高级别的队列中到来一个新进程时,低优先级的队 列中的进程执行完一个时间片,插入到下一级队列末尾,在调度新来的进程。
多级反馈队列调度算法是目前公认的一种较好的作业调度算法,通过对多级反 馈队列调度算法的研究,能够拓展学生所学的知识,并培养学生的实际动手能力, 以及独立分析问题,解决问题的能力。同时因为多级反馈队列调度算法相对于其它 算法,能全面满足不同类型作业的需求,较好实现公平性与资源利用率之间的平衡, 应用十分广泛,因此关于多级反馈队列调度算法的研究对算法的发展及其它类型作 业的调度具有重要意义
3Hale Waihona Puke Baidu
新进程到达等,一笔带过,但在算法实现中将会实现所有的设计思想,该算法详细 设计流程图如 2 所示:
开始 创建多级就绪队列
创建进程,插入就绪队列
取队首进程
执行队列不为空
插
N
入
Y
完
成
进程执行完毕
队
Y
列
N
插
N
入
进程时间片用
下
完 Y
一
就
队列中没有进程, 指向队列
绪
的指针后移
队
列
队列后继为空
N
Y
时间片轮转调度
1
1.课题背景
自上世纪计算机诞生以来,计算机技术突飞猛进,日新月异,而作为计算机技 术的一个重要组成——调度算法,也有了很大的发展, 目前存在的多种调度算法中, 有的调度算法有利于长作业,有的有利于短作业,都有其优点和缺点。然而,有一 种调度算法既适用于长作业调度,又能适用于短作业调度,还能很好的处理长作业 和短作业的先后调度关系,比如多级反馈队列调度算法。
5
块,对应模块编程,最后实现整个算法。该算法的主要函数如下所示:
void Creat_Que(void);
/*1 创建就绪队列函数*/
void Give_Prior(Queue *que);
/*2 队列排序函数 */
void Creat_Proc(void);
/*3 创建进程函数*/
void Insert_Rea(PCB *pc,Queue *que); /*4 将进程插入到就绪队列尾部*/
{
int round;
/*本队列所分配的时间片*/
int prio;
/*本队列的优先级*/
PCB *LinkPCB;
/*指向队列中的进程*/
struct queue *next;
/*指向下一个队列*/
} Queue;
4.3 算法实现 多级反馈队列调度算法中的逻辑十分严谨,要求对可能出现的所有状况都进行
题 目: 多级反馈队列调度算法的研究与实现 姓 名: 邹善席 学 号: 201208080011 学 院: 计算机科学与技术学院 专 业: 计算机科学与技术 年级班级: 计算机科学与技术 2012 专升本 指导教师: 王迤冉
年月日
目录
摘 要 .................................................. 1 1.课题背景............................................... 2 2.调度算法分析 .......................................... 2 3.算法设计思想 .......................................... 2 4.详细设计与实现 ........................................ 3
关键词:调度算法;进程;队列;时间片
Research and Implementation of Multi-level Feedback Queue
Scheduling Algorithm
Abstract: Multi- level Feedback Queue Scheduling Algorithm can achieve a good balance between fairness jobs and system resource utilization, taking a wide range of system goals into account, is a batter comprehensive performance of the algorithm. This thesis is based on Round-robin Scheduling Algorithm and High Priority Scheduling Algorithm, by researching the relationship between queues, the process of the different and the same queues with processes, design and implementation of the scheduling algorithm. Currently, application prospects of the algorithm is very broad, commonly being used in processor scheduling of multi-channel and single-channel system programming, severing as a role to rational allocation costly and scarce resourc es in each system. Therefore, the researching of Multi- level Feedback Queue Scheduling Algorithm has great significance about developing various systems and development of the scheduling algorithm. Key words: Scheduling Algorithm;Process;Queue;Round
结束
4.2 主要的数据结构
图 2 多级反馈队列调度算法流程图
在进程的整个生命周期中,系统是通过 PCB 感知到该进程的存在的。PCB 是进程
存在的唯一标志。系统为每个进程定义了一个数据结构,即进程控制块。它通常具有
4
进程标识符、处理机状态、进程调度信息、进程控制信息等内容。
4.2.1 PCB 的数据结构
3.算法设计思想
通过研究就绪队列和进程的关系,比如就绪队列中各个进程的调度次序和进程 在不同队列之间如何移动等,得出了该算法的基本设计思想和调度示意图,具体内
2
容如下所述: (1).设置多个就绪队列,并给队列赋予不同的优先数(规定优先数越小,优先
权越高),第一个队列优先级最高,依次递减,队列之间采用优先级调度算法。 (2).各级队列中的进程具有不同的时间片,优先级越高的队列中的进程的时间
本课题所设计的 PCB 如下所示:
typedef struct pcb
/*定义进程*/
{
char name[20];
/*进程的名字*/
int round;
/*分配给进程的时间片*/
int worked_time;
/*进程已经执行时间*/
int need_time;
/*进程执行所需要的时间*/
char state;
4.1 算法设计流程图 ................................................. 3 4.2 主要的数据结构 ................................................. 4 4.3 算法实现 ....................................................... 5 5. 调试过程与测试结果分析................................. 8 5.1 调试过程中对遇到的问题的处理措施 ............................... 8 5.2 调试结果与分析 ................................................. 8 6.应用前景............................................. 11 参考文献 ............................................... 11 致 谢 ............................................... 13
/*Rea—就绪状态,Run—执行状态,Fin—完成状态*/
int count;
/*计数器:一个时间片内进程运行时间*/
struct pcb *next;
/*指向下一个进程*/
} PCB;
4.2.2 队列的数据结构
本课题所设计的队列的数据结构如下所示:
typedef struct queue
/* 定义队列*/
新到进程
时 间 片 用 完
就绪队列一 就绪队列二 就绪队列三
CPU
进
至完成队列
程
调
度
4.详细设计与实现
时间片轮转调
度 图 1 多级反馈队列调度算法示意图
4.1 算法设计流程图 在设计多级反馈队列调度算法流程图的过程中,因为篇幅原因,对该算法的设
计思想中的重要部分进行了详细的描绘,比如一个就绪队列中的多个进程应如何调 度以及进程如何在不同就绪队列之间移动,至于其他部分如创建队列﹑创建进程﹑
(6).除 最 低 优 先 权 队 列 外 的 所 有 其 他 队 列 , 均 采 用 相 同 的 进 程 调 度 算 法 ,即 按 时 间 片 轮 转 的 FCFS 算 法 ,最 后 一 个 队 列 中 的 进 程 按 按 时 间 片 轮 转 算 法 进 行 调 度 , 该算法的中的进程调度如图 1 所示: