操作系统期末复习——第五章 CPU调度
第五章 CPU调度
1.基本概念
- I/O为主的程序里短CPU区间较多
- CPU为主的程序里长CPU区间较少
非抢占调度/抢占调度
CPU调度程序
调度可能发生的时间:
- 进程终止
- 进程进入就绪队列
- 进程从运行态到就绪态,从运行态到阻塞态,从阻塞态到就绪态
2.调度准则
- CPU使用率
- 吞吐量:单位时间完成的进程量
- 周转时间:进程从就绪到结束的时间
- 等待时间:周转时间 - 运行时间
- 响应时间:从提交到响应的时间
3.调度算法
3.1先到先服务调度(FCFS)
先进就绪队列的进程先占用处理器
非抢占式算法,不会导致饥饿
优点:
- 公平
- 算法简单
缺点:
- 护航效应,对短作业/进程不利
护航效果:所有小进程等待一个大进程释放CPU
- 大进程:CPU区间长,I/O区间短
- 小进程:CPU区间短,I/O区间短
3.2最短作业优先调度(SJF)
选择CPU区间长度最短的进程,这里的CPU区间是进程的剩余CPU区间
可分为非抢占调度和抢占调度,可能导致饥饿
优点:
- 对于给定的一组进程,SJF在平均等待时间上最优
缺点:
- 不公平,对短进程有利,可能导致长进程饥饿。
- 进程的运行时间由用户提供,不一定能真正做到短作业优先
3.3优先级调度
每个进程都有优先级,数字越小优先级越高,优先级高者先执行
最短作业优先调度是优先级调度算法,进程优先级与CPU剩余区间长度成反比
分为抢占式优先级调度和非抢占式优先级调度
优点:
- 区分优先级,适用于实时调度系统
缺点:
- 可能导致饥饿
解决方案:
- 老化(aging)随等待时间增长,进程优先级增加
- 注意:低优先级进程释放后再次进入队列,其优先级为初始优先级而非老化后的优先级
3.4(时间片)轮转法调度
赋予进程时间片,每个进程只能在给定时间片长度内占用处理器,时间结束重新进入就绪队列尾部
时间片结束时仍未执行完的进程会被强制中断,故为抢占式调度方法
优点:
- 公平,响应快,适用于分时操作系统
缺点:
- 平凡切换有一定系统开销
- 不会区分任务紧急度
时间片大小的确定的问题:
- 时间片太大与相同先到先服务相同
- 时间片太小切换频繁负载重(如果切换时间约为时间片的10%,那么10%的CPU时间会浪费在切换上)
时间片的确定:
- 通常,如果绝大多数进程能在一个时间片内执行完毕,则平均周转时间会改善
- 根据经验,时间片应大于80%进程的CPU区间
3.5多级队列调度
有多个就绪队列,每个队列右自己的调度算法,并提供队列间调度机制
- 队列内采用的调度机制
- 队列间调度机制:
- 固定优先级抢占调度(例:前后台,开销低,缺乏灵活性)
- 队列间划分时间片
这里我们主要考虑以下调度机制:
- 每个队列间划分优先级,队内采用时间片轮换调度
- 优先级高的队列,其队内时间片短
- 进程先进入优先级最高的队列内,如果在该队列内一个时间片没有执行完毕,则退出该队列,进入优先级次之的队列内
- 如果在优先级最低的队列内一个时间片还未执行完毕,该进程继续进入优先级最低的队列
- 若进程在时间片内执行时被中断,则重新进入刚才的队列
以上调度算法为抢占式调度,会导致饥饿
优点:
- 相对公平,中庸之道
- 响应时间快
- 短进程很快就能执行完毕
- 不用估计进程运行时间
- 可以灵活调整队列调度算法
缺点:
- 可能导致饥饿
4.多处理器调度
- 对称多处理:每个处理器有自己的调度算法,不允许处理期间移动
- 非对称多处理:只有一个处理器进行调度任务,允许处理器之间移动
处理器亲和性:
- 软亲和性:允许处理器间移动
- 硬亲和性:不允许处理器间移动
负载平衡:保持所有处理器工作负载平衡,推/拉
5.线程调度
区分用户线程和内核线程,多线程系统的调度对象是线程
PCS:进程范围竞争,竞争发生在相同进程的线程之间,根据优先级完成(优先级由程序员给定)
SCS:系统竞争范围,竞争发生在系统所有线程之间
6.实时调度
实时系统中的进程有截止时间要求,进程要在截止时间前被执行完成,有截止时间的进程称为实时任务
- 硬实时系统:必须按时结束任务
- 软实时系统:可以适当超过时间
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现