04 | 进程及进程管理
几个概念
(1)程序:为解决某一问题而设计的一系列指令的集合,是算法的形式化描述。 静态。
(2)计算:对某一有限数据的集合所施行的、目的在于解决某一问题的一组有限的操作的集合。动态。
(3)顺序程序:一个程序由若干个程序段组成,若这些程序段的执行必须是顺序的,这个程序被称为顺序程序。
特点:顺序性、封闭性(程序一旦开始执行,其计算结果不受外界因素影响,与它的执行速度无关。因为是一个用户独占系统各种资源,当初始条件给定以后,资源的状态只能由本程序的操作才能改变它)、可再现性
顺序程序具备 与时间无关性 的先决条件:程序自身封闭,即一个程序执行时所用的变量、指针值、各资源的状态不能被外界所改变
(4)并发:多个任务同时执行。
并发操作之所以可能实现,是因为大多数计算问题只要求在时间上是偏序的,即有些操作必须在其他操作之前执行,这是有序的;但有的操作可以同时进行。
(5)程序的并发执行:若干个程序同时在系统中运行,这些程序的执行在时间上是可重叠的,一个程序的执行尚未结束,另一个程序的执行已经开始(即便这种重叠是很小的一部分,也称这几个程序是并发执行的)。
程序的并发执行可用下述语句描述:
并发程序的特点:
- 失去程序的封闭性与不可再现性:如果一个程序的执行可以改变另一个程序的变量(即二者公用的公共变量),那么后者的输出就有可能有赖于这两个程序执行的相对速度,即失去了程序的封闭性
- 程序与计算不再一一对应:顺序执行时一个程序对应一个计算,而并发执行时,一个程序可能对应多个计算
- 程序并发执行时的相互制约关系
(6)与时间有关的错误:程序并发执行时若共享了 公共变量 ,其执行结果将与并发程序执行的相对速度有关,即给定相同的初始条件,也可能得到不同的结果,此即为与时间有关的错误。
若并发执行的程序没有共享变量,他们之间就没有直接的相互制约关系,这样一组程序并发执行时不会发生与时间有关的错误。
避免与时间有关的错误→需要实现并发程序执行时的互斥与同步
进程概念
进程定义
进程: 一个具有独立功能的程序关于某个数据集合的一次运行活动
这里的数据集合是指软/硬件环境,多个进程共存/共享得到环境
进程的特征:
进程与程序的区别:
根据进程的类别,不同类别的进程使用不同的调度策略,因此要对进程进行分类:
进程和程序的联系:
- 支持多任务运行的操作系统中,活动的最小单位是进程
- 进程一定包含一个程序
- 一个程序可以对应多个进程
进程的基本状态:
- 就绪状态(ready):进程获得除CPU外的所有资源,它已准备就绪,一旦获得CPU控制权,就可以立即运行。此状态即为就绪状态。
- 运行状态(running):进程通过进程调度和处理机分派后,得到CPU控制权,此时该进程对应的程序正在处理机上运行。此状态即为运行状态。
- 等待状态/阻塞状态(wait):进程正在等待某一事件的发生(如等待输入/输出操作的完成)而暂时停止执行,这时即使给它CPU控制权也没办法执行。此状态即为等待状态(也称阻塞状态)。
有些系统会对上述三种状态进一步细分,但这会增加系统的复杂性。多数系统注意简化状态结构来提高系统效率。
进程状态变迁图:
进程状态随自身的推进和外界条件的变化而变化。
用进程状态变迁图说明系统中进程可能具备的状态及状态变迁的可能原因(结点表示进程状态,箭头表示状态的变化):
例,Linux中的进程状态及状态变迁:
进程控制块(PCB): 描述进程状态、资源和与相关进程关系的数据结构(c语言中用struct)
- 进程控制块是一个数据结构,是进程的标志
- 当创建一个进程时,必须为它设置一个PCB(再根据PCB的信息对进程实施控制和管理)
- 进程任务完成时,系统撤销它的PCB,进程消亡
- 进程=程序+PCB
- PCB结构:基本内容如下,不同操作系统所使用的的PCB结构不同
(1)进程标识符:
(2)进程的状态:说明进程当前所处的状态(运行、就绪、等待),可用不同的数字(如0、1、2)或不同的符号(如run、ready、wait)表示;
只有当进程处于就绪状态时才有可能获得处理机;当进程处于等待状态时,要在PCB中说明阻塞原因。
(3)当前队列指针:
(4)进程优先级:反映进程要求CPU的紧迫程度。通常由用户预先提出或由系统指定。进程将依据其优先级的高低争夺CPU的使用权(进程的优先级可以动态变化,高优先级进程优先运行)。
(5)CPU现场保护区:
(6)通信信息:每个进程在运行过程中与其他进程进行通信时所记录的有关信息(如:正等待本进程接收的消息个数、第一个消息开始的地址等)。
(7)家族联系:
(8)占有资源清单:该进程占有的资源。
例,Linux中的task_struct:
进程的组成:
- 进程:程序段(包括数据)+PCB
- 程序、数据描述进程本身应该完成的功能;PCB描述进程的动态特征、与其他进程和系统资源的关系
进程的切换:
上下文离开CPU时,将它保存到一个栈里,以便将来它重新回到CPU时将其读回CPU
进程控制
首先明确,进程管理的功能:
进 程 管 理 = { 进 程 控 制 进 程 调 度 实 现 进 程 之 间 同 步 协 调 和 通 信 进程管理= \begin{cases} 进程控制\\ 进程调度\\ 实现进程之间同步协调和通信 \end{cases} 进程管理=⎩⎪⎨⎪⎧进程控制进程调度