3.2 作业与作业调度
L15
学习目标
死锁有四个必要条件;预防、避免(银行家)、检测与解除是四条路。MCU 固件里更常见的是两个任务互相等锁——用设计避免,而不是上完整检测器。
- 四条件:互斥、占有且等待、不可抢占、循环等待。破坏任一条件即可预防。
- 银行家算法用安全序列避免进入不安全状态,实现代价高,适合动画理解。
- 固件实例:任务 A 持 UART 锁等 GPIO,任务 B 持 GPIO 锁等 UART。超时放弃是工程折中。
- 截止期错过=失败。
- 本课不实现完整 EDF。
- FCFS/SJF 等作业算法仍可用于理解指标。
- 不在 SOWL 上实现批作业系统。
原理 · 深入理解
3.2 作业与作业调度
在多道批处理系统中,作业是用户提交给系统的一项相对独立的工作。操作员把作业输入到磁盘,保存在后备作业队列中,再由作业调度程序调入内存。
3.2.1 批处理系统中的作业
作业和作业步的概念,以及作业控制块 JCB。
- 作业和作业步
- 作业控制块(JCB)
作业从进入系统到运行结束,经历收容、运行和完成三个阶段,对应后备状态、运行状态和完成状态。
- 收容阶段
- 运行阶段
- 完成阶段
3.2.2 作业调度的主要任务
作业调度的主要任务:根据 JCB 中的信息检查资源能否满足需求,按调度算法从后备队列选取作业调入内存,创建进程并分配资源。
- 接纳多少个作业
- 接纳哪些作业
3.2.3 先来先服务(FCFS)和短作业优先(SJF)调度算法
先来先服务(FCFS)是最简单的调度算法,既可用于作业调度也可用于进程调度。在作业调度中,系统按作业到达先后次序调度,优先考虑在系统中等待时间最长的作业,而不管其所需执行时间长短。
具体做法是从后备作业队列中选择最先进入的几个作业调入内存,为之分配资源、创建进程并放入就绪队列。
FCFS:first-come first-served,按到达先后调度
短作业优先(SJF)算法以作业长短计算优先级,作业越短优先级越高,可用于作业调度和进程调度。用于作业调度时,从外存后备队列中选择估计运行时间最短的若干作业优先调入内存运行。
SJF 的缺点包括:必须预知作业运行时间;对长作业非常不利,长作业周转时间明显增长;无法实现人机交互;未考虑作业紧迫程度,不能保证紧迫作业及时处理。
- 必须预知作业的运行时间
- 对长作业非常不利,长作业周转时间明显增长
- 无法实现人机交互
- 未考虑作业紧迫程度,不能保证紧迫作业及时处理
SJF:短作业优先,作业越短优先级越高
3.2.4 优先级调度算法和高响应比优先调度算法
高响应比优先调度算法(HRRN)兼顾作业等待时间与运行时间,既照顾短作业,又不使长作业等待过久,从而改善处理机调度性能。
由于等待时间与服务时间之和即为系统对该作业的响应时间,故优先级又相当于响应比 RP。优先级变化规律:响应比 =(等待时间 + 要求服务时间)/ 要求服务时间。
HRRN:Highest Response Ratio Next
响应比 RP =(等待时间 + 要求服务时间)/ 要求服务时间
优先级调度算法(priority-scheduling algorithm)按优先级选择作业或进程运行。FCFS 中等待时间即优先级,等待越久优先级越高;SJF 中作业长短即优先级,运行时间越短优先级越高。
但这两种优先级都不能反映作业的紧迫程度,因此需要引入更一般的优先级机制,以及能兼顾等待时间与运行时间的高响应比优先算法。
FCFS:等待时间为优先级
SJF:作业长短为优先级
二者均不能反映作业紧迫程度
做 · 交互动画
- 根据「学习目标」列出 3 个关键词,对照原理段落解释给自己听。
作业与作业调度
用控件单步操作;日志区记下每一步发生了什么。
总结与提升
- 能默写死锁四条件,并举一个固件中的例子。
- 能用自己的话复述学习目标,并指出概念与板上实验的对应。
- 能区分硬实时与软实时。
- 能解释为何嵌入式课弱化作业调度实验。
延伸思考
- 超时放弃算不算「解除死锁」?
- 如果把本节机制拿到 Linux 或完整 OpenHarmony 上,会多出哪些硬件假设?
- 灯带刷新是硬实时还是软实时?
- OTA 升级队列算不算「作业」?