「操作系统」进程状态模型

本篇文章想简单谈谈进程状态模型的演变.

 

 

进程

 

进程由程序代码, 相关数据集与进程控制块(Process control block, 简称PCB)所构成. 当处理器开始执行这段代码时, 我们将执行的实体称为进程, 即计算机中已运行的程序.

与进程相关的一些控制信息都保存在进程控制块中, 进程控制块是操作系统支持多进程的关键. 进程控制块中的状态字段用于记录进程目前所处的状态.

进程派生即在一个进程中创建一个新进程, 原先的进程为父进程, 新进程为子进程.

 

 

两状态进程模型

 

两状态进程模型认为某个时刻, 一个进程要么是”运行”状态, 要么就是”非运行”状态.

「操作系统」进程状态模型

进程创建后为”非运行”状态, 获得CPU调度后转变为”运行”状态, 失去调度则转变为”非运行”状态, 周而复始, 直到程序执行完毕, 释放所占用资源.

二状态模型非常简洁, 实际上由于处理器同时只能执行一个进程, 而进程常常会等待I/O发生, 此时处理器是空闲的, 为了尽可能利用处理器, 由此衍生出五状态模型.

 

 

五状态进程模型

 

除了新增”新建”和”结束”两状态, 还增加了”阻塞”状态.

「操作系统」进程状态模型

"运行"至"阻塞"状态

处理器执行的进程在等待I/O时, 会从”运行”状态置为”阻塞”状态, 此时处理器会从”就绪”状态的进程中选择一个执行.

 

"阻塞"至"就绪"状态

等到I/O事件发生后, 进程才从”阻塞”状态置为”就绪”状态, 并在就绪队列中等待被处理器再次调度执行.

 

"新建"至"就绪"状态

"新建"状态时, 仅仅创建了PCB的信息. "新建"到"就绪"需要经过加载, 即为程序在内存中开辟相应空间.

 

“运行”至”就绪”状态

状态转变是由于时间片的缘故, 处理器虽然同时只能执行一个程序, 但分时操作系统会设置一个时间片, 即每个进程可获得一段处理器执行时间. 多个进程按序获得处理器调用, 并执行时间片的时间, 从而营造出多个程序是同时运行的假象. 进程执行满相应时间片的时间后, 会从”运行”状态置为”就绪”状态.

 

五状态模型看上去比较完善了, 但实际上还是会有问题.

我们知道只有在内存中的程序才会被处理器调用执行, 故所有等待被执行的程序都要首先被放入内存, 但内存是有限的, 有可能会出现不能调入所有待执行程序的情况, 而处理器速度非常快, 所以会出现内存中所有进程都被处理器执行了一遍, 都在等待I/O事件(即都是”阻塞”状态), 此时处理器空闲了, 却不能处理未进入内存的待执行程序.

针对上面这个问题, 可以通过不断增加内存大小来解决. 但还是有问题, 内存价格与大小是指数相关的, 不能一味增加大小. 因此操作系统引入了挂起(交换)的概念, 即内存已满时, 操作系统会将内存中等待I/O的进程(即”阻塞”状态)移动到硬盘中, 并从硬盘中调入新的"就绪"进程. 换出的进程被放置在挂起队列中, 由此引申出了七状态模型.

 

 

七状态进程模型

 

相较于五状态模型, 新增了”挂起就绪”与”挂起阻塞”两个状态, 通过交换技术分别对应”就绪”与”阻塞”状态. 前两者在硬盘中, 后两者在内存中.

「操作系统」进程状态模型

 

 

参考:

<操作系统-精髓与设计原理>(第八版) 第三章 进程描述和控制

 

文中如有不当之处, 还望包容和指出, 感谢~