“本页把带所有者的互斥锁加入单核可抢占服务账本。每个线程有固定基础优先级p,数值越小越高;实际派发看有效优先级e。线程可能同时持有多把锁,但一次最多挂起一个获取请求;被锁阻塞时没有运行资格。仅…”
四个任务都能正确保存和恢复寄存器,仍可能有一个很久轮不到CPU。上下文切换理路上下文切换与线程派发Context switch and dispatch · Ready running blocked用就绪、运行、阻塞三态解释CPU执行权交接,逐步核对用户trap frame、内核续点和地址空间恢复。解决“怎样交接执行”,调度政策还要解决“下一段时间交给谁”。比较政策之前,先需要一份不会把等待算成运行的共同账本。
形式陈述
一台CPU,四份尚未完成的工作
本单元使用自定实例SCHED-16。时间单位为毫秒,CPU每运行1毫秒就交付1毫秒服务。任务均只有一段CPU工作,不做I/O、没有锁等待、不迁移到其他CPU;上下文切换暂按零成本处理。真实应用当然复杂得多,这些限制让我们能先把政策本身算清。
| 任务 | 到达时刻 |
需要的CPU服务 |
|---|---|---|
| A | 0 | 9 |
| B | 1 | 4 |
| C | 2 | 2 |
| D | 4 | 1 |
“B在1到达”表示它从1开始有资格竞争CPU;“B需要4”表示它累计实际运行4毫秒才能完成。若B等了10毫秒但一次也没运行,它仍需要4毫秒,不会因为墙钟走过而自动接近完成。
总需求为
状态里留下什么
在时刻
这里的
任务尚未到达时处于NEW;到达后可以是READY或RUNNING;服务达到
任意时刻都检查三件事:至多一个任务RUNNING;READY任务在相应队列恰出现一次;
直觉
运行一段,怎样更新
若在
假设先给A运行
用半开区间
例子与边界
同一时刻的动作也要排好顺序
SCHED-16统一采用以下边界约定:先结算刚结束的运行;已完成者退出;把此刻新到达者按A、B、C、D顺序加入相应队尾;若当前任务只是用尽时间片,则在新到达者之后重新排队;最后作新的选择。唤醒事件若出现,与到达一同按任务名处理。
例如轮转中,A的第一片恰在2结束,而C也在2到达。1时刻已经入队的B在前,随后是C,最后才是重新排队的A,因此队列为B、C、A。另一个系统可以规定A先重排,再处理C;那也可能正确,但它是另一条轨迹,不能把两种约定的完成时间拼到同一答案里。
抢占是一个仍有资格运行的任务被政策暂停,它回到READY。阻塞是任务暂时没有资格运行,例如等待磁盘数据,它转到BLOCKED。给BLOCKED任务更高优先级不会使磁盘提前交付数据;只有唤醒事件才能让它重新参加选择。
把墙钟时间分账
一个任务到完成为止,时间可以分成实际服务
主例没有阻塞,因此
考虑切换开销时,本单元把每个尚未完成、可运行但未获CPU服务的任务视作处在等待中;整机另有DISPATCH区间。于是切换时间不增加任何
推论与应用
一眼发现不合法的时间线
对任意观察区间
若画出的条带覆盖0到16,却累计给A10、B4、C2、D1,总服务17,就发生了重叠或重复记账。若只有15,则漏了工作或把一段空闲藏掉了。总量核验不能证明每次选择都符合某个算法,但能先排除一大类漂亮而错误的图。
本页允许任意满足状态合同的政策;只有声明为工作保守时,才要求有READY任务就不空闲。主动等待未来短任务的离线计划不工作保守,却未必违反状态安全。到多核、变速CPU或锁依赖场景,守恒式和资格规则要相应重写,不能机械沿用单核的16毫秒终点。
接下来在调度指标理路周转、响应与CPU利用率CPU scheduling metrics · Turnaround time · Scheduling response time · CPU utilization从同一执行轨迹分别计算完成、首次派发、就绪等待与整机吞吐,说明平均值、尾部与忙碌口径不能互相替代。页,把这份事件账本变成可比较的周转、首次响应和利用率。
参考资料
- Remzi H. Arpaci-Dusseau、Andrea C. Arpaci-Dusseau,Operating Systems: Three Easy Pieces, Ch.7, §§7.1–7.2:工作负载假设与度量接口;SCHED-16数据、边界次序和守恒核验为本单元自定。
- Fernando J. Corbató、Marjorie Merwin-Daggett、Robert C. Daley,“An Experimental Time-Sharing System”,AFIPS Spring Joint Computer Conference 21,1962,pp.335–344,尤其pp.336–338的时间片、中断与使用时间记账。