开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第18天,点击查看活动详情 这也是第23篇文章
调度时机
- 进程退出
- 进程阻塞
- I/O中断
- fork新进程后,选择父进程/子进程
调度算法分类
- 批处理
- 交互式
- 实时
调度算法目标
- 公平 但不同类型的进程没有可比性
Q:如何保证?
A:系统策略的强制执行
- 保持系统各部分尽可能忙碌
批处理系统
几大性能指标
- 吞吐量:系统每小时完成的作业数量
- 周转时间:从作业提交(也可理解为作业进入/到达就绪队列)到终止(作业完成)的时间。
- 平均周转时间:周转时间的算术平均
- 带权周转时间:指的是单个的时间,它是单个周转时间/cpu执行时间
- 平均带权周转时间:带权周转时间的算术平均
- CPU利用率
几个算法:以下列情况为背景:
先来先服务(first come first served)
队列
最短作业优先(shortest first served)
是非抢占式算法
- 前提:优先级相同
- 不过每次都得算一下才能知道哪个当前是最短的
- 性能最好的时候:初始时所有作业均已到达就绪队列
最高响应比优先(highest response ratio first)
介于先来先服务和最短作业优先之间,是非抢占式算法
响应比:1+截至目前的等待时间/当前作业要求执行的时间
- 短作业能获得良好服务,长作业也不会长时间等待而产生饥饿现象
最短剩余时间优先(shortest remaining time next)
!!新理解:最短作业的抢占式版本!!
吃着碗里的,看着新上的菜,因为其他在等待的进程运行完所需要的时间之前已经算过了,正是因为其他不是最好的选择所以才轮到当前这个进程,而且随着时间推移,当前正在执行的进程的所需剩余执行时间只会越来越短,其他在等待的并没有可比性。但新来的是未知的,有可能更好(完成所需的时间更短)
- 特点:新的短作业容易获得良好的服务
- 缺点:易造成大作业的饥饿现象
交互式系统
依然是以前述的示例为例:
轮转调度(RR)
- 时间片为1:
- 时间片为2:
优先级调度
看优先级规则如何定义。我做的题目里序号越小优先级越高得多。
分抢占式和非抢占式两种。
多级队列
同级队列按同一种算法调度,不同级队列间的优先级有差异,越往后优先级越低;到最后还分配不完,就按时间片轮转法调度。
最短进程优先
和最短作业优先一样的原理
保证调度
作出一个保证,然后努力实现
彩票调度
被调度是个概率问题
公平分享调度
取决于怎么定义“公平”
实时系统
- 硬实时:绝对不能出差错,如超过ddl
- 软实时:可以允许错误出现
满足周期性的条件:可处理:
否则会出现总共需要的CPU时间>提供的CPU时间
策略与机制分离
将调度算法参数化,参数可自定义
这样一来,机制位于内核,策略由用户进程定义。