linux操作系统课程设计—进程调度优先数法与简单轮转法
Linux进程调度算法分析

Linux进程调度算法分析摘要:基于X86平台Linux2.6.26内核进程调度部分代码,刨析Linux进程调度算法,对算法的原理,实现和复杂度进行了分析并提出了算法改进措施。
1. Linux进程调度概述Linux系统支持用户态进程和内核线程,需要说明的是,Linux没有提供用户态线程支持,实现用户态线程需要引入第三方线程库。
操作系统进程调度是整个操作系统理论的核心,在设计进程调动机制需要考虑的具体问题主要有:1)调度的时机:在什么情况下,什么时候进行调度。
2)调度的“政策”(policy):根据什么准则挑选下一个进入运行的进程。
3)调度的方式:是“可剥夺”(preemptive)还是“不可剥夺”(nonpreemptive)。
图1.2.1给出了Linux进程状态转换关系:图1 Linux进程状态转换图Linux进程调度分为自愿调度和强制调度两种。
1)在内核空间,一个进程可以通过schedule()启动一次调度,也可以在调用schedule()之前,将本进程状态设置为TASK_INTERRUPTIBLE或TASK_UNINTERRUPTIBLE,暂时放弃运行而进入睡眠。
这通常发生在来自用户空间的系统调用被阻塞。
在用户空间,用户进程可以通过系统调用nanosleep()达到目的。
2)调度还可以是非自愿的。
在一定条件下,内核会强制性剥夺当前进程运行而调度其他进程进入运行。
Linux调度政策基础是时间片轮转+优先级抢占的结合,为了满足不同应用的需要,内核提供了三种调度方法:1)SCHED_FIFO实时调度策略,先到先服务2)SCHED_RR实时调度策略,时间片轮转3)SCHED_NORMAL 分时调度策略(在2.6内核以前为SCHED_OTHER)。
用户进程可以通过系统调用sched_setscheduler()设定自己的调度策略。
SCHED_FIFO和SCHED_RR的区别是,前者只有在就绪队列中有优先级更高的进程,或进程被阻塞,或自愿调用阻塞原语(如sleep_on_interruptible)的情况下,才会放弃CPU,而如果调度策略是后者,当前进程与就绪队列里其他进程按Round Robin方式共享CPU。
2011180021-Linux操作系统-课程设计报告-基于Linux的进程调度模拟程序

7、采用最高优先数算法的动态优先数法则控制进程:如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。
(4)主函数
利用上述的数据结构和函数实现模拟进程调度。
3.进程产生模拟
通过标准输入模拟产生进程:先要求输入进程数目,再依次输入各个进程的进程名、进程优先数、进程需要运行的时间。
4.1.3参考代码
#include<stdio.h>
#include<string.h>
#include<malloc.h>
设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。也就是说能运行的进程数大于处理机个数。为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择某一进程占用处理机。使得系统中的进程能够有条不紊的运行,同时提高处理机的利用率以及系统的性能。所以设计模拟进程调度算法(最高优先数优先的调度算法、先来先服务算法),以巩固和加深处理进程的概念,并且分析这两种算法的优缺点。
6.课题研究结论8
7.总结9
1、课程设计题目概述
随着Linux系统的逐渐推广,它被越来越多的计算机用户所了解和应用. Linux是一个多任务的操作系统,也就是说,在同一个时间内,可以有多个进程同时执行。如果读者对计算机硬件体系有一定了解的话,会知道我们大家常用的单CPU计算机实际上在一个时间片断内只能执行一条指令,那么Linux是如何实现多进程同时执行的呢?原来Linux使用了一种称为"进程调度(process scheduling)"的手段,首先,为每个进程指派一定的运行时间,这个时间通常很短,短到以毫秒为单位,然后依照某种规则,从众多进程中挑选一个投入运行,其他的进程暂时等待,当正在运行的那个进程时间耗尽,或执行完毕退出,或因某种原因暂停,Linux就会重新进行调度,挑选下一个进程投入运行。因为每个进程占用的时间片都很短,在我们使用者的角度来看,就好像多个进程同时运行一样了。本文就是对进程调度进行研究、实验的。
操作系统原理-进程调度

6.3.1 进程调度的功能
6.3.1 进程调度的功能
进程调度的功能 根据一定的调度策略或指标遍历所有的就绪进程, 从中选择一个最合适的进程。 选择该进程的过程实际是用户按特定指标对所有进 程进行排队的过程。
6.3.2 进程调度的时机
6.3.2 进程调度的时机
1.时钟中断 时钟中断是最频繁且周期性地引发进程调度的事件之一。
作业
大小 进入时刻 开始时刻 结束时刻
周转 时间
带权周 转时间
平均周 转时间
平均带权周 转时间
A 20
0
0
20
20 1.00
B 40
10
50
90
80 2.00
C 30
15
20
50
35 1.17 43.75
2.04
D 10
60
90
100
40 4.00
6.4.3 响应比高者优先调度算法
6.4.3 响应比高者优先调度算法
6.3.3 进程调度的方式
进程调度的方式
非抢占方式又称非剥夺式调度
它是指进程调度程序一旦把CPU分配给某进程后,该进程 可以一直运行下去,在它的时间片用完之前,或任务完成 之前,或因为I/O请求被阻塞之前,决不允许其他进程抢走 它的CPU。
抢占方式又称剥夺式调度
抢占方式允许进程调度程序根据某种策略终止当前正在运 行的进程,将其移入就绪队列,再根据某种调度算法选择 另一个进程投入运行。
6.4.1 先来先服务调度算法
先来先服务(First Come First Service,FCFS)
例子:假设系统中有4个作业先后投入,它们的作业 大小和进入时间如表(作业大小和时间单位分钟)
Linux2.6进程调度算法

20
Company
Logo
O(1) 最佳优先级的选取
进程调度的本质就是在当前可运行的进程集合中选择一个最 佳的进程,这个最佳则是以进程的动态优先级为选取标准的。 早期内核选取最佳优先级进程的方法是依次遍历每个可运行 状态的进程,最终选取一个优先级最高的进程。它的时间复 杂度是 O(n) 。 而在 O(1) 算法中,不管是过期进程集合还是活跃进程集合 ,都将每个优先级的进程组成一个链表,因此每个集合就有 140 个不同优先级的进程链表。同时,两个集合中还采用优 先级位图来标记每个优先级链表中是否存在进程。 由于进程优先级个数是定值,因此查找最佳优先级的时间恒 定,它不会像以前的方法那样受可执行进程数量的影响。 21
4
Company
Logo
进程分类
进程可以被分为两种类型: I/O 消耗型和 CPU 消耗型。 I/O 消耗型进程频繁使用 I/O 设备,并且大部分时间都处于 等待状态。为了使系统有较强的响应能力, I/O 消耗型进程 必须很快能被唤醒,以实现进程的切换 ; 否则,用户会感到 系统反应迟钝。大多数人机交互进程都属于 I/O 消耗型进程 。 CPU 消耗型进程则大部分时间都在占用 CPU ,它们常常位 于后台运行,并且没有过多的 I/O 需求,因此系统并不需要 对这类进程做出快速反应。这类进程的典型代表为用于科学 计算的进程。
13
Company
Logo
过期进程和活动进程
运行态和就绪态与可运行状态 (TASK_RUNNING) 的关系。 可运行状态进程分为两类:活动进程,它们还没有用完他们的 时间片,等待被运行;过期进程,已经用完了的时间片,在其 他进程没有用完它们的时间片之前,它们不能再被运行。 调度程序的工作就是在活动进程集合中选取一个最佳优先级的 进程,如果该进程时间片恰好用完,就将该进程放入过期进程 集合中。 在可运行队列结构中, arrays 数组的两个元素分别用来表示 刚才所述的活动进程集合和过期进程集合。此外, active 和 expired 两个指针也分别直接指向这两个集合。
进程调度模拟设计——时间片轮转、优先级法

学号:课程设计课程名字系统软件开发实训A题目进程调度模拟设计——时间片轮转、优先级法学院专业班级姓名指导教师2014 年01 月17 日课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 进程调度模拟设计——时间片轮转、优先级法初始条件:1.预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.模拟进程调度,能够处理以下的情形:⑴能够选择不同的调度算法(要求中给出的调度算法);⑵能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等;⑶根据选择的调度算法显示进程调度队列;⑷根据选择的调度算法计算平均周转时间和平均带权周转时间。
2.设计报告内容应说明:⑴课程设计目的与功能;⑵需求分析,数据结构或模块说明(功能与框图);⑶源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结。
时间安排:设计安排3周:查阅、分析资料 1天系统软件的分析与建模 4天系统软件的设计 5天系统软件的实现 3天撰写文档 1天课程设计验收答辩 1天设计验收安排:设计周的第三周的指定时间到实验室进行上机验收。
设计报告书收取时间:课程设计验收答辩完结时。
(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)指导教师签名: 2013 年 12 月 10日系主任(或责任教师)签名: 2013 年 12 月 10日进程调度模拟设计——时间片轮转、优先级法1设计目的1.1 阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解,能够使用其中的方法来进行进程调度模拟设计。
1.2 练掌握并运用时间片轮转和优先级法,掌握一种计算机高级语言的使用。
2 设计要求2.1 能够选择不同的调度算法(要求中给出的调度算法);2.2 能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等;2.3 根据选择的调度算法显示进程调度队列;2.4 根据选择的调度算法计算平均周转时间和平均带权周转时间。
进程调度先来先服务时间片轮转法优先服务调

进程调度先来先服务时间片轮转法优先服务调度处理器调度免费下载C或C++/*标题:设计一:进程调度设计目的:进程管理是操作系统中的重要功能,用来创建进程、撤消进程、实现进程状态转换,它提供了在可运行的进程之间复用CPU的方法。
在进程管理中,进程调度是核心,因为在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态,当就绪进程个数大于处理器数目时,就必须依照某种策略决定哪些进程优先占用处理器。
本实验模拟在单处理器情况下的进程调度,目的是加深对进程调度工作的理解,掌握不同调度算法的优缺点。
设计题目:设计一个按先来先服务,算法时间片轮转法,优先数调度算法实现处理器调度的程序。
*//*亲爱的同学们,大家好。
欢迎访问我的百度空间,在此我向大家提供免费的资料,这是我们实习要做的。
主要是因为我看到很多下载都要金币,而我自己没有金币,不爽。
现在我提供免费下载,做个好人。
复制到VC++时可能有些格式问题,稍微修改一下就OK了,程序本身不存在问题的。
大三第一个学期实习的哦*//*先来先服务:是一种最简单的调度算法,每次调度都从后备作业或者进程当中选择一个或者多个最先进入该队列的作业或进程,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。
当调用FCFS算法时,系统为它们分配处理机,让它们运行。
该算法的优点是比较利于长作业(进程),而缺点是不利于短作业(进程)。
算法时间片轮转法:系统将所有的就绪进程按照先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。
当执行完时间片时,计时器就会发出中断请求,调度程序就会停止该进程的执行,并把它送往就绪队列的末尾;然后再把处理机分配给就绪队列中新的队首进程,同时也分配时间片给它。
这样保证就绪队列中的所有进程在一个给定的时间片当中都能够获得一个时间片的处理机执行时间。
而时间片的大小最好取适中的,即略大于一次典型的交互所需时间。
优先数调度算法:该方法又分成两种算法分支,分别是非抢占式优先权算法和抢占式优先权调度算法。
2011180021_Linux操作系统_课程设计报告_基于Linux的进程调度模拟程序

河南中医学院《linux操作系统》课程设计报告题目:基于Linux的进程调度模拟程序所在院系:信息技术学院专业年级:2011级计算机科学与技术完成学生:2011180021 郭姗指导教师:阮晓龙完成日期:201X 年06 月22 日目录1. 课程设计题目概述32. 研究内容与目的43. 研究方法54. 研究报告65. 测试报告/实验报告76. 课题研究结论87. 总结91、课程设计题目概述随着Linux系统的逐渐推广,它被越来越多的计算机用户所了解和应用. Linux是一个多任务的操作系统,也就是说,在同一个时间内,可以有多个进程同时执行。
如果读者对计算机硬件体系有一定了解的话,会知道我们大家常用的单CPU计算机实际上在一个时间片断内只能执行一条指令,那么Linux是如何实现多进程同时执行的呢?原来Linux使用了一种称为"进程调度(process scheduling)"的手段,首先,为每个进程指派一定的运行时间,这个时间通常很短,短到以毫秒为单位,然后依照某种规则,从众多进程中挑选一个投入运行,其他的进程暂时等待,当正在运行的那个进程时间耗尽,或执行完毕退出,或因某种原因暂停,Linux就会重新进行调度,挑选下一个进程投入运行。
因为每个进程占用的时间片都很短,在我们使用者的角度来看,就好像多个进程同时运行一样了。
本文就是对进程调度进行研究、实验的。
本文首先对Linux系统进行了简要的介绍, 然后介绍了进程管理的相关理论知识。
其次,又介绍最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)、先来先服务算法的相关知识,并对进程调度进行最高优先数优先的调度算法和先来先服务算法模拟实验,并对比分析两种算法的优缺点,从而加深对进程概念和进程调度过程/算法的理解设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。
也就是说能运行的进程数大于处理机个数。
LINUX 操作系统 第4章 进程调度

31
effective_prio( )函数
static int effective_prio(task_t *p) { int bonus, prio; if (rt_task(p)) return p->prio; bonus = CURRENT_BONUS(p) - MAX_BONUS / 2; prio = p->static_prio - bonus; if (prio < MAX_RT_PRIO) prio = MAX_RT_PRIO; if (prio > MAX_PRIO-1) prio = MAX_PRIO-1; return prio; }
活动数组:其中的可执行队列上的进程都还 有时间片剩余 过期数组:其中的可执行队列上的进程都耗 尽了时间片
当一个进程的时间片耗尽时,它会被移至 过期数组,但在此之前,时间片已给它重 新计算好了。
24
活动数组和过期数组的切换
现在,重新计算时间片只需要在活动数组 和过期数组之间来回切换就行了。这个动 作由schedule( )完成,部分代码如下:
32
bonus的计算中需要用到的宏和函数
# define HZ 1000 #define NS_TO_JIFFIES(TIME) ((TIME) / (1000000000 / HZ))
#define DEF_TIMESLICE
(100 * HZ / 1000)
#define MAX_SLEEP_AVG \ (DEF_TIMESLICE * MAX_BONUS)
第4章 进程调度
进程调度
调度程序是内核的组成部分,它负责选择 下一个要运行的进程。
调度程序的基本工作:在一组处于可运行 状态的进程中选择一个来执行。 Linux提供抢占式的多任务模式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 1 《操作系统原理》 课程设计报告
姓 名: 吴沛儒 班 级: BX0907 学 号: 9 指导老师: 胡静
二〇一一年十二月十二日 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
2 目录 一、 《操作系统原理》课程设计的目的与要求 .......................................... 错误!未定义书签。 1、 目的 .................................................................................................. 错误!未定义书签。 2、 要求 .................................................................................................. 错误!未定义书签。 二、 简述课程设计内容、主要功能和实现环境 ...................................... 错误!未定义书签。 1. 课程设计内容 ...................................................................................... 错误!未定义书签。 三、 任务的分析、设计、实现和讨论 ...................................................... 错误!未定义书签。 1、 任务的分析 ...................................................................................... 错误!未定义书签。 2、 任务的设计与实现 .......................................................................... 错误!未定义书签。 五、 附录 ...................................................................................................... 错误!未定义书签。 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
3 进程调度—优先数法与简单轮转法 一、 《操作系统原理》课程设计的目的与要求 1、 目的 进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。任务一采用简单轮转法,任务二采用优先数法等。本课题可以加深对进程调度和各种调度算法的理解。 2、 要求 (1) 设计一个有n个进程并发的进程调度程序。每个进程由一个进程控制块(PCB)表示。进程控制块一般应该包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。 (2) 调度程序应包含2种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。 (3) 算法应能显示或打印各个进程的PID、状态(运行状态R、等待状态W等)和参数(已运行时间等)的变化情况,便于观察诸进程的调度过程 进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。任务一采用简单轮转法,任务二采用优先数法等。本课题可以加深对进程调度和各种调度算法的理解。
二、 简述课程设计内容、主要功能和实现环境 1. 课程设计内容 进程调度是处理机管理的核心内容。本实验要求用C语言编写和调试一个简单的进程调度程序。选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。通过本实验可以加深理解有关进程控制块、进程队列的概念,并体会和了解优先数和时间片轮转调度算法的具体实施办法。 2. 主要功能 本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。 3. 实现环境 本次课程设计结合算法的特点,采用Windows操作系统平台。开发工具为Microsoft Visual C++6.0。
三、 任务的分析、设计、实现和讨论 1、 任务的分析 本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。 下面介绍优先数法和简单轮转法两种进程调度算法: 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 4 (1) 优先数法。进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。 (2) 简单轮转法。进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相当于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。
进程控制块结构如下:
进程控制块链结构如下:
其中:RUN—当前运行进程指针; HEAD—进程就绪链链首指针; TAID—进程就绪链链尾指针。
2、 任务的设计与实现
进程ID 链指针 优先数/轮转时间片数 占用CPU时间片数 进程所需时间片数 进程状态
TAIL RUN 1 … R HEAD 3
… W 5 … W 2 … W 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
5 算法流程图:
3、 操作过程和结果分析 优先数调度算法测试数据:
优先数调度算法程序运行结果截图: 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
6 图1.1 结果截图 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
7 图1.2 结果截图 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
8 简单轮转调度算法测试数据:
简单轮转调度算法程序运行结果截图:
图2.1 结果截图 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
9 图2.2 结果截图 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
10 图2.3 结果截图 4、 思考题的解答和讨论 通过以上的调度算法测试数据,得出以下不同算法的不同调度性能结果: 算法 比较项 (时间轮转法)RR (最高优先数)HRP
调度方式 抢占式 (按时间片) 非抢占式 响应时间 对于短进程提供良好的响应时间 提供良好的响应时间 开销 低 可能高
对待进程的作法 公平对待 良好的均衡(进程) 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 11 四、 《操作系统》课程设计小结 当我在回首这一个星期的时候,不因虚度光阴而悔恨,也不因碌碌无为而羞耻。我想,这可能是我一学期中最丰富而有意义的一个星期了。
从大一开始我的理论知识就比实践知识好的多,每门课都如此,实训是我最头疼的一件事。课本上记得很牢的东西到了实际操作的时候感觉都用不上,做个实验就手忙脚乱的。所以我感觉,这个星期的课设不仅学到了在理论课上学不到的知识,更是让我对自己的实践操作有了信心。
本次课程设计的题目之一是进程调度——优先数法与简单轮转法。在多任务系统中,进程调度是CPU管理的一项核心工作。根据调度模式的不同,多任务系统有两种类型,即非抢占式和抢占式。其中,优先数法是非抢占式调度策略,而简单轮转法是抢占式调度策略。进程调度算法是系统效率的关键,它确定了系统对资源,特别是对CPU资源的分配策略,因而直接决定着系统最本质的性能指标,如相应速度和吞吐量等。常用的调度算法有:先进先出法,短进程优先法,时间片轮转法(时间片轮转法还分为可变时间片轮转法和简单循环轮转法),优先级调度法。简单循环轮转法中的时间片q是一个十分重要的因素,它的计算公式为q=t/n。q的选择对进程调度有很大的影响。q取的太大,轮转法就会退化成先进先出算法;而取的太小,则会导致系统开销增加,将时间浪费在进程切换上。所以q必须取值适中,使就绪队列中的所有进程都能得到同样的服务。但我们这次的实验中暂时还没有考虑到时间片q对算法的影响,只是测试了这个调度策略的算法。
这次我们的实验测试并比较了简单轮转法和优先数法这两种调度策略的性能。不同的算法有它自己不同的长处,简单轮转法虽然能够使每个进程可以以相等的速度向前进展,但对于紧急进程的处理就显然不及优先数法。可是优先数法的开销较高,而且可能对于较短而且优先级低的进程会花较长的时间等待。不过它还是具有良好的均衡性。实际应用中,经常是多种策略结合使用。如时间片轮转法中也可以适当考虑优先级因素,对于紧急的进程可以分配一个长一点的时间片,或连续运行多个时间片等。这样取长补短,合理利用各种不同算法的优势,让CPU的运行效率大大提高。
人们总是在寻找更好的解决方案,让算法的性能和开销得到一个相对较好的平衡。我在寻找这样的一个解决方案时,同学对我说虽然老师没有在课上讲过这个策略,但其实书上有关于更好的调度策略。也就是多级反馈队列调度。这种算法可以先用较小的时间片处理完那些用时较短的进程,而给那些用时较长的进程分配较大的时间片,以免较长的进程频繁被中断而影响处理机的效率。这也就是上面所提到的“多种策略结合使用,如时间片轮转法中也可以适当考虑优先级因素”。