在多道程序环境下, 程序的执行属于并发执行, 此时他们将失去封闭性, 并具有间断性, 以及其运行结果不可再现性的特征. 因此为了程序能够并发执行, 并且可以对并发执行的程序加以描述和控制, 人们引入了进程的概念
进程的定义
- 进程是程序的一次执行
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
- 进程是系统资源分配和调度的一个独立单位
进程的特征
-
动态性
进程的实质是程序在多道程序系统中的一次执行过程, 进程是动态产生, 调度和消亡的. -
并发性
多个进程实体存于内存中, 且能在一段时间内同时运行. -
独立性
进程实体是一个能独立运行,独立获取资源和独立接受调度的基本单位. -
异步性
进程按各自独立的,不可预知的速度向前推进.
进程的状态
三种基本状态:
- 就绪(Ready)
指进程已经处于准备好运行的状态, 即只要再获得CPU便可立即执行, 如果存在多个就绪的进程, 则系统会按一定的策略(优先级策略)排成一个队列, 成为就绪队列. - 执行(Running)
指进程获得CPU, 正在执行的状态, 多核CPU可同时执行多个进程. - 阻塞(Block)
正在执行的进程由于获取不到某些资源而暂时无法继续执行时, OS把CPU分配给另一个就绪的进程, 而让受阻的进程处于暂停状态, 一般将这种状态称为阻塞状态.
创建状态和终止状态
-
创建状态
进程的创建是一个很复杂的过程, 包括申请PCB, 申请资源, 插入就绪队列等, 如果因为申请不到资源, 或者内存不足等原因, 导致创建进程未完成, 从而进程不能被调度执行, 此时称进程所属的状态为创建状态. -
终止状态
当一个进程到达了自然结束点, 或是出现了错误 或是被操作系统中介 或是被其他进程终结, 它将进入终止状态, 进程终止后需要一些善后处理, 比如将其PCB清零返回等.
挂起操作
为了操作系统和用户观察分析进程的需要, 引入的一个重要操作
- 终端用户需要进程暂停下来进行研究和修改.
- 父进程希望挂起从而协调操作某个子进程
- 操作系统负荷调节
- 操作系统检查某个进程的资源使用或进行记账
引入挂起原语Suspend和激活原语Active后进程可能会发生以下状态的转换
- 活动就绪 == >静止就绪
- 静止就绪 == >活动就绪
- 活动阻塞 == >静止阻塞
- 静止阻塞 == >活动阻塞
进程间的状态转换
进程控制块PCB(Process Control Block)
- OS为每个进程定义了一个数据结构PCB, 为了便于系统描述和管理程序的运行.
- PCB记录了操作系统所需要的,用于描述进程状态和管理进程运行的全部信息.
- PCB使每个程序成为一个可以独立运行的基本单位, 使其能够与其他进程并发运行.
PCB作用
1. 作为独立运行单位的标志
2. 能实现间断性的运行方式
3. 提供进程管理所需要的信息
4. 提供进程调度所需要的信息
5. 实现与其他进程的同步与通信
PCB中的信息
-
进程标识符
用于唯一地标识一个进程 -
处理机状态
也称为处理机的上下文, 主要由处理机的各种寄存器中的内容组成 -
进程调度信息
存储有关调度的信息包括 进程状态, 进程优先级, 和进程阻塞原因等. -
进程控制信息
用于进程控制所必须的信息 包括程序和数据的地址, 进程同步和通信机制, 资源清单, 链接指针
进程控制块的组织方式
- 线性方式
即将所有的PCB组织在一张线性表中, 该方式实现简单,开销小,但查找较慢, 因此适合进程数目不多的系统 - 链接方式
把相同状态的PCB链接成一个队列, 可以链接就绪队列, 阻塞队列和空白队列等. - 索引方式
根据PCB的状态不同而建立记账索引表, 例如就绪索引表,阻塞索引表等