首先,进程的七状态模型,分为:创造、就绪、执行、堵塞、终止、挂起就绪、挂起阻塞。
进程
进程没有一个规定的定义,一般定义为:
- 进程是程序的一次执行
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
- 进程时具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
在引入进程实体的概念后,我们可以把传统OS中的进程定义为:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
进程的特征
- 动态性:进程的实质是进程实体的执行过程。
- 并发性:多个进程同存于内存中,且能在一段时间内同时运行。
- 独立性:能独立运行、独立获得资源和独立接受调度的基本单位。
- 异步性:不可预知的速度向前推进。
进程控制块
是操作系统核心中一种数据结构,主要表示进程状态。
进程控制块的作用
使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位或与其它进程并发执行的进程。
- 具体的说:
- 作为独立运行基本单位的标志 —— 当一个程序配置了PCB后,就表示它已是一个能在多道程序环境下独立运行的、合法的基本单位。PCB已经成为了进程存在于系统中的唯一标志。
- 能实现间断性运行方式 —— 有了PCB后,系统可以将终端进程的CPU现场信息存放在PCB中,供该进程在被调度时恢复CPU现场信息。
- 提供进程管理所需要的信息 —— 当进程调度时、需要访问文件或I/O设备时,都需要借助PCB中资源清单的信息。
- 提供进程调度所需要的信息 —— 进程调度时,需要提供优先级、等待时间和已执行时间等。
- 实现与其他进程的同步与通信 —— 进程同步,需要相应的用于同步的信号量,还需要具有用于实现进程通信的区域或通信队列指针等。
进程控制块中的信息
- 进程标识符:用于唯一标识一个进程。分为两种标识符:
- 外部标识符:为了方便用户(进程)对进程的访问,
- 内部标识符:为了方便系统对进程的使用,唯一的数字标识符
- 处理机状态:也称为处理机的上下文,主要是由处理机的各种寄存器中的内容组成的。这些寄存器主要包括:
- 通用寄存器 —— 又称为用户可视寄存器,是用户程序可以访问的,用于暂存信息,在大多数处理机中,由8~32个通用寄存器,在RISC结构的计算机中可超过100个。
- 指令计数器 —— 其中存放要访问的下一条指令的地址。
- 程序状态字PSW —— 含有状态信息,如:条件码、执行方式、中断屏蔽标志等
- 用户栈指针 —— 指每个用户进程都有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址。栈指针指向该栈的栈顶。
- 进程调度信息 :包括进程状态、进程优先级、进程调度所需的其他信息、事件。
- 进程控制信息:程序和数据的地址、进程同步和通信机制、资源清单、链接指针。
进程控制块的组织方式
- 线性方式
- 链接方式
- 索引方式
七状态模型
进程创建
引起进程创建的事件
- 用户登录
- 作业调度
- 提供服务
- 应用请求
进程如何创建
- 申请空白PCB
- 为新进程分配其运行所需的资源
- 初始化进程控制块:初始化标识信息、初始化处理机状态信息、初始化处理机控制信息。
- 如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列。
进程终止
引起进程终止的事件
- 正常结束
- 异常结束
- 越界错
- 保护错
- 非法指令
- 特权指令错
- 运行超时
- 等待超时
- 算术运算错
- I/O故障
- 外界干扰
- 操作员或操作系统干预
- 父进程请求
- 因父进程终止
进程的终止过程
- 根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态。
- 若处于执行状态,终止执行,调度标志改为真。
- 若还有子孙进程,应将子孙进程都终止,以防他们称为不可控的进程。
- 将资源归还给父进程,或系统。
- 将被终止进程的PCB从所在队列中移除,等待其他程序调用。
进程的阻塞与唤醒
引起进程堵塞和唤起的事件
- 向系统请求共享资源失败
- 等待某种操作的完成
- 新数据尚未到达
- 等待新任务的到达
进程堵塞的过程
- 正在执行的进程,如果发生了上述某事件,进程便通过调用阻塞原语block将自己阻塞。
- 可见,阻塞是进程自身的一种主动行为。
- 进入block过程后,由于该进程还处于执行状态,所以应先立即停止执行,把进程控制块中的状态由"执行"改为阻塞,并将PCB插入阻塞队列。
- 如果系统中设置了因不同事件而堵塞的多个堵塞队列,则应将本进程插入到具有相同事件的堵塞队列。
- 最后,转调度程序进行重新调度,将处理机分配给另一就绪进程,并进行切换,保留被阻塞进程的处理机状态,按新进程的PCB中的处理机状态设置CPU的环境。
进程唤醒过程
- 当被阻塞进程所期待的事件发生时,由有关进程调用唤醒原语wakeup,将等待该事件的进程唤醒。
- wakeup执行的过程是:首先把阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。
进程的挂起与激活
进程的挂起过程
- 当系统中出现了引起进程挂起的事件时,OS将利用挂起原语suspend将指定进程或处于阻塞状态的进程挂起。
- suspend的执行过程时:首先检查被挂起进程的状态,若处于活动就绪状态,便将其改为静止就绪。
- 对于活动阻塞状态的进程,则将之改为静止阻塞。
- 为了方便用户或父进程考察该进程的运行情况,而把该进程的PCB复制到某指定的内存区域。
- 最后,若被挂起进程正在执行,则转向调度程序重新调度。
进程的激活过程
- 当系统中发生激活过程的事件时,OS将利用激活原语active,将指定进程激活。
- 激活原语先将进程从外存调入内存,检查该进程的现行状态。
- 若是静止就绪,改为活动就绪。
- 若是静止阻塞,改为活动阻塞。