为了方便操作系统管理,对并发执行的各个程序加以控制和描述,引入了进程的概念。
定义:
之前的单道批处理系统,程序是串行执行的,内存中可能只需要记录单一程序的程度段和数据段即可;但是现在使用的是多道批处理系统,多个程序并发执行,内存中就可能存在多个程序自己的程序段和数据段,那么这时候就需要一个管理单元对这些东西加以区分、描述和管理,所以就额外多了一个进程控制块,也就是 PCB。
系统会为每一个运行的程序分配 PCB 这么一个数据结构,用以描述进程的各种信息。PCB 是进程存在的唯一标志,进程与 PCB 是一一对应的的。
PCB 记录了关于进程的信息,这些信息包括:
程序段(程序代码)、数据段(变量、常量等),PCB(相关的管理信息) 共同构成了进程实体(进程映像)。一般认为 进程实体 === 进程 === PCB
PS:下文提到的多个进程的组织方式,也可以说就是多个 PCB 的组织方式
创建态:为进程分配资源,初始化 PCB
运行态:占有 CPU 使用权,在 CPU 上运行(对于单核处理器,一个时刻只会有一个进程)
就绪态:万事俱备(运行需要的条件都有了),只欠东风(只等 CPU 空闲下来,好让自己在上面运行)
阻塞态(等待态):进程进行系统调用,或者等待事件发生时,进入阻塞态
终止态(结束态):回收为进程分配的资源,撤销 PCB
(1)挂起:
前面所说的状态转换,是建立在内存资源够用的情况下 —— 当系统资源尤其是内存资源不够时,就需要将一些进程挂起(suspend),对换到外存中。
(2)原因:
引起进程挂起的原因是多样的,主要有:
(3)状态转换
引入挂起操作后,在原来五种状态的基础上多了两个状态:就绪态变成了活动就绪态,且多了一个“静止就绪态/挂起就绪态“;原来的阻塞态变成了活动阻塞态,且多了一个“静止阻塞态/挂起阻塞态“。
状态 | 解释 |
---|---|
活动就绪态 → 静止就绪态 | 操作系统根据当前资源状况和性能要求,可能会把活动就绪态对换出去,成为静止就绪态。处于静止就绪态的进程不再被调度执行; |
静止就绪态 → 活动就绪态 | 内存中没有进程处于活动就绪态,或者处于静止就绪态的进程具有更高的优先级,那么静止就绪态就会被对换回来,此时才可能被调度执行 |
活动阻塞态→ 静止阻塞态 | 操作系统根据当前资源状况和性能要求,可能会把活动阻塞态对换出去,成为静止阻塞态。 |
静止阻塞态→ 静止就绪态 | 常见的情况是,引起进程等待的事件发生之后,相应的静止阻塞态进程将转换为静止就绪态 |
静止阻塞态→ 活动阻塞态 | 但有时候,如果静止阻塞态进程的优先级高于静止就绪队列中的任何进程、并且系统有把握它等待的事件即将完成,那么就会激活为活动阻塞态 |
运行态→ 静止就绪态 | 优先级较高的静止阻塞态在等待的事件完成后,可能会抢占 CPU,若此时资源不够,则可能导致正在运行的进程挂起为静止就绪态 |
创建态→ 静止就绪态 | 操作系统根据当前资源状况和性能要求,可能会在进程创建完就把它对换到外存 |
PS:进程一旦被挂起,就意味着它被对换到了外存中,此时该进程无法再被 CPU 直接调度,除非它被对换回内存中,回到活动就绪态。比如静止就绪态、静止阻塞态,最后要得到 CPU 的调度,都必须经历回归到活动就绪态的过程。
参考: