进程

在进程模型中,计算机上所有可运行的软件,通常也包括操作系统,被组织成若干顺序进程(sequential process),简称进程(process)。一个进程就是一个正在执行程序的实例,包括程序计数器、寄存器和变量的当前值。从概念上说,每个进程拥有它自己的虚拟CPU。一个进程是某种类型的一个活动,它有程序、输入、输出以及状态。单个处理器可以被若干进程共享,它使用某种调度算法决定何时停止一个进程的工作,并转而为另一个进程提供服务。

PCB (Process Control Block)

进程管理字段 存储管理字段 文件管理字段
寄存器 正文段指针 root目录
程序计数器 数据段指针 工作目录
程序状态字 堆栈段指针 文件描述符
堆栈指针 用户ID
进程状态 组ID
优先级
调度参数
进程ID
父进程
进程组
信号
进程开始时间
使用的CPU时间
子进程的CPU时间
下次报警时间

从上表可以更好的理解进程的定义:一个进程是某种类型的一个活动,它有程序、输入、输出以及状态。

进程状态变更

Changes of Process State
对于进程的控制,使用的是原语,一般有创建原语、撤消原语、阻塞原语、唤醒原语等。

原语是指由若干条指令组成的程序段,在执行过程中不可被中断

进程的各种状态

创建

进程的创建由创建原语实现,创建原语主要有四步操作:

  1. 申请PCB
  2. 分配资源
  3. 初始化PCB
  4. 插入就绪队列

进程的创建主要由四种事件触发:

  1. 系统初始化
  2. 正在运行的进程创建子进程(fork)
  3. 用户请求创建
  4. 批处理初始化

就绪

此状态表示进程可运行,但因为其他进程正在运行而暂时停止。

阻塞

此状态下,除非某种外部事件发生,否则进程不能运行。

运行

此状态表示该时刻进程实际占用CPU,即正在运行。

终止

终止有两大类,一是自愿终止(正常退出&出错退出),二是非自愿终止(严重错误&被其他进程杀死),由撤销原语完成。

进程三种主要状态的变更

就绪状态 -> 运行状态

分配到CPU使用时间,状态变更至运行状态。

运行状态 -> 就绪状态

CPU使用时间结束,状态变更至就绪状态。

运行状态 -> 阻塞状态

进程请求资源或者等待事件时,状态变更至阻塞状态,操作由阻塞原语完成。

阻塞状态 -> 就绪状态

由唤醒原语进行状态的切换,由系统进程或事件发生进程唤醒。

参考

https://houbb.github.io/2020/10/04/os-01-process
http://kjwy.5any.com/czxt/content/czxt03/Czxt-kcjj-030302.htm
ANDREW S.TANENBAUM. 现代操作系统