当前课程知识点:操作系统(RISC-V) >  第十一讲 处理机调度 >  11.2 调度准则 >  11.2 调度准则

返回《操作系统(RISC-V)》慕课在线视频课程列表

11.2 调度准则在线视频

11.2 调度准则

讲义PDF版本参见课程wiki页面:

http://os.cs.tsinghua.edu.cn/oscourse/OS2020spring/lecture11


下一节:11.3 先来先服务、短进程优先和最高响应比优先调度算法

返回《操作系统(RISC-V)》慕课在线视频列表

11.2 调度准则课程教案、知识点、字幕

下面我们来介绍调度准则

也就说在我们处理机调度里头

我们调度的策略

和调度算法好坏的一个比较指标

那首先呢是调度策略

调度策略呢是用来确定

我如何从就绪队列当中

选择下一个执行进程

那这种选择呢

到底选择哪一个

实际上跟我们选择的

调度目标是有关系的

好 那这里我们具体说起来

有些什么问题呢

具体说起来就是挑选哪一个

第二个 挑选的时候

我用什么样的一个准则

来进行挑选

好 调度策略确定下来之后呢

那调度策略的实现

就是我们这里的调度算法

然后我们在这里呢

需要约定一个目标

说我到底这两个调度算法

或者是调度策略哪个比哪个好

在前面我们讲过存储管理

里头有置换算法

那个置换算法的标准很清楚

说到底哪个置换算法好呢

最后 对一个序列来讲

它的缺页次数最少 这就是好的

如果说是在一类的

测试用例里头

它平均的缺页次数少 那就是好的

但是对于调度策略来说呢

这件事情就没有这么简单了

那为了具体说明 我们的调度算法

用什么来作为它的考核指标

我们在这儿呢 有必要介绍一下

处理机的使用模式

也就是说我们通常情况下

进程占用CPU来执行

它通常处于

这样两种模式之间来回切换

一个是用CPU算

这叫CPU计算

另一个呢 我在CPU指挥下

我要进行I/O操作

这时候要跟外设打交道

在外设打交道时候呢

CPU通常情况下处于等待状态

通常情况下呢

我们的应用程序

在这两种状态之间做交替执行

那这种过程呢

我们可以用这样一个图式来表现出来

CPU计算 I/O操作

CPU计算 I/O操作

这几个序列是交替进行的

那从这种交替里头

我们能发现些什么规律呢

这些规律对我们的调度算法有影响吗

那我们对这里的这个执行的过程

做这样一些统计

统计出这样一个结果

说我们关心它每一次CPU执行的时间

这是这儿的横轴

然后根据每一次时间长短呢

对所有的CPU执行时间呢做一个统计

纵向是某一个长度的执行时间

它总的执行次数

那这时候呢我们就得到这样一条曲线

从这儿呢我们可以看到每一次执行呢

通常情况下它的时间都很短

比如说在这里看到的

就是8毫秒以内

好 那更长的时间呢

如果说你给它分配更长的时间片

那这时候呢 我们这件事情就没必要了

所以这个呢可以用来说

我们每一次执行的时间到底分配多长

这是会有依据的

好 那这时候说

我们一个要决定下一个给谁

那肯定是要给到

下一个就绪的进程

但是就绪进程如果有多个的话

我们怎么来判断

那这是第一个问题

第二个是说

如果在这里有时间片机制

也就是我对时间有要求的话

那进程如果说你的时间片分短了

比如说在这里头

我分的时间很短

那大多数操作

都没有执行到一个阶段的时候

你把它暂停下来

好 这样你恢复回来的时候

有些事情没法做了

好 这时候呢我可能被迫放弃CPU

这时候对进程的执行是不利的

所以我们在这儿要选一个

合适的时间尺度

来作为我们这里时间片的基本单位

好 有了这个介绍之后

我们再来看

我们关心的调度算法的目标

我会用什么样的一些指标来度量

我这个调度算法好与坏

首先第一个是CPU的使用率

也就说你不同的调度算法在进程执行等待I/O的时候

我是不是能够及时的找到另一个进程来占用CPU来执行

如果能那这样的话

我总的CPU的繁忙的时间

的比例就会提高

那最理想这是到100%

好 这是系统关心的一个目标

还有一个呢是吞吐力

在单位时间内我完成的进程数目

这是从系统利用效率的角度

来讲我关心的两个指标

而从用户的角度来讲呢

我们可能关心的是另外一些指标

比如说周转时间

从我提交作业到最后算出结果

这中间有多长时间

这是周转时间用户关心的

换个角度来说呢

他可能会关心我的等待时间

这里的等待时间是指

我进程在就绪队列的时间

因为处于我们进程状态里的

那个等待状态的时间

那是必须等的

因为你等I/O操作没结束

想干别的干不了

那我们能缩短的

是在处于就绪状态的这个时间

如果说我一个进程

从等待状态到了就绪

马上就能占用CPU来执行的话

那我的这个周转时间肯定就会短

好 然后对于交互性应用来说

我还关心它的响应时间

从我提交请求到系统给出响应

这中间需要多长时间

比如说我敲键盘 玩游戏

那这时候它不能及时响应我的操作

这是影响用户体验的

好 那在这里头我们说

到底这些指标搁到一起

好像他们都是矛盾的

我们怎么来做 好

这里头呢就有一个

我到底关心哪项指标是我的重点

通常情况下用户只是说

我希望更快的服务

到底怎么算快

那在这儿呢

我们给出这样一些描述

那在不同的情况下

我们对快的描述是不一样的

比如说我在传文件的时候

带宽高 那这时候是快

对应到我们调度算法里头呢

我在单位时间里

能执行更多的进程 这叫快

而在另一些情况下

如果说我是在玩游戏的时候

那我希望它的响应速度好

那就延时低

对于调度算法呢

它就是有低的响应延迟

也就是说响应时间很短 很快

那在这里头呢

这两个因素实际上是相互独立的

延时低并不一定意味着高带宽

高带宽并不一定意味着低延时

它们俩是相互独立的

好 我们在这儿呢用一个类比

来说明它们之间的关系

低延时是指说我想喝水

那这时候呢

那杯水我能很快的有水

我就能喝上了

所以这时候呢是从

我提出这个请求

到有水这个时间段

而如果说我是想把一个游泳池灌满

那这时候呢

开始有水的时间我并不关心

我关心的是最后灌满水的时间

这时候实际上需要的是

你这个水管子流量必须大

好 这是吞吐量和响应延时这两个指标

它们之间的对快的这个描述

好 依据这些描述

我们就可以把

处理机调度策略的目标

分成这样几个方面

一个呢是响应时间目标

我们希望快的响应

也就说减少响应时间

及时处理用户的输入请求

尽快地把输出反馈给用户

那同时呢 我们希望这种响应的时间

它的抖动必须很小

原因在于 如果说

你在某一些情况下响应时间很短

在另外一些情况下响应时间很长

那实际上这时候用户体验

它是很不稳定的

所以在这儿 可预测的响应时间

比高差异的低响应时间更重要

好 这是从这个角度来讲呢

我们改善了它的响应时间

那这时候呢

用户的交互体验就会好

如果说你操作了

机器没有及时给出响应

那这时候呢用户很可能就会说

我就把机器

认为它有故障了就会把它重启

好 所以在这个地方呢

响应时间是操作系统的一个

重要的调度算法要达到目标

这就是它这里的计算延时

另一个目标呢是吞吐量目标

也就说我们希望增加系统的吞吐量

那增加系统吞吐量呢

可以从两个角度来提出解决的方案

一个呢是减少开销

比如说我们上下文切换的时候

它的速度是不是能更快

第二个是提高系统的利用效率

你比如说CPU的利用率

I/O设备的利用率

如果让这两者都达到100%

那你的效率是最高的

同时减少等待时间

这个减少等待时间

用户和系统的目标呢是一致的

减少等待时间可以提高它的响应性能

也可以提高它的吞吐量的性能

好 那也就说我们在这里呢

要在有用户交互的情况下

应该保证系统的吞吐力

否则的话 那我们这个系统呢

它就没办法正常使用了

好 这时候说

吞吐量呢是系统的计算带宽

也就相当于我在单位时间里头

能够尽可能执行更多的进程

这是我们想要达到的目标

还有一个目标呢是公平性

也就说我们的系统它是不是公平的

什么是公平呢

我保证每一个进程占用相同的CPU时间

这是一种描述

这样就公平了吗 那不一定

如果说一个用户执行了更多的进程

那这时候每个进程的时间相同

各个用户之间它是不同的

好 那这时候说

我们换一种提法

让每一个进程的等待时间相同

所以在不同的时间 不同场合

它对公平性的度量是不一样的

好 所以在这里头我们说公平性

实际上你为了增加它的公平性

我在很多时候

会增加它的平均响应时间

也就是我会有一定的开销

来保证它是公平的

好 这是我们关于调度算法的度量指标

和一个调度算法怎么算好

给出来的相应的描述

操作系统(RISC-V)课程列表:

第一讲 操作系统概述

-1.1 课程概述

--课程概述

-1.2 教学安排

--视频

-1.3 什么是操作系统

--Video

-1.4 为什么学习操作系统,如何学习操作系统

--Video

-1.5 操作系统实例

--视频

-1.6 操作系统的演变

--视频

-1.7 操作系统结构

--视频

-1.8 OS实验概述

--视频

第二讲 操作系统与系统结构和程序设计语言

-2.1 从OS角度看计算机系统

--2.1 从OS角度看计算机系统

-2.2 从OS角度看RISC-V

--2.2 从OS角度看RISC-V

-2.3 Rust语言与系统编程

--2.3 Rust语言与系统编程

-2.4 RISC-V CPU启动

--2.4 RISC-V CPU启动

-2.5 RISC-V CPU启动进一步分析

--2.5 RISC-V CPU启动进一步分析

第三讲 中断、异常和系统调用

-3.1 基本概念与原理

--3.1 基本概念与原理

-3.2 硬件架构支持

--3.2 硬件架构支持

-3.3 中断处理机制

--3.3.1 中断处理机制–Overview

--3.3.2 中断处理机制–Detail-1

--3.3.3 中断处理机制–Detail-2

--3.3.4 中断处理机制–Detail-3

--3.3.5 中断处理机制–Summary

-3.4 系统调用

--3.4 系统调用

第四讲 物理内存管理: 连续内存分配

-4.1 计算机体系结构和内存层次

--4.1 计算机体系结构和内存层次

-4.2 地址空间和地址生成

--4.2 地址空间和地址生成

-4.3 连续内存分配

--4.3 连续内存分配

-4.4 碎片整理

--4.4 碎片整理

-4.5 伙伴系统

--4.5 伙伴系统

-4.6 SLAB分配器

--4.6 SLAB分配器

第五讲 物理内存管理: 非连续内存分配

-5.1 非连续内存分配的需求背景

--5.1 非连续内存分配的需求背景

-5.2 段式存储管理

-- 5.2 段式存储管理

-5.3 页式存储管理

--5.3 页式存储管理

-5.4 页表概述

--5.4 页表概述

-5.5 快表和多级页表

--5.5 快表和多级页表

-5.6 RISC-V页映射机制

--5.6 RISC-V页映射机制

-5.7 使能RISC-V页表

--5.7 使能RISC-V页表

第六讲 虚拟存储概念

-6.1 虚拟存储的需求背景

--6.1 虚拟存储的需求背景

-6.2 覆盖和交换

--6.2 覆盖和交换

-6.3 局部性原理

--6.3 局部性原理

-6.4 虚拟存储概念

--6.4 虚拟存储概念

-6.5 虚拟页式存储

--6.5 虚拟页式存储

-6.6 缺页异常

--6.6 缺页异常

-6.7 RISC-V缺页异常

--6.7 RISC-V缺页异常

第七讲 虚拟存储:局部页面置换算法

-7.1 页面置换算法的概念

--7.1 页面置换算法的概念

-7.2 最优算法、先进先出算法和最近最久未使用算法

--7.2 最优算法、先进先出算法和最近最久未使用算法

-7.3 时钟置换算法和最不常用算法

--7.3 时钟置换算法和最不常用算法

-7.4 Belady现象和局部置换算法比较

--7.4 Belady现象和局部置换算法比较

-7.5 页表自映射

--7.5 页表自映射

第八讲 虚拟存储:全局页面置换算法

-8.1 工作集置换算法

--8.1 工作集置换算法

-8.2 缺页率置换算法

--8.2 缺页率置换算法

-8.3 抖动和负载控制

--8.3 抖动和负载控制

-8.4 面向缓存的页替换算法

--8.4.1 面向缓存的页替换算法-FBR

--8.4.2 面向缓存的页替换算法-LRU-K 2Q

--8.4.3 面向缓存的页替换算法-LIRS

第九讲 进程和线程

-9.1 进程的概念

--11.1 进程的概念

-9.2 进程控制块

--9.2 进程控制块

-9.3 进程状态

--9.3 进程状态

-9.4 三状态进程模型

--9.4 三状态进程模型

-9.5 挂起进程模型

--9.5 挂起进程模型

-9.6 线程的概念

--9.6 线程的概念

-9.7 用户线程

--9.7 用户线程

-9.8 内核线程

--9.8 内核线程

-9.9 进程地址空间与熔断 (meltdown) 漏洞

--9.9 进程地址空间与熔断 (meltdown) 漏洞

第十讲 进程和线程控制

-10.1 进程切换

--10.1 进程切换

-10.2 进程创建

--10.2 进程创建

-10.3 进程加载

--10.3 进程加载

-10.4 进程等待与退出

--10.4 进程等待与退出

-10.5 rCore进程和线程控制

--10.5 rCore进程和线程控制

第十一讲 处理机调度

-11.1 处理机调度概念

--11.1 处理机调度概念

-11.2 调度准则

--11.2 调度准则

-11.3 先来先服务、短进程优先和最高响应比优先调度算法

--11.3 先来先服务、短进程优先和最高响应比优先调度算法

-11.4 时间片轮转、多级反馈队列、公平共享调度算法和ucore调度框架

--11.4 时间片轮转、多级反馈队列、公平共享调度算法和ucore调度框架

-11.5 实时调度

--11.5 实时调度

-11.6 优先级反置

--11.6 优先级反置

-11.7 rCore调度框架

--11.7 rCore调度框架

第十二讲 多处理机调度

-12.1 对称多处理与多核架构

--12.1 对称多处理与多核架构

-12.2 多处理器调度概述

--12.2 多处理器调度概述

-12.3 O(1)调度

--12.3 O(1)调度

-12.4 CFS调度

--12.4 CFS调度

-12.5 BFS调度算法

--12.5 BFS调度算法

第十三讲 同步互斥

-13.1 背景

--13.1 背景

-13.2 现实生活中的同步问题

--13.2 现实生活中的同步问题

-13.3 临界区和禁用硬件中断同步方法

--13.3 临界区和禁用硬件中断同步方法

-13.4 基于软件的同步方法

--13.4 基于软件的同步方法

-13.5 高级抽象的同步方法

--13.5 高级抽象的同步方法

第十四讲 信号量与管程

-14.1 信号量

--14.1 信号量

-14.2 信号量使用

--14.2 信号量使用

-14.3 管程

--14.3 管程

-14.4 哲学家就餐问题

--14.4 哲学家就餐问题

-14.5 读者-写者问题

--14.5 读者-写者问题

-14.6 Rust语言中的同步机制

--14.6 Rust语言中的同步机制

第十五讲 死锁和并发错误检测

-15.1 死锁概念

--15.1 死锁概念

-15.2 死锁处理方法

--15.2 死锁处理方法

-15.3 银行家算法

--15.3 银行家算法

-15.4 死锁检测

--15.4 死锁检测

-15.5 并发错误检测

--15.5 并发错误检测

第十六讲 进程通信

-16.1 进程通信概念

--16.1 进程通信概念

-16.2 信号和管道

--16.2 信号和管道

-16.3 Linux信号机制

--16.3 Linux信号机制

-16.4 消息队列和共享内存

--16.4 消息队列和共享内存

-16.5 D-Bus机制

--16.5 D-Bus机制

-16.6 Binder机制

--16.6 Binder机制

第十七讲 文件系统概念

-17.1 文件系统和文件

--17.1 文件系统和文件

-17.2 文件描述符

--17.2 文件描述符

-17.3 目录、文件别名和文件系统种类

--17.3 目录、文件别名和文件系统种类

-17.4 虚拟文件系统

--17.4 虚拟文件系统

-17.5 文件缓存和打开文件

--17.5 文件缓存和打开文件

-17.6 文件分配

--17.6 文件分配

-17.7 空闲空间管理和冗余磁盘阵列RAID

--17.7 空闲空间管理和冗余磁盘阵列RAID

第十八讲 文件系统实例

-18.1 FAT文件系统

--18.1 FAT文件系统

-18.2.1 EXT4文件系统-历史

--18.2.1 EXT4文件系统-历史

-18.2.2 EXT4文件系统-支持大容量存储

--18.2.2 EXT4文件系统-支持大容量存储

-18.2.3 EXT4文件系统-支持恢复异常

--18.2.3 EXT4文件系统-支持恢复异常

-18.3 ZFS文件系统

--18.3 ZFS文件系统

第十九讲 I/O子系统

-19.1 I/O特点

--19.1 I/O特点

-19.2 I/O结构

--19.2 I/O结构

-19.3 I/O数据传输

--19.3 I/O数据传输

-19.4 磁盘调度

--19.4 磁盘调度

-19.5 Linux I/O子系统

--19.5 Linux I/O子系统

第二十讲 内核与程序设计语言

-20.1 Linux内核错误分析

--20.1 Linux内核错误分析

-20.2.1 用rust写操作系统-系统编程语言rust

--20.2.1 用rust写操作系统-系统编程语言rust

-20.2.2 用rust写操作系统-rust与操作系统开发

--20.2.2 用rust写操作系统-rust与操作系统开发

第二十一讲 异步编程 (Asynchronous Programming)

-21.1 Background

--21.1 Background

-21.2 Futures in Rust

--21.2 Futures in Rust

-21.3 Generators and async/await

--21.3 Generators and async/await

-21.4 Self-Referential Structs & Pin

--21.4 Self-Referential Structs & Pin

-21.5 Waker and Reactor

--21.5 Waker and Reactor

第二十二讲 Virtual Machine Monitor

-22.1 Overview

--22.1 Overview

-22.2.1 How VMM works - CPU

--22.2.1 How VMM works - CPU

-22.2.2 How VMM works - memory & I/O

--22.2.2 How VMM works - memory & I/O

11.2 调度准则笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。