热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

清华大学操作系统OS学习(十)——处理机调度

一、处理机调度概念1、进程切换(上下文切换):切换CPU的当前任务,从一个进程线程到另一个,保存当前在PCB

一、处理机调度概念

1、进程切换(上下文切换):切换CPU的当前任务,从一个进程/线程到另一个,保存当前在PCB/TCB中的执行上下文,读取下一个的上下文

2、CPU调度:从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个线程/进程

3、调度程序:挑选进程/线程的内核函数(通过一切调度策略)使得效率最高,满足用户需求

4、在进程/线程的生命周期中的什么时候进行调度?

从一个状态变为另一个状态,特别是和运行(running)相关的状态。

内核运行调度程序的条件:进程从运行状态切换到等待状态or终结了(done)

不可抢占调度,调度必须等待事件/进程结束,早期OS。

现在多为可以抢占的进程,OS决定在何时打断进程,调度程序在中断被响应后执行,当前进程从运行切换到就绪,或者一个进程从等待切换到就绪,可以被换出。

5、针对的是用户态的进程。

进程在内核中通过系统调用执行,因为系统调用返回时是到发起这个调用的进程继续执行,所以内核中不会切换,抢占。只要进程在系统调用时不存在从运行态到阻塞态的变化,OS可以确保返回正常。

 

二、调度准则

1、处理机资源的使用模式

CPU的占用率是波状,CPU大量运算是高峰,而读写I/O时是平稳的低值。每个调度决定都是关于下一个CPU突发时将哪个工作交给CPU,在时间分片下,线程可能在结束当前CPU突发前被迫放弃CPU。 

程序在CPU突发和I/O中交替,CPU占用率高说明是在充分地使用CPU。

2、比较调度算法的准则

①CPU使用率:CPU处于忙状态的时间百分比

②吞吐量:单位时间内完成的进程数量

③周转时间:一个进程从初始化到结束包括(所有等待时间)所花费的总时间,周转时间=等待时间+服务时间

④等待时间:进程在就绪队列中的总时间,进程从就绪态到运行态的时间。

⑤响应时间:一个请求被提交到第一次响应所花费的总时间

2、吞吐量与延迟

什么是更快?

①高带宽:吞吐量高 (传输文件)

②低延迟:响应时间快(玩游戏)

3、调度算法的响应时间目标


  • 减少响应时间:及时处理用户的输入请求,尽快发馈给用户
  • 减少平均响应时间的波动:交互系统中,可预测性比高差异低平均更重要
  • 低延迟调度改善用户的交互体验 
  • 响应时间是操作系统的计算延迟

4、调度策略的吞吐量目标

①增加吞吐量:减少开销(操作系统开销,上下文切换) 、系统资源的高效利用(CPU,I/O设备)

②减少等待时间

5、处理机调度的公平性目标

①公平的定义:保证每个进程占用相同的CPU时间;保证每个进程的等待时间相同

②公平通常会增加平均响应时间

 

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

1、FCFS first come first served先来先服务算法

①依据进程进入就绪状态的先后顺序排列

②如果前面的进程运行的时间长,后面的进程就只能等着,导致周转时间慢。如果进程阻塞了,队列中的下一个会得到CPU

③特征

优点:简单 

缺点:平均等待时间波动大,花费时间少的可能反而排在后面,可能导致CPU和I/O之间的重叠处理,没考虑抢占,CPU密集的进程导致I/O闲置时,I/O密集型进程也在等。

2、短进程优先算法

①选择就绪队列中执行时间最短进程占用CPU进入运行状态,就绪队列按预期的执行时间来排序;

②短进程优先算法具有最优平均周转时间

不可抢占:SJF、SPN

可抢占:ready queue中的第一个进程正在运行时,来了一个比它的预测完成时间还短的进程,SPT

③特征

优点:最小的平均等待时间和周转时间

缺点:可能导致长任务饥饿,不能保证公平;需要预知未来下一个进程的时间,比如询问用户,如果用户欺骗就杀死进程。

④短进程优先算法的执行时间预估

根据执行历史看将来CPU突发的持续时间,递归展开

3、最高响应比优先算法(HRRN)

①选择就绪队列中响应比R值最高的进程

R=(w+s)/s

w:等待时间(waiting time)

s:执行时间(service time)

②在短进程优先算法的基础上改进;不可抢占;关注进程的等待时间;防止无限期推迟。

 

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

1、时间片轮换算法(RR)

①、时间片:分配处理机资源的基本时间单元

②、算法思路:用时间切片和抢占来轮流执行,强调了公平 

在量子切片/时间切片的离散单元中分配处理器,时间片结束时切换到下一个准备好的进程 

③、时间片长度

开销: 额外的上下文切换; 时间片太大则等待时间过长会退化成FCFS,太小反应迅速但吞吐量由于大量的上下文切换开销受影响 ;选择一个合适的时间片,经验是维持上下文切换开销处于1%以内,现在LINUX是千分之一秒

2、多级队列调度算法(MQ)

①、就绪队列分为多个相对独立的队列,前台交互,RR,后台/底层批处理,FCFS,调度在队列间进行,每个队列拥有自己的调度策略。

②、队列间的调度:

Ⅰ、固定优先级:先前台,再处理后台,可能导致饥饿

Ⅱ、时间切片轮转:每个队列都得到一个确定的,调度其进程的CPU总时间,如80%给前台,20%给后台

3、多级反馈队列算法(MLFQ)

①、优先级队列中的时间片轮换有动态调整:

一个进程可以在不同队列中移动,N级优先级

在所有队列中优先级调度,每个级别内部RR轮换

时间片大小随优先级增加而增加,若当前时间量子中没有完成就给当前任务则降到下一个优先级

②、一个进程,先是I/O密集型,提到高优先级,然后变为CPU密集型,就随着不断消耗时间片就下降到低的优先级,保证I/O密集型任务停留在高优先级 

等待时间越长,优先级越高,服务时间越长优先级越低 ,能动态地根据进程的特征调整队列和调度

4、公平共享调度(FSS)

①在用户级别实现公平共享 

②FFS 一些用户组比其他组更重要,保证不重要的组无法垄断资源,未使用的资源按照每个组所分配的资源的比例来分配,没有达到资源使用率目标的组获得更高的优先级

 

5、评价调度方法


  • 确定性建模,对确定的工作量计算每个算法的表现
  • 队列模型:用来处理随机工作负载的数学方法
  • 实现/模拟:建立一个允许算法运行实际数据的系统,最灵活,一般性

 

 

五、实时调度和多处理器调度

1、实时调度

①、定义:正确性依赖于其时间和功能两方面的一种OS

②、性能指标:时间约束的及时性(deadlines),速度和平均性能相对不重要,重点是时间约束的可预测性。

③、实时任务:任务/工作单元(一次计算,一次文件读取,一次信息传递等等) 

任务属性:取得进展所需要的资源和实时参数 

任务请求时间(release time):进程处于就绪态的时间 

相对截止时间(relative deadline): 任务是间隔时间段完成,每个任务有个特定的时间,要在特定的时间段内完成 

绝对截止时间(absolute deadline):最终的结束时间

④、周期任务:一系列相似的任务,有规律的重复

周期p=任务请求时间间隔 (0

执行时间e=最大执行时间,最大执行时间

使用率/利用率:U=e/p

2、类别 

硬实时系统/强实时系统:如果某个任务没完成有严重后果 

软实时系统/弱实时系统:重要的进程优先级更高,要尽量完成,如看视频,帧数没控制好会掉帧。

3、实时调度算法

①、速率单调调度算法(RM):通过周期安排优先级,周期越短优先级越高,执行周期最短的任务;

②、最早截止时间优化算法(EDF):截止时间越早优先级越高,执行截止时间最早的任务

4、多处理器调度 

要考虑:1,任务来了,放在哪个CPU上执行?2,怎么考虑公平性?load balance负载平衡 

多处理器的CPU调度更加复杂,多个相同的单处理器组成一个多处理器,优点是负载共享。对称多处理器(SMP),每个处理器运行自己的调度程序,需要在调度程序中同步

 

六、优先级反置

①、优先级反转:可发生在任何基于优先级的可抢占的调度机制中,当高优先级任务要等待低优先级任务时发生,优先级反转的持续时间取决于其他不相关任务的不可预测的行为 

②、优先级继承:如果有共享资源,低优先级任务继承等待它所占的资源的最高优先级任务的优先级,当阻塞发生时资源的拥有者的优先级会自动提升,使中间优先级的不能抢占。

T3先执行,到t2时访问共享资源,t3时T1抢占,开始执行T1,某时刻需要访问已经被T3占用的共享资源,但T3还没有释放,所以不能继续T1开始等待,t5时T2又抢占执行,此时T1受制于T2的执行时间,因为T1必须要等T3,导致T1的时间延长了,引起不稳定状态,系统重启。

T3的优先级继承了T1的优先级

③优先级天花板:资源的优先级=所有可以锁定该资源的任务中优先级最高的那个任务的优先级。事先统计。一旦某任务占用该资源,则优先级提升为资源的优先级。不论阻塞是否发生。

除非优先级高于系统中所有被锁定的资源的优先级上限,否则任务在尝试执行临界区的时候会被阻塞。

持有最高优先级上限信号量锁的任务,会继承被该锁阻塞的任务的优先级


推荐阅读
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • CentOS 6.5 上安装 MySQL 5.7.23 的详细步骤
    本文详细介绍如何在 CentOS 6.5 系统上成功安装 MySQL 5.7.23,包括卸载旧版本、下载安装包、配置文件修改及启动服务等关键步骤。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 本文详细介绍了Grand Central Dispatch (GCD) 的核心概念和使用方法,探讨了任务队列、同步与异步执行以及常见的死锁问题。通过具体示例和代码片段,帮助开发者更好地理解和应用GCD进行多线程开发。 ... [详细]
  • 对于许多初学者而言,遇到总线错误(bus error)或段错误(segmentation fault/core dump)是极其令人困扰的。本文详细探讨了这两种错误的成因、表现形式及解决方法,并提供了实用的调试技巧。 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 使用WinForms 实现 RabbitMQ RPC 示例
    本文通过两个WinForms应用程序演示了如何使用RabbitMQ实现远程过程调用(RPC)。一个应用作为客户端发送请求,另一个应用作为服务端处理请求并返回响应。 ... [详细]
  • 本文深入探讨了 Delphi 中类对象成员的核心概念,包括 System 单元的基础知识、TObject 类的定义及其方法、TClass 的作用以及对象的消息处理机制。文章不仅解释了这些概念的基本原理,还提供了丰富的补充和专业解答,帮助读者全面理解 Delphi 的面向对象编程。 ... [详细]
author-avatar
用户d4k2wd8en1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有