现代操作系统:进程与线程(二)
2.1.4 Process States and Transitions进程状态和转换
首先只需要看上面一个三角形之间的关系,首先表明了进程的三个基本状态:
Running运行态:进程的外部执行条件满足(已获取到运行时需要的资源)且进程已获得CPU,表明该进程正在执行,单处理器系统中(单核)有且只有一个进程处于运行态;
Ready就绪态:进程的外部条件满足,但是由于其它进程已经占用CPU,因此该进程需要等待进入运行态,则此时称为就绪态;
Blocked阻塞态:进程因等待某种事件发生(如等待其它进程释放资源、等待一个时钟中断、等待其它进程发来的信号等)而暂时处于不能运行的状态,称为阻塞态。
P和Q进程调度
接下来我们分别创建两个进程P和Q,让他们轮流运行(当一个处于运行态时另一个处于就绪态)并被抢占,最终两个进程都会运行完毕。
接下来P进程发出了一个I/O请求,请求发出后将执行以下几个步骤:
- 由于I/O请求导致P进程阻塞;
- 过了一段时间后触发磁盘中断,驱动程序检测到进程P的请求已经被满足;
- P由阻塞态回到就绪态;
- 一段时间后OS调度程序会找到一个处于就绪态的进程,此时选择P进入运行态;
抢占式调度程序has the dotted line preempt具有虚线抢占?不可抢占的调度程序则不会,进程的数量只会在创建和终止两种情况下发生变化。
抢占式调度程序:进程进入运行态后会在运行达到一定条件后(如达到一定的时间)被OS强制转为就绪态;
非抢占式调度程序:进程进入运行态后不会由于非自身原因被转为就绪态,直至处理完毕或产生某些使其进入阻塞态的事件为止;
运行状态转化(3状态4转化):
Init --> Ready:新创建的进程处于就绪态;
Ready --> Running:进程处于就绪态且被调度器分配给CPU执行;
Running --> Ready:抢占式调度程序将当前正在执行的进程转为就绪态(时间片用完);
Running --> Blocked:进程因发生某些事件使得进程运行受阻则进入阻塞状态(I/O);
Blocked --> Ready:进程处理完中断,进程获取到了运行时需要的资源;
Running -->Terminate:进程自己正常结束;进程产生严重错误结束;进程强制被别人结束;
Suspend和Resume挂起和恢复
Suspend挂起:顾名思义就是先把这个进程放到一边去不用管,即使处于就绪状态下也不会被CPU调度为运行态(无论是否处于就绪态下都不分配CPU)。那么显而易见Suspend肯定不能附加于运行态,因此在引入挂起的定义后,进程的就绪和阻塞态都可以进一步被划分为:活动就绪-挂起就绪;活动阻塞-挂起阻塞。
Suspend的作用:a. 在系统繁忙时挂起一些不必要的进程降低系统负载;b. 将某些进程挂起可以更方便的找到存在问题方便协调调度。
引入Suspend后的状态转化(5状态9转化 --> 4+5种):
Ready --> Ready Suspended:当进程处于Ready状态时使用Suspend挂起该进程,处于Ready Suspended状态的进程不会被调度程序选中;
Ready Suspended --> Ready:处于Ready Suspended状态的进程被Resume后回到Ready状态,此时可以被调度程序选中;
Blocked --> Blocked Suspended:当进程处于Blocked状态时使用Suspend挂起该进程;
Blocked Suspended --> Blocked:处于Blocked Suspended状态的进程被Resume后回到Blocked状态;
Blocked Suspended --> Ready Suspended:Blocked Suspended下的进程获取道对应的及资源或中断处理完成后会转换为Ready Suspended;
挂起和恢复是一种中间调度:
- 需要花费更长时间;
- 涉及到一定的内存管理;
- 有时被称之为二级调度;
如前所述,可以围绕调度器组织操作系统。
编写一个最小内核(微内核),由调度程序、中断处理程序和进程间通信(IPC)机制组成。OS的其余部分由内核进程组成(例如,一个管理内存的内核进程和一个管理文件系统的内核进程)。这些内核进程充当用户进程的服务器(用户进程当然充当客户端)。
- 系统进程也会充当其他系统进程的客户端。
- 这种操作系统有时被称为基于服务器的操作系统。
- 以上就是Tanenbaum所喜欢的客户-服务器模型。他的Minix操作系统就是这样工作的。
- 一度有理由相信客户-服务器模式将主导操作系统设计。但是这种情况并没有发生,这在很大程度上是由于性能方面的考虑(流程切换是昂贵的)。
- 与基于服务器的系统相比,像传统Unix或Linux这样的系统被称为自助服务,因为用户进程是自己服务的。也就是说,用户进程切换到内核模式(通过TRAP指令)并执行系统调用本身,而不将控制转移到另一个进程。当然,虽然进程在技术上没有改变(PID在TRAP之后保持不变),但是程序已经从用户的程序到操作系统发生了巨大的变化。
posted on 2021-10-26 10:56 ThomasZhong 阅读(117) 评论(0) 编辑 收藏 举报