1、进程(process)定义
进程:是一个具有一定独立功能的程序在一个数据集合上的一次动态执行的过程。
如上图所示,将源码编译成可执行文件之后放置于内存之中,作为一个静态的待执行的程序,当OS将这个静态程序加载到内存之中动态执行的时候,每一个动态执行的程序就称为一个进程。同一份静态程序可以开启多个不同的进程。
2、进程的组成
一个进程应该包括:程序的代码;程序处理的数据;陈旭计数器中的值,指向下一条将运行的指令;一组通用的寄存器的当前值,堆、栈;一组系统资源(如打开的文件)。总之,进程博涵了正在运行的一个程序的所有的状态信息。
2.1 进程和程序的区别和联系
联系: 程序是产生进程的基础;程序的每一次运行构成不同的进程;进程是程序功能的体现;通过多次执行,一个程序可以对应多个进程;通过调用关系,一个进程可以包含多个程序。
区别: 进程是动态的,程序是静态的:从各个不需要是有序代码的集合;进程是程序的执行,进程有核心态/用户态;进程是暂时的,程序是永久的:进程是一个状态变化的过程,程序可以长久保存;进程与程序的组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)。
3、进程的特点
动态性: 可以动态地创建、结束进程;并发性: 进程可以被独立调度并占用处理机运行,并发运行(区别并行和并发,并行指的是在同一个时刻不同的CPU处理不同的进程);独立性: 不同进程的工作不相互影响;制约性: 因访问共享数据/资源或进程间同步而产生制约。
程序 = 算法 + 数据结构,在进程控制中,描述进程的数据结构叫:进程控制块(Process Control Block, PCB),操作系统为每个进程都维护了一个PCB,用来保存与该进程有关的各种状态信息。
4、进程的控制结构
进程控制块(PCB): 操作系统管理控制进程运行所用的信息集合。操作系统用PCB来描述进程的基本情况以及运行变化的过程,PCB是进程存在的唯一标志。使用进程控制块可以实现进程的创建,为该进程生成一个PCB;进程的终止,回收进程的PCB;进程的组织管理,通过对PCB的组织管理来实现。
4.1 PCB含有的信息
进程控制块含有以下三大类的信息。
(一) 进程标识信息: 如本进程的标识,本进程的产生者标识(父进程标识),用户标识等。
(二) 处理机(CPU)状态信息保存区: 用于保存进程运行的现场信息。
·用户可见寄存器,用户程序可以使用的数据,地址等寄存器。
·控制和状态寄存器,如程序计数器(PC),程序状态字(PSW)。
栈指针,过程调用/系统调用/中断处理和返回时需要用到它。
(三) 进程控制信息: 包括:
·调度和状态信息,用于操作系统调度进程并占用处理机使用;
·进程间的通讯信息,为支持进程间的与通信相关的各种标识、信号、信件等,这些信息存在接收方的进程控制块中;
存储管理信息,包含有指向本进程影响存储空间的数据结构;
·进程所用的资源,说明有进程打开、使用的系统资源,如打开的文件等;
有关数据结构连接信息,进程可以连接到一个进程队列之中,或连接到相关的其他进程的PCB。
4.2 PCB的组织方式
PCB的组织方式可以有以下两种,一种是使用链表数据结构,令一种是使用索引表数据结构。
链表: 统一状态的进程其PCB组成一个链表,多个状态对应多个不同的链表;各个状态的进程形成不同的链表:就绪链表,阻塞链表等
索引表: 同一个状态的进程归入一个index表,(由index指向PCB),多个状态对应多个不同的index表。各个状态的进程形成不同的索引表:就绪索引表,阻塞索引表。
5、进程的生命期原理
5.1 进程的生命期管理
进程的生命期管理包括:进程创建、进程运行、进程等待、进程唤醒和进程结束几部分。
进程创建 的3个主要事件:系统初始化时,用户请求创建一个新的进程和正在运行的进程指向了创建进程的系统调用。
进程运行 时内核选择一个就绪的进程,让它占用处理机并执行,有关调度算法的问题。
进程等待 在以下情况下,会发生进程等待(阻塞):请求并等待系统服务,无法马上完成时;启动某种操作,无法马上完成时;需要的数据没有到达时。进程只能自己阻塞自己,因为只有进程自身才能知道何时需要等待某种时间的发生。
进程唤醒 唤醒的原因:被阻塞的进程需要的资源可以被满足了;被阻塞的进程等待的时间到达;将该进程的PCB插入到就绪队列。**进程只能被别的进程或者是操作系统进行唤醒。 **
进程结束 在以下四种情形下会发生进程结束:正常退出(自愿的);错误退出(自愿的);致命错误(强制性的);被其他进程杀死(强制性的)。
5.2 进程状态变化模型
进程的三种基本状态:进程在生命周期结束之前处于且仅处于三种基本状态之一,不同的系统设置的进程状态数量不同。
运行状态(Running): 当一个进程正在处理机上运行时。;
就绪状态(Ready): 当一个进程获得了除处理机之外的一切所需资源,一旦得到处理机即可;
等待状态(又称阻塞状态Block): 一个进程正在等待某一事件而暂时停止运行时,如等待某资源,等待输入/输出的完成。
进程三个基本状态的相互转化示意图如上所示。
添加了程序终止和开始运行的完整程序状态转化示意图如上所示。可能的状态变化如下:
NULL→New: 一个新的进程被产生出来执行一个程序;
New→Ready: 当进程被创建完成并初始化之后,一切准备运行时,变为就绪状态;
Ready→Running: 处于就绪态的进程被进程调度程序选中后,就分配到CPU上运行;
Running→Exit: 当进程标识它已经完成或者因出错,当前运行的进程会有操作系统作结束处理;
Running→Ready: 处于运行状态的进程在其运行过程之中,由于分配给CPU的时间片用完了,让其退出CPU;
Running→Block: 当进程请求某样东西且必须等待时;
Block→Ready: 当进程要等待某时间到来时,它从阻塞状态变化到就绪状态。
5.3 进程挂起
为了合理且充分地利用系统资源,会进行进程挂起。挂起: 指将一个进程从内存转到外存。进程在挂起状态时,意味着进程没有占用内存空间,处在挂起状态的进程映像在磁盘上。加入了进程挂起的进程执行状态转变如下所示:
挂起状态分为两种:一种称为阻塞挂起状态(Block-suspend): 进程在外存并等待某时间的出现;另一种为就绪挂起状态(Ready-suspend): 进程在外存,但只要进入内存,即可运行。
与挂起相关状态转换包括以下几种:
·阻塞到阻塞挂起:没有进程处于就绪状态或者就绪进程要求更多的内存资源时,会进行这种转换,以提交新进程或者运行就绪进程;
·就绪到就绪挂起:当有高优先级阻塞(系统认为会很快就绪的)进程和低优先级就绪进程时,系统会选择挂起低优先级就绪进程;
运行到就绪挂起:对抢先式分时系统,当有高优先级阻塞挂起进程因事件出现而进入就绪挂起时,系统可能会把运行进程转到就绪挂起状态。
在外存时的相关状态转换包括:
阻塞挂起到就绪挂起:当有阻塞挂起进程因相关事件出现时,系统会把阻塞挂起进程转换为就绪挂起进程。
解挂/激活(activate):把一个进程从外存转到内存,可能有以下几种情况:
·就绪挂起到就绪:没有就绪进程或挂起就绪进程优先级高于就绪进程时,会进行这种转换;
阻塞挂起到阻塞:当一个进程释放足够内存时,系统会把一个高优先级阻塞挂起(系统会认为很快出现所等待的事件)进程转换为阻塞进程
5.4 状态队列
由操作系统来维护一组队列,用来表示系统那个当中所有进程的当前状态;不同的状态分别用不同的队列来表示(就绪队列,各种类型的阻塞队列);每个进程的PCB都根据他的状态加入到相应的队列中,当一个进程的状态发生变化时,他的PCB从一个状态队列中脱离出来,加入到另一个状态队列中。状态表示方法示意图如下所示: