零、题目示例

一、题目分析
1.1 前提条件
1.1.1 条件一:不考虑短期的进程调度切换
- 什么是“短期进程调度切换”?
- 调度器基于特定策略(如时间片耗尽等)主动中断当前运行进程,将CPU分配给其他就绪进程的行为叫做“短期进程调度切换”
- “不考虑短期进程调度切换”的含义
- 调度器不会主动剥夺正在运行进程的CPU使用权
- 进程切换只能由进程自身行为触发(如进程主动换下CPU进入就绪队列或主动自我阻塞进入阻塞队列)
1.1.2 条件二:不考虑系统进程
- 系统进程的含义
- 系统进程广泛地涵盖操作系统层面的所有管理型进程(非用户进程)
- “不考虑系统进程”的含义
- 当就绪队列为空时,CPU空闲;
- 实际中操作系统的执行情况
- 当就绪队列为空时,CPU执行系统进程;
- 系统进程中可执行如下语句:
while(1) { //系统进程while( 就绪队列是否为空 );1.取出就绪队列的队头用户进程;2.利用调度器将自己换下CPU,将用户进程换上CPU并修改其状态为执行态;
}
1.2 数量词
- m(m>1)个用户进程
- 1个处理机
二、题目解答
2.1 就绪状态的用户进程最多几个,最少几个?
2.1.1 就绪状态的用户进程最多数量【重点】
- 第零步:定义稳定的系统运行状态与不稳定的系统运行状态
- 不稳定的系统运行状态需满足如下两个条件:
- CPU空闲
- 就绪队列不为空
- 稳定的系统运行状态有以下两种
- 第一种
- CPU空闲
- 就绪队列为空
- 第二种
- CPU忙
- 就绪队列空与不空均可
- 【注意】不稳定状态一定是短暂存在的,最终系统运行状态均会趋于稳定状态,因此我们在做题时只考虑稳定状态!
- 第一步
- CPU空闲,就绪队列为空,系统处于稳定运行状态。
- 第二步
- 将第一个用户进程加入就绪队列。
- 第三步【最容易产生问题】
- 完成第二步后,在极短时间里,就绪队列内用户进程数量由 0 个增加到 1 个,且此时CPU空闲,因此构成系统的不稳定运行状态。
- 第四步
- 就绪队列中这个单独用户进程首先会被分配CPU资源,其运行状态被改为执行态,此时不稳定的系统运行状态条件被破坏,系统运行状态趋于稳定。
- 第五步
- 此时CPU忙且就绪队列为空,系统处于稳定运行状态、因此后续的(m-1)个用户进程依次被加入就绪队列。
- 综上,考虑所有前置条件,当系统处于稳定运行状态时,就绪状态的用户进程数量最多为 m-1 个
2.1.2 就绪状态的用户进程最少数量
- 当所有 m 个用户进程均被阻塞时,CPU空闲,就绪队列为空,满足系统稳定运行状态。
- 综上,考虑所有前置条件,当系统处于稳定运行状态时,就绪状态的用户进程数量最少为 0 个
2.2 阻塞状态的用户进程最多几个,最少几个?
2.2.1 阻塞状态的用户进程最多数量
- 当所有 m 个用户进程均被阻塞时,CPU空闲,就绪队列为空,满足系统稳定运行状态。
- 综上,考虑所有前置条件,当系统处于稳定运行状态时,阻塞状态的用户进程最多数量为 m 个
2.2.2 阻塞状态的用户进程最少数量
- 当 m-1 个用户进程处于就绪态,CPU忙时,满足系统稳定运行状态。
- 综上,考虑所有前置条件,当系统处于稳定运行状态时,阻塞状态的用户进程最少数量为 0 个
2.3 执行状态的用户进程最多几个,最少几个?
2.3.1 执行状态的用户进程最多数量
- 由前置条件 “1个处理机” 知,执行状态的用户进程最多数量为 1 个。
2.3.2 执行状态的用户进程最少数量
- 当所有 m 个用户进程均被阻塞时,CPU空闲,就绪队列为空,满足系统稳定运行状态。
- 综上,考虑所有前置条件,当系统处于稳定运行状态时,执行状态的用户进程最少数量为 0 个