进程调度的两种方式
- 非剥夺方式:处理机一旦分配给某个进程后就让它一直执行,知道进程完成或发生某个事件而阻塞时,才把处理机分配给另一个进程。
- 剥夺方式:获得处理机的某个进程在运行过程中,系统可以基于某种原则,剥夺它拥有的处理机并分配给其他进程。
调度算法的分类
不同的环境需要不同的调度算法。也就是说在不同的系统中,调度程序的优化是不同的。可以划分出三种环境:
- 批处理系统
- 交互式系统
- 实时系统
常见的进程调度算法
批处理系统中调度
- 先来先服务算法FCFS:该算法总是把处理机分配给最先进入就绪队列的进程。某个进程一旦得到处理机后便一直执行,知道该进程完成或发生某事件而阻塞时,才会把处理机分配给另一个进程。
- 最短作业优先算法:该算法总是把处理机分配给就绪队列中占用处理机时间最短的那个进程。
- 最短剩余时间优先:总是选择剩余运行时间最短的那个进程运行。
交互式系统中调度
- 轮转调度:每个进程会依次被分配一个时间段,称之为时间片(quantum),即允许进程在该时间片中运行。如何在时间片结束时进程还在运行,则剥夺CPU并分配给另一个进程。如果进程在时间片内阻塞或结束,则立即切换CPU。
- 优先级调度:总是选择就绪队列中优先级最高的进程运行。确定优先级的两种方式:
- 静态赋予:在进程创建是赋予,在整个运行期间不变。
- 动态赋予:在基于某种策略的情况下,进程的优先级随着时间可能发生变化。
- 多级队列调度算法(CTSS):系统中设置多个就绪队列,每个队列设置为不同的优先级。
- 最短作业优先:
- 保证调度:
- 彩票调度:
- 公平分享调度: