744 字
4 分钟
抢占式调度是什么?SJF 和 MLFQ 适合什么假设
  1. 1操作系统面试学习路线与知识地图
  2. 2什么是用户态和内核态
  3. 3什么是系统调用?它和普通函数调用有什么区别
  4. 4进程和线程有什么区别
  5. 5进程的五种状态:新建、就绪、运行、阻塞与终止
  6. 6fork、exec 和 wait 分别做什么
  7. 7什么是竞态条件和临界区?如何保证互斥
  8. 8互斥锁和自旋锁有什么区别?分别适合什么场景
  9. 9死锁的四个必要条件是什么?如何逐个预防
  10. 10缺页异常如何处理?虚拟内存不等于 Swap
  11. 11阻塞、非阻塞、同步、异步 I/O 怎么区分
  12. 12抢占式调度是什么?SJF 和 MLFQ 适合什么假设本文
  13. 13进程间通信如何选择?管道、共享内存、信号和 Socket
  14. 14线程切换时,操作系统要做哪些操作
  15. 15进程上下文切换要保存什么?为什么有开销
  16. 16死锁是什么?如何预防和避免死锁?
  17. 17银行家算法如何避免死锁?死锁检测后怎样恢复
  18. 18活锁、饥饿和死锁有什么区别
  19. 19进程调度算法:FCFS、SJF、优先级、时间片轮转与多级反馈队列
  20. 20调度指标有哪些?什么是优先级反转
  21. 21为什么要有虚拟内存
  22. 22TLB、多级页表和虚拟地址转换是怎么工作的
  23. 23什么是分段,什么是分页
  24. 24页面置换算法有哪些?FIFO、LRU 和 Clock
  25. 25信号量是什么?计数信号量和二元信号量怎么用
  26. 26条件变量是什么?为什么要和互斥锁配合使用
  27. 27进程间通信方式:管道、消息队列、共享内存、信号量与套接字
  28. 28I/O 模型有哪些:阻塞、非阻塞与多路复用
  29. 29select、poll 和 epoll 有什么区别
  30. 30epoll 的 LT 和 ET 模式有什么区别
  31. 31什么是异步 I/O?它和非阻塞、多路复用的区别
  32. 32什么是僵尸进程和孤儿进程?如何处理
  33. 33原子操作是什么?原子性、可见性和有序性有什么区别
  34. 34什么是工作集和抖动?内存不足时为何系统变慢
  35. 35mmap 是什么?文件映射和匿名映射怎么理解
  36. 36什么是写时复制?fork 和私有映射如何利用 COW

非抢占调度下,任务取得 CPU 后通常运行到主动阻塞、结束或主动让出;抢占式调度允许系统因时间片耗尽、优先级更高任务就绪等事件暂停当前任务,再调度其他任务。抢占能改善交互响应和高优先级任务延迟,但带来调度与上下文切换成本,且共享状态必须正确同步。

短作业优先(SJF)在可选任务中挑预计 CPU 服务时间最短者。经典结论“平均等待时间最小”依赖明确假设,例如一批作业同时可用、运行时间已知且采用单处理器工作保守调度;现实中未来 CPU burst 未知,只能估计,长任务还可能饥饿。SJF 通常是非抢占;若新任务到来后可抢占并改选剩余 CPU 时间最短者,称最短剩余时间优先(SRTF)。两者不能混为同一个执行策略。

多级反馈队列(MLFQ)用多条优先级队列动态调整任务位置,目标是在不知道任务长度时兼顾短交互任务响应与长 CPU 任务公平。新任务通常先进入高优先级队列;持续用满时间片的任务逐渐降级,频繁主动让出 CPU 的任务可能保持较高优先级。策略需明确每级时间片、降级规则、同级轮转和周期性提升优先级等机制。若没有优先级提升或其他公平保障,低队列任务可能长期饥饿。

选择调度策略时要说明优化指标:响应时间适合交互系统,吞吐量适合批处理,截止期限和最坏延迟适合实时负载;调度开销、公平性和优先级反转也会影响结果。算法名字不构成对实际系统表现的保证,运行时间预测和负载分布是关键前提。

常见追问#

Q:SJF 与 SRTF 的区别?
A:SJF 通常非抢占,选最短作业后运行到阻塞或结束;SRTF 是抢占式版本,比较各任务剩余 CPU 时间,新任务更短时可抢占当前任务。

Q:SJF 为什么不是现实系统的万能最佳算法?
A:它依赖已知或可预测的作业时长;真实 CPU burst 不确定,长任务可能饥饿,而且交互响应或实时截止期未必是其优化目标。

Q:MLFQ 如何减少长任务饥饿?
A:可周期性把任务提升到较高队列、老化优先级或给低队列保障时间;具体策略要平衡交互响应与公平性。

Q:抢占式调度有什么代价?
A:需要处理中断、保存恢复上下文,可能破坏缓存局部性;并发代码还必须避免共享数据在抢占交错下出现竞态。

抢占式调度是什么?SJF 和 MLFQ 适合什么假设
https://blog.xqcherry.top/posts/interview/operating-system/preemptive-scheduling-sjf-mlfq/
作者
xqcherry
发布于
2026-10-12
许可协议
CC BY-NC-SA 4.0