第五章 CPU调度

目录

5.1 基本概念

CPU和I/O突发的交替顺序

CPU突发时间直方图

三级调度

CPU调度程序

调度程序(Disatcher)

5.2 调度准则

1.面向用户(User-oriented)的准则和评价

2. 面向系统的调度性能准则

3. 调度算法本身的调度性能准则

4. Optimization Criteria最优准则

5.3 调度算法

5.3.1 First-Come, First-Served (FCFS) Scheduling 先来先服务调度

实例

5.3.2 Shortest-Job-First (SJF) Scheduling 短作业优先调度

SJF的变型

非抢占式SJF例子

抢占式SJF例子

确定下一次CPU突发的长度

下一次CPU突发长度的预测

指数平均的例子

5.3.3 Priority Scheduling 优先级调度

优先级调度例子

5.3.4 Round Robin (RR) 时间片轮转调度

具有时间量子= 20的RR的例子

时间量子和上下文切换时间

周转时间随时间量子的变化而变化

5.3.5 Multilevel Queue Scheduling 多级队列调度

5.3.6 Multilevel Feedback Queue Scheduling 多级反馈队列调度

多级反馈队列算法

几点说明

多级调度队列例子

进程调度例题分析

5.4* 多处理器调度

5.5* 线程调度

Pthread Scheduling API

5.6 操作系统例子

Linux Scheduling

优先级与时间片长度之间的关系

按优先级进行索引的任务列表

总结

习题分析


5.1 基本概念

CPU调度==处理机调度==进程调度

通过多重编程所获得的最大CPU利用率

CPU、I/OBurst cycle脉冲(运行)周期-进程执行包括一个CPU执行和I/O等待的周期

CPU突发时间、I/O突发时间

CPU型(CPU-bound)、I/O型程序(I/O-bound program)

CPU突发分布

CPU和I/O突发的交替顺序

CPU突发时间直方图

三级调度

CPU调度程序

CPU调度决策可能会在一个进程时发生(调度的时机):

1.从运行状态切换到等待状态

2.从已运行状态切换到已就绪状态。

3.从等待切换到准备就绪。

4.终止。

 调度方式:

 非抢占式(Nonpreemptive)调度:调度程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程。如上1、4

 抢占式(Preemptive)调度:当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则、短进程优先原则、时间片原则。如上2、3

调度程序(Disatcher)

调度员模块将CPU的控制交给短期调度器所选择的进程;这包括:

切换上下文

切换到用户模式

跳转到用户程序中的正确位置以重新启动该程序

调度延迟-调度程序停止一个进程并启动另一个进程运行所需的时间

Linux命令:vmstat

5.2 调度准则

1.面向用户(User-oriented)的准则和评价

 周转时间Turnaround time :进程从提交到完成所经历的时间。包括:

在CPU上执行,就绪队列和阻塞队列中等待。

 周转时间 T=完成时间-提交时间

 平均周转时间=∑周转时间/进程数

 带权周转时间W= T(周转时间)/t(CPU执行时间)

 平均带权周转时间=∑W/进程数

 响应时间Response time :从进程提出请求到首次被响应(而不是输出

结果)的时间段(在分时系统环境下)

 等待时间Waiting time – 进程在就绪队列中等待的时间总和

 截止时间:开始截止时间和完成截止时间——实时系统,与周转时间有些相似。

 公平性:不因作业或进程本身的特性而使上述指标过分恶化。如长进程等待很长时间。

 优先级:可以使关键任务达到更好的指标

2. 面向系统的调度性能准则

 吞吐量Throughput :单位时间内所完成的进程数,跟进程本身特性和调度算法都有关系——批处理系统

 平均周转时间不是吞吐量的倒数,因为并发执行的进程在时间上可以重叠。如:在2小时内完成4个进程,而每个周转时间是1小时,则吞吐量是2个进程/小时

 处理机利用率CPU utilization:使CPU尽可能的忙碌

 各种设备的均衡利用:如CPU繁忙的进程和I/O繁忙的进程搭配——大中型主机

3. 调度算法本身的调度性能准则

 易于实现

 执行开销比较小

4. Optimization Criteria最优准则

 最大的CPU利用率 Max CPU utilization

 最大的吞吐量 Max throughput

 最短的周转时间 Min turnaround time

 最短的等待时间 Min waiting time

 最短的响应时间 Min response time

 公平

Review Question

1、Under preemptive scheduling, when a process switches from the running to the ready state, it may lose control of the CPU?

True

2、List at least three different criteria for designing a CPU scheduling algorithm

  • Maximize CPU utilization.
  • Maximize throughput.
  • Minimize turnaround time.
  • Minimize waiting time.
  • Minimize response time.

5.3 调度算法

5.3.1 First-Come, First-Served (FCFS) Scheduling 先来先服务调度

5.3.2 Shortest-Job-First (SJF) Scheduling 短作业优先调度

5.3.3 Priority Scheduling 优先权调度

5.3.4 Round Robin (RR) 时间片轮转调度

5.3.5 Multilevel Queue Scheduling 多级队列调度

5.3.6 Multilevel Feedback Queue Scheduling 多级反馈队列调度

 高响应比优先调度算法 Highest Response Ratio Next(HRRN)

 响应比R = (等待时间 + 要求执行时间) / 要求执行时间

5.3.1 First-Come, First-Served (FCFS) Scheduling 先来先服务调度

 FCFS算法

 按照进程或作业提交顺序形成就绪状态的先后次序,分派CPU

 当前进程或作业占用CPU,直到执行完或阻塞,才出让CPU(非抢占方式)

 在进程或作业唤醒后(如I/O完成),并不立即恢复执行,通常等到当前作业或进程出让CPU

 最简单的算法

 FCFS的特点

 比较有利于长进程,而不利于短进程。

 有利于CPU Bound的进程,而不利于I/O Bound的进程。

实例

假设进程到达的顺序为:P1、P2、P3

日程表的甘特图为:

P1 = 0;P2 = 24;P3 = 27等待时间

P1 = 24;P2 = 27;P3 = 30的周转时间

平均等待时间:(0 + 24 + 27)/3 = 17

平均周转时间:(24 + 27 + 30)/3 = 27

周转时间=终止时间-到达时间。

假设进程以P2、P3、P1的顺序到达。

该进度表的甘特图为:

等待时间:用于P1 = 6;P2 = 0;P3 = 3

周转时间:用于P1 = 30;P2 = 3;P3 = 6

平均等待时间:(6 + 0 + 3)/3 = 3

平均周转时间:(30 + 3 + 6)/3 = 13

比以前的情况好多了

车队效应——长流程背后的短流程

等待时间=周转时间-突发时间。

5.3.2 Shortest-Job-First (SJF) Scheduling 短作业优先调度

 又称为“短进程优先”SPF(Shortest Process First);这是对FCFS算法的改进,其目标是减少平均周转时间。

 SJF算法:

 对预计执行时间短的作业(进程)优先分派处理机。

两种方案:

非抢占-一旦CPU给了进程,它就不能被抢占,直到完成它的CPU突发

抢占—如果新进程到达时CPU突发长度小于当前执行进程的剩余时间,则抢占。这个方案被称为最短的剩余时间优先方案(SRTF)

SJF是最优的-给出了给定进程集的最小平均等待时间。

SJF的变型

 最短剩余时间优先SRT(Shortest Remaining Time)-基于抢占的SJF算法

 允许比当前进程剩余时间更短的进程来抢占

 最高响应比优先HRRN(Highest Response Ratio Next)

 响应比R = (等待时间 + 要求执行时间) / 要求执行时间

 是FCFS和SJF的折衷

非抢占式SJF例子

平均周转时间=(7+10+4+11)/4=8

平均等待时间=(0 + 6 + 3 + 7)/4 = 4

周转时间=终止时间-到达时间。

抢占式SJF例子

平均周转时间=(16+5+1+6)/4=7

平均等待时间=(9 + 1 + 0 +2)/4 = 3

周转时间=终止时间-到达时间。

确定下一次CPU突发的长度

只能估计出的长度

可以通过使用以前的CPU突发的长度来完成,使用指数平均。

下一次CPU突发长度的预测

指数平均的例子

5.3.3 Priority Scheduling 优先级调度

将与每个进程关联的优先级编号

 该算法总是把处理机分配给就绪队列中具有最高优先权的进程。常用以下两种方法来确定进程的优先权:

 静态优先权: 静态优先权是在创建进程时确定的,在整个运行期间不再改变。依据有:进程类型、进程对资源的要求、用户要求的优先权。

 动态优先权: 动态优先权是基于某种原则,使进程的优先权随时间改变而改变。

 假定:最小的整数 = 最高的优先级.

 SJF是以下一次CPU脉冲长度作为优先数的优先级调度

优先权调度是抢占式还是非抢占式?

非抢占式优先级调度将高优先级的进程放在队列的最前面

抢占式优先级调度要求在高优先级进程到达时优先级中断运行进程

优先级调度例子

问题:饥饿(Starvation)-低优先级的进程可能永远不会执行。

(有传言说,当他们在1973年关闭麻省理工学院的IBM 7094时,他们发现了一个低优先级的流程,在1967年提交,但还没有运行)

解决方案:老化(Aging)-随着时间的推移,流程的优先级增加。——动态优先级

5.3.4 Round Robin (RR) 时间片轮转调度

 基本思路:通过时间片轮转,提高进程并发性和响应时间特性,从而提高资源利用率。

 RR算法:

 将系统中所有的就绪进程按照FCFS原则,排成一个队列。

 每次调度时将CPU分派给队首进程,让其执行一个时间片 (time slice) 。时间片的长度从几个ms到几百ms。

 在一个时间片结束时,发生时钟中断。

 调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程。

 进程可以未使用完一个时间片,就出让CPU(如阻塞)。

每个进程得到一个小单位的CPU时间(时间量子,time quantum),通常是10-100毫秒。经过此时间后,该进程将被抢占并添加到准备队列的末尾。

如果在准备队列中有n个进程,时间量子为q,那么每个进程一次获得1/n的CPU时间,最多为q时间单位的块。没有进程等待的时间超过(n-1)q时间单位。

响应时间=n*q

性能

q大 --> FIFO

q小 --> q相对于上下文切换必须很大,否则开销太高

 时间片长度的影响因素:

 就绪进程的数目:数目越多,时间片越小(当响应时间一定时)

 系统的处理能力:应当使用户输入通常在一个时间片内能处理完,否则使响应时间,平均周转时间和平均带权周转时间延长。

具有时间量子= 20的RR的例子

通常情况下,平均周转率高于SJF,但反应更好。

时间量子和上下文切换时间

周转时间随时间量子的变化而变化

80%的CPU突发应该小于q

时间⽚优先级都在⼀个队列⾥

5.3.5 Multilevel Queue Scheduling 多级队列调度

本算法引入多个就绪队列,通过各队列的区别对待,达到一个综合的调度目标

 根据进程的性质或类型的不同,将就绪队列再分为若干个子队列。

 每个作业固定归入一个队列。

 各队列的不同处理:不同队列可有不同的优先级、时间片长度、调度策略等。如:系统进程、用户交互进程、批处理进程等。

就绪队列被划分为单独的队列:

 foreground (interactive) 前台(交互式)

 background (batch) 后台 (批处理)

每个队列都有自己的调度算法:

 foreground – RR 前台轮转

 background – FCFS

 多级队列算法调度须在队列间进行

 固定优先级调度,即前台运行完后再运行后台。有可能产生饥饿

 给定时间片调度,即每个队列得到一定的CPU时间,进程在给定时间内执行;如,80%的时间执行前台的RR调度,20%的时间执行后台的FCFS调度

5.3.6 Multilevel Feedback Queue Scheduling 多级反馈队列调度

优先级会变化现在的操作系统

 多级反馈队列算法是时间片轮转算法和优先级算法的综合和发展。优点:

 为提高系统吞吐量和缩短平均周转时间而照顾短进程

 为获得较好的I/O设备利用率和缩短响应时间而照顾I/O型进程

 不必估计进程的执行时间,动态调节

多级反馈队列算法

 设置多个就绪队列,分别赋予不同的优先级,如逐级降低,队列1的优先级最高。每个队列执行时间片的长度也不同,规定优先级越低则时间片越长,如逐级加倍

 新进程进入内存后,先投入队列1的末尾,按RR算法调度;若按队列1一个时间片未能执行完,则降低投入到队列2的末尾,同样按RR算法调度;如此下去,降低到最后的队列,则按FCFS算法调度直到完成。

 仅当较高优先级的队列为空,才调度较低优先级的队列中的进程执行。如果进程执行时有新进程进入较高优先级的队列,则抢占执行新进程,并把被抢占的进程投入原队列的末尾。

几点说明

 I/O型进程:让其进入最高优先级队列,以及时响应I/O交互。通常执行一个小时间片,要求可处理完一次I/O请求的数据,然后转入到阻塞队列。

 计算型进程:每次都执行完时间片,进入更低级队列。最终采用最大时间片来执行,减少调度次数。

 I/O次数不多,而主要是CPU处理的进程:在I/O完成后,放回优先I/O请求时离开的队列,以免每次都回到最高优先级队列后再逐次下降。

 为适应一个进程在不同时间段的运行特点,I/O完成时,提高优先级;时间片用完时,降低优先级;

多级调度队列例子

多级反馈队列三个队列的示例:

 Q0 – time quantum 8 milliseconds

 Q1 – time quantum 16 milliseconds

 Q2 – FCFS

调度

一个新的作业进入服务于FCFS的队列Q0。当它获得CPU时,作业接收到8毫秒。如果没有在8毫秒内完成,作业将移动到队列Q1

在Q1,工作再次提供FCFS,并接收额外的16毫秒。如果它仍然没有完成,它将被抢占并移动到队列Q2。

进程调度例题分析

5.4* 多处理器调度

当有多个CPU可用时,CPU调度就会更加复杂

多处理器中的同质处理器

负载共享

非对称多处理——只有一个处理器访问系统数据结构,减轻了数据共享的需要

5.5* 线程调度

本地调度-线程库如何决定将哪个线程放到一个可用的LWP上

全局调度-内核如何决定下一个要运行哪个内核线程

Pthread Scheduling API

#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 5
int main(int argc, char *argv[])
{
	int i;
pthread t tid[NUM THREADS];
pthread attr t attr;
/* get the default attributes */
pthread_attr_init(&attr);
/* set the scheduling algorithm to PROCESS or SYSTEM */
pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
/* set the scheduling policy - FIFO, RT, or OTHER */
pthread_attr_setschedpolicy(&attr, SCHED_OTHER);
/* create the threads */
for (i = 0; i < NUM_THREADS; i++)
	pthread_create(&tid[i],&attr,runner,NULL);
    /* now join on each thread */
for (i = 0; i < NUM THREADS; i++)
	pthread_join(tid[i], NULL);
}
/* Each thread will begin control in this 
function */
void *runner(void *param)
{ 
	printf("I am a thread\n");
	pthread exit(0);
}

5.6 操作系统例子

 Solaris scheduling

 Windows XP scheduling

 Linux scheduling

Linux Scheduling

有两种算法:分时算法和实时算法

时间共享

优先信贷流程与大多数信贷安排

计时器中断发生时减记

当输入=0时,选择了另一个进程

当所有进程都有信用=0时,将发生重新创建

基于优先级和历史等因素

实时

软实时

Posix.1b兼容——两类

FCFS and RR

最高优先级的进程始终优先运行

优先级与时间片长度之间的关系

按优先级进行索引的任务列表

总结

 CPU Burst Time 、I/O Burst Time

 CPU-bound program(CPU型程序) 、I/O-bound program(I/O型程序)

 long-term scheduler(长程调度)、medium-term scheduler(中程调度)short-term scheduler(短程调度)

 time slicing(时间片)

 response time(响应时间)、turnaround time(周转时间)、waiting time(等待时间)、Average Turnaround time(平均周转时间)Average waiting time(平均等待时间)

 preemptive scheduling(抢占式调度)Nonpreemptive scheduling(非抢占式调度)

 throughput(吞吐量)

 selecting a process from the ready queue and allocating CPU to it

 scheduling algorithms

 first-come, first served (FCFS)

 shortest job first (SJF)

 provably optimal, but difficult to know CPU burst

 general priority scheduling

 starvation, and aging

 round-robin (RR)

 for time-sharing, interactive system

 problem: how to select the time quantum?

 Multilevel queue

 different algorithms for different classes of processes

 Multilevel feedback queue

 allow process to move from one (ready) queue to another

习题分析

1、Why the Shortest-Job-First process scheduling cannot be implemented? C

A It is too complex

B It requires special hardware

C The length of the next CPU burst is not known

D The length of the next I/O burst is not known

2、下列调度算法中,不可能导致饥饿现象的是___A____。

A. 时间片轮转

B. 静态优先数调度

C. 非抢占式短作业优先

D. 抢占式短作业优先

3、下列关于基于时间片的进程调度的叙述中,错误的是( B )
A.时间片越短,进程切换的次数越多,系统开销也越大
B.当前进程的时间片用完后,该进程状态由执行态变为阻塞态
C.时钟中断发生后,系统会修改当前进程在时间片内的剩余时间
D.影响时间片大小的主要因素包括响应时间、系统开销和进程数量等

4、下列事件中,可能引起进程调度程序执行的是(D)。

I.中断处理结束
II. 进程阻塞
III.进程执行结束
IV.进程的时间片用完

A、仅I、III
B、仅II、IV
C、仅III、IV
D、I、II、III、 IV

答案:D

解析:在时间片调度算法中,中断处理结束后,系统检测当前进程的时间片是否用完,如果用完,则将其设为就绪态或让其结束运行,若就绪队列不空,则调度就绪队列的队首进程执行,I可能。

当前进程阻塞时,将其放入阻塞队列,若就绪队列不空,则调度新进程执行,II可能。

进程执行结束会导致当前进程释放CPU,并从就绪队列中选择一个进程获得CPU, III可能。

进程时间片用完,会导致当前进程让出CPU,同时选择就绪队列的队首进程获得CPU,IV可能。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值