处理机调度之实时调度
3.4实时调度
3.4.1实现实时调度的基本条件
1、提供必要的信息
- 就绪时间:该任务成为就绪状态的时间。
- 开始截止时间或完成截止时间:只需知道一个。
- 处理时间:从开始执行到完成所需时间。
- 资源要求:任务执行时所需的一组资源。
- 优先级:根据任务性质赋予不同优先级。
2、系统处理能力强
假如系统中有m个周期性的硬实时任务,处理时间为Ci,周期时间表示为Pi;
- 则单机系统中必须满足条件:
∑( Ci / Pi )≤1 - 多处理机系统:
∑( Ci / Pi )≤N
3、采用抢占式调度机制
- 硬实时任务: 广泛采用抢占机制。
- 小的实时系统: 可采用非抢占调度机制(简化调度程序和对任务调度时所花费的系统开销)。
4、具有快速切换机制
- 对外部中断的快速响应能力。
- 快速的任务分派能力。
3.4.2实时调度算法的分类
可以按照不同方式对实时调度算法加以分类:
- 按照实时任务性质:
- 针对硬实时任务的调度算法
- 针对软实时任务的调度算法
- 按照调度方式:
- 非抢占式
- 抢占式
1、非抢占调度算法
非抢占式轮转调度算法:适用于要求不太严格的场合!
非抢占式优先调度算法:适用于要求较为严格的场合!
2、抢占式调度算法
基于时钟的抢占式优先权调度算法:
- 某高优先级任务到达后并不立即抢占,而等下一个时钟中断时抢占。
- 某高优先级任务到达后并不立即抢占,而等下一个时钟中断时抢占。
立即抢占的优先权调度算法:
- 一旦出现外部中断,只要当前任务未处于临界区,就立即抢占处理机。
- 一旦出现外部中断,只要当前任务未处于临界区,就立即抢占处理机。
3.4.3最早截至时间优先算法EDF(Earliest Deadline First)
- 该算法是根据任务的截止时间确定任务的优先级;
- 具有最早截止时间的任务排在队列的前面。
1.非抢占式调度方式用于非周期性实时任务
2.抢占式用于周期性实时任务
- 假如在一个实时系统中,有两个周期性实时任务A和B;
- 任务A要求每20ms执行一次,执行时间为10ms;
- 任务B要求每50ms执行一次,执行时间为25ms。
- 计算是否可调度
10/20+25/50=1, 可调度!
- 采用最早截至时间优先调度过程
与固定优先级算法对比:
3.4.4最低松弛度优先LLF(Least Laxity First)算法
- 最短空闲时间优先;
- 用松弛度来表示任务紧急程度;
- 松弛度=完成截止时间-运行时间-当前时间;
- 例如,任务A在200ms时必须完成,本身运行时间100ms,则必须在100ms之前调度执行,A任务的紧急(松弛)程度为100ms;
任务B在400ms时必须完成,需运行150ms,其松弛程度为250ms。
- 例如,任务A在200ms时必须完成,本身运行时间100ms,则必须在100ms之前调度执行,A任务的紧急(松弛)程度为100ms;
- 该算法主要用于可抢占调度方式中。
- 假如在一个实时系统中,有两个周期性实时任务A,B,任务A要求每20ms执行一次,执行时间为10ms;任务B要求每50ms执行一次,执行时间为25ms;
由此可得知AB任务每次必须完成的时间分别为A1、A2、A3…和B1、B2、B3…如下图:
采用最低松弛度优先
3.4.5优先级倒置
1.优先级倒置的形成
- ★ “优先级倒置”的现象
高优先级进程(或线程)被低优先级进程(或线程)延迟或阻塞。 - ★例子
- 有三个完全独立的进程P1、P2和P3,P1的优先级最高,P2次之,P3最低。
- P1和P3通过共享的一个临界资源进行交互。下面是一段代码:
P1: …P(mutex); CS-1; V(mutex);…
P2: … program2…;
P3: …P(mutex); CS-3; V(mutex) ;…
2.优先级倒置的解决方法
一种简单的解决方法-中断禁止:
- 假如进程P3在进入临界区后,P3所占用的处理机就不允许被抢占。
- 如果系统中的临界区都较短且不多,该方法是可行的。
- 反之,如果P3临界区非常长,则高优先级进程P1仍会等待很长的时间,其效果是无法令人满意的。
- 还要防止P3在临界区出现死循环。
一个比较实用的解决方法-优先级继承
- 当高优先级进程P1要进入临界区使用临界资源R时,如果已有一个低优先级进程P3正在使用该资源;
- 此时一方面P1被阻塞,另一方面由P3继承P1的优先级,并一直保持到P3退出临界区。
处理机调度之实时调度相关推荐
- 【Linux 内核】实时调度类 ③ ( 实时调度类 rt_sched_class 源码 | 调度类 sched_class 源码 )
文章目录 一.调度类 ( 停机调度类 | 限期调度类 | 实时调度类 | 公平调度类 | 空闲调度类 ) 二. 实时调度类 rt_sched_class 源码 一.调度类 ( 停机调度类 | 限期调度 ...
- 【Linux 内核】实时调度类 ⑤ ( 实时调度类 rt_sched_class 源码分析 | 结构体字段及函数指针分析 )
文章目录 一.rt_sched_class 结构体变量类型 sched_class 二.next 字段值 三.enqueue_task 函数指针值 四.dequeue_task 函数指针值 五.yie ...
- 【Linux 内核】实时调度类 ⑦ ( 实时调度类核心函数源码分析 | dequeue_task_rt 函数 | 从执行队列中移除进程 )
文章目录 一.dequeue_task_rt 函数 ( 从执行队列中移除进程 ) 二.update_curr_rt 函数 ( 更新调度信息 ) 本篇博客中 , 开始分析 struct sched_cl ...
- 【Linux 内核】实时调度类 ⑥ ( 实时调度类核心函数源码分析 | 插入进程到执行队列 | 从执行队列中选择优先级最高的进程 )
文章目录 一.enqueue_task_rt 函数 ( 插入进程到执行队列 ) 二.pick_next_task_rt 函数 ( 从执行队列中选择优先级最高的进程 ) 本篇博客中 , 开始分析 str ...
- 【Linux 内核】实时调度类 ② ( 实时调度实体 sched_rt_entity 源码分析 | run_list、timeout、watchdog_stamp、time_slice 字段 )
文章目录 一.sched_rt_entity 源码分析 1.run_list 字段 2.timeout 字段 3.watchdog_stamp 字段 4.time_slice 字段 5.back 字段 ...
- linux什么是实时调度,Linux 实时调度 示例
在上一篇博文中进行了原理性分析之后,本文举出一个实例进行分析(假设所有的cpu处于同一个cpuset中). 当前系统中cpu的情况如下如所示: 说明:0~99代表的是进程的实时优先级,cpu的状态与该 ...
- 【操作系统/OS笔记10】进程/线程的调度原则、调度算法、实时调度、多处理器调度、优先级反转
本次笔记内容: 8.1 背景 8.2 调度原则 8.3 调度算法1 8.4 调度算法2 8.5 实时调度 8.6 多处理调度与优先级反转 文章目录 CPU调度背景 上下文切换 CPU调度 在进程/线程 ...
- Linux---进程调度及CFS调度器
Linux的调度算法 (1)O(N)调度器 O(N)调度器发布于1992年,从就绪队列中比较所有进程的优先级,然后选择一个最高优先级的进程作为下一个调度进程. 优点:操作简单,便于理解. 缺点:时间消 ...
- Linux进程核心调度器之主调度器schedule--Linux进程的管理与调度(十九)
日期 内核版本 架构 作者 GitHub CSDN 2016-06-30 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度 ...
最新文章
- DHTML中style的display和visibility属性
- 用eval在txt中存储list,dict,tuple
- windows挂载linux网络文件系统NFS
- JavaScript中使Promise模式进行异步编程
- 做安全操作系统,这位技术老兵是认真的!
- 用阿里开源的 Nacos 搞微服务真香!
- 数据结构实现时所需的成员变量、标准对外接口
- TCP三次握手/四次分手详解
- ubuntu终止terminal中下载任务以及继续下载
- BOOST升压电路原理详解
- Java的身份证号码工具类
- 推荐几个好的粉碎文件的软件?这3款软件让你彻底摆脱无法删除文件的烦恼
- 如何不用电脑安装ipa
- 深入RxJava2 源码解析(一)
- c++小游戏 走迷宫
- java 矩阵求逆_详解用java描述矩阵求逆的算法
- 【LM】电池电量水平低 保留电池电量 关键级别电池电量水平
- 【Echarts】折线图/趋势图区间框选计算
- 谷歌浏览器 android 69,如何将谷歌浏览器69及以上版本切换回旧版UI界面
- Java如何读取和操作上G文本数据