题目 39:作业从进入后备队列到被调度程序选中的时间间隔称为( )
答案:B(等待时间)
深度解析
1. 作业生命周期的核心阶段
在多道批处理系统中,作业从提交到完成的完整流程分为四个关键阶段:
- 后备状态(Backup State):
- 作业已存入外存后备队列(磁盘输入井),等待作业调度程序选中。
- 核心特征:
- 作业已具备运行条件(程序、数据完整)。
- 未加载至内存 → 尚未占用CPU/内存资源。
- 等待对象:作业调度程序(与进程调度程序不同)。
2. "等待时间"的严格定义
- 公式:等待时间=T调度选中−T进入后备队列
- 技术本质:作业在后备队列中的排队延迟(Queueing Delay)。
- 影响因素:
因素 影响机制 作业调度算法 SJF算法下短作业等待时间短 系统负载 后备队列长度越长,平均等待时间增加 资源竞争 内存紧张时作业需等待资源释放
3. 与其他时间概念的区别
时间类型 | 定义 | 作用层级 |
---|---|---|
等待时间 | 后备队列排队耗时 | 作业级(批处理) |
周转时间 | 作业提交到完成的全程耗时 | 作业级 |
响应时间 | 用户指令发出到系统首次反馈的时间 | 进程级(分时) |
就绪等待时间 | 进程在就绪队列等待CPU的时间 | 进程级 |
关键结论:等待时间是作业调度专属指标,描述作业在外存队列的延迟,与进程级等待无关。
题目 40:为照顾紧急作业的用户,应采用( )
答案:E(基于优先权的剥夺调度算法)
深度解析
1. 紧急作业的核心需求
紧急作业(如医疗系统告警、实时控制指令)要求:
- 即时响应:从就绪到运行的延迟 ≤ 毫秒级。
- 可抢占性:中断当前非紧急任务(即使其未执行完)。
- 确定性:必须保证最高优先级任务绝对优先。
2. 优先权剥夺调度的运作机制
- 核心操作:
- 优先级定义:内核预设或动态分配优先级(如Linux实时优先级0~99)。
- 抢占触发:
- 硬件中断(外部事件)
- 系统调用(如
sched_setscheduler()
)
- 上下文切换:在纳秒级保存寄存器状态至PCB。
3. 与其他算法的致命缺陷对比
算法 | 紧急作业缺陷 |
---|---|
FCFS | 护航效应(长作业阻塞紧急作业) |
短作业优先(SJF) | 依赖时间预估(紧急作业无法证明"短") |
时间片轮转(RR) | 强制等待轮转周期(响应延迟不确定) |
多级反馈队列(MFQ) | 紧急作业需逐级晋升(延迟积累) |
4. 工程实践:Linux实时调度类
- SCHED_FIFO:
- 优先级最高的进程独占CPU直至结束或主动让出。
- 优先级相同时按FIFO排队。
- SCHED_RR:
- 在SCHED_FIFO基础上增加时间片限制(防止单进程饿死系统)。
- 优先级范围:
# Linux查看优先级范围 chrt -m SCHED_FIFO min/max priority: 1/99
题目 41:下列调度方式和算法中,最容易引起进程长期等待的是( )
答案:E(非抢占式静态优先权优先算法)
深度解析(1000+字)
1. 进程饥饿的本质原因
饥饿(Starvation)指低优先级进程无限期等待资源,核心成因:
- 静态优先级:进程优先级初始化后永不改变。
- 非抢占式:高优先级进程不释放CPU则低优先级永不执行。
2. 非抢占静态优先权的灾难场景
- 数学模型:
设高优先级进程到达率为λ,服务率为μ,则低优先级进程等待时间期望:E[Tw]→∞当 λ≥μ(高优先级进程持续到达使系统过载)
3. 其他算法的缓解机制
算法 | 抗饥饿机制 |
---|---|
抢占式静态优先权 | 高优先级可被更高优先级中断 |
动态优先权(非抢占/抢占) | 优先级随时间增长提升(如Aging策略) |
时间片轮转 | 每个进程周期性获得CPU |
4. 静态优先级的合理用例
仅在绝对确定性场景使用:
- 实时嵌入式系统:火箭控制(任务执行顺序严格预设)。
- 安全要求:必须确保关键任务完整执行(非抢占)。
题目 42(填空题):抢占调度方式中,抢占的原则有( )、( )和( )
答案:
(1) 时间片原则
(2) 短作业优先
(3) 优先权原则
深度解析(1000+字)
1. 时间片原则(Quantum Expiry)
- 运作逻辑:
进程执行超过固定时间片(如Linux默认5ms)→ 时钟中断触发 → 调度程序剥夺其CPU。 - 工程实现:
// Linux内核调度入口(简化) void schedule(void) { if (current->time_slice <= 0) { // 时间片耗尽 dequeue_task(current); // 移出运行队列 enqueue_task(current); // 重新加入就绪队列 current->time_slice = DEFAULT_TIME_SLICE; // 重置时间片 } pick_next_task(); // 选择新进程运行 }
2. 短作业优先原则(Shortest Job First)
- 抢占条件:
当新到达作业预估执行时间 < 当前作业剩余时间时,立即抢占CPU。 - 风险控制:
- 需防止虚假短作业声明 → 结合历史执行时间校验。
- 限制抢占频率(避免频繁上下文切换开销)。
3. 优先权原则(Priority Preemption)
- 层级设计:
优先级类型 抢占规则 硬实时优先级 立即抢占所有低优先级进程 软实时优先级 延迟数微秒后抢占(避免临界区问题) 分时优先级 仅当时间片耗尽时重新评估优先级 - Unix信号的应用:
SIGSTOP/SIGCONT
信号可实现手动优先级干预(暂停/恢复进程)。
4. 抢占原则的联合作用
现代操作系统采用多原则混合调度:
- Linux CFS调度器:
优先权原则(nice
值) + 时间片原则(虚拟运行时间记账)。 - Windows优先级反转处理:
当低优先级进程持有高优先级进程所需资源时,临时提升其优先级。
终极结论
- 等待时间是作业在外存后备队列的排队延迟(批处理系统专属概念)。
- 优先权剥夺调度通过硬件中断+上下文切换,保障紧急作业的确定性响应。
- 非抢占静态优先权是饥饿的主要成因,因低优先级进程完全丧失执行机会。
- 三大抢占原则:
- 时间片耗尽(强制公平)
- 短作业到达(优化吞吐量)
- 高优先级请求(保障实时性)
这些机制共同构成了操作系统兼顾效率与公平的调度基石。