Process Management
概念
操作系统为正在运行的程序提供的抽象。
机器状态
进程需要知晓程序的机器状态
- 内存(代码和数据)
- 寄存器
进程状态
Unix 进程 API
- fork 调用
- wait 调用
- exec 调用
用户模式与内核模式
硬件通过提供不同的执行模式来协助操作系统。在用户模式(user mode)下,应用程序不能完全访问硬件资源。在内核模式(kernel mode)下,操作系统可以访问机器的全部资源。还提供了陷入(trap)内核和从陷阱返回(return-from-trap)到用户模式程序的特别说明,以及一些指令,让操作系统告诉硬件陷阱表(trap table)在内存中的位置。
时钟中断
时钟设备可以编程为每隔几毫秒产生一次中断。产生中断时,当前正在运行的进程停止,操作系统中预先配置的中断处理程序(interrupt handler)会运行。此时,操作系统重新获得 CPU 的控制权,因此可以做它想做的事:停止当前进程,并启动另一个进程。
进程调度
周转时间
- 先进先出(FIFO)
- 最短任务优先(SJF)
- 最短完成时间优先(STCF)
响应时间
- 轮转
多级反馈队列(Multi-level Feedback Queue,MLFQ)
- 规则1:如果A的优先级 > B的优先级,运行A(不运行B)。
- 规则2:如果A的优先级 = B的优先级,轮转运行A和B。
- 规则3:工作进入系统时,放在最高优先级(最上层队列)。
- 规则4:一旦工作用完了其在某一层中的时间配额(无论中间主动放弃了多少次CPU),就降低其优先级(移入低一级队列)。
- 规则5:经过一段时间S,就将系统中所有工作重新加入最高优先级队列。(应对饥饿问题)
MLFQ有趣的原因是:它不需要对工作的运行方式有先验知识,而是通过观察工作的运行来给出对应的优先级。通过这种方式,MLFQ可以同时满足各种工作的需求:对于短时间运行的交互型工作,获得类似于SJF/STCF的很好的全局性能,同时对长时间运行的CPU密集型负载也可以公平地、不断地稳步向前。因此,许多系统使用某种类型的MLFQ作为自己的基础调度程序,包括类BSD UNIX系统[LM+89,B86]、Solaris[M06]以及Windows NT和其后的Window系列操作系统。
多处理器进程调度
- 单队列
- 多队列
- 进程迁移