一、进程的引入
程序顺序执行特征
前趋图:一个有向无循环图
程序顺序执行特征:
~~~~~~
a. 顺序性:程序各程序段严格按照规定的顺序执行
~~~~~~
b. 封闭性:程序运行时独占全部资源,机内各资源只受该程序控制而改变,执行中和执行的结果不受外界因素影响
~~~~~~
c. 可再现性:只要程序执行环境和初始条件相同,程序多次执行,可获得相同结果
程序并发执行特征
程序并发执行特征:
~~~~~~
a. 间断性:并发程序之间形成了相互制约的关系
~~~~~~
b. 失去封闭性:并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变
~~~~~~
c. 不可再现性:虽然各次的环境与初始条件相同,但得到的结果却各不相同
~~~~~~
d. 程序与程序的执行不再一一对应:一个程序可能对应多个执行中的程序
进程的引入
并发执行出现新的特征,沿用程序的概念无法分析、处理和解释这些现象
进程的定义
可并发执行的程序在一个数据集合上的运行过程
进程的特征:(进程与程序的区别)
~~~~~~
a. 动态性:进程的最基本特征,它是程序执行过程,它是有一定的生命期
~~~~~~
b. 并发性:进程和操作系统的重要特征
~~~~~~
c. 独立性:进程是一个能独立运行的基本单位,而程序不能作为独立单位参加运行、获取资源
~~~~~~
d. 异步性:进程按异步方式进行
~~~~~~
e. 结构特征:从结构上,进程实体由程序段、数据段和进程控制块三部分组成
~~~~~~
f. 生命特征:进程有一个生命周期,有一个从创建到消亡的过程,而程序作为一种软件资源可以长期保存
~~~~~~
※ 通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序
~~~~~~
二、进程的描述
进程状态及其转换
- 进程的三个基本状态:
~~~~~~ i. 运行态:
~~~~~~ ii. 就绪态:
~~~~~~ iii. 阻塞态: - 进程状态的转换:
~~~~~~ i. 就绪态–>运行态:处理机空闲时,进程调度程序必将处理机分配给一个处于就绪态的进程
~~~~~~ ii. 运行态–>阻塞态:处于运行态的进程在运行过程中需要等待某一事件发生后才能继续运行
~~~~~~ iii. 阻塞态–>就绪态:处于阻塞态的进程,若其等待的事件已经发生,则转换为就绪态
~~~~~~ iv. 运行态–>就绪态:处于运行状态的进程在其运行过程中,因分给它的处理机时间片用完,而不得不让出处理机;当系统采用抢占式调度算法时,若有一个优先级高的进程进入就绪状态时,现运行进程也要被迫让出CPU进入就绪状态
~~~~~~ § 阻塞态 --> 运行态和就绪态 --> 阻塞态这两种状态转换不可能发生 - 系统中各进程状态的分布和管理:
~~~~~~ i. 处于运行态进程:如系统只有一个处理机,则在任何一时刻,最多只有一个进程处于运行态
~~~~~~ ii. 处于就绪态进程:一般处于就绪态的进程按照一定的算法(如先来的进程排在前面,或采用优先权高的进程排在前面)排成一个就绪队列
~~~~~~ iii. 处于阻塞态进程:处于阻塞态的进程排在阻塞队列中。由于等待事件原因不同,阻塞队列也按事件分成几个队列
进程控制模块PCB
- 进程控制块的作用:进程存在的唯一标志
- PCB的信息:
~~~~~~ i. 进程标识符:用于唯一地标识一个进程;有外部标识符和内部标识符两种
~~~~~~ ii. 进程调度信息:包括进程状态、队列、队列指针、调度参数
进程上下文
进程上下文是执行活动全过程的静态描述。进程上下文包括系统中与执行该进程有关的各种寄存器的值。
~~~~~~
三、进程的控制
内核
- 原语:一种特殊的广义指令,它的功能是由系统通过一段不可分割的指令操作来完成,它又称原子操作,原语在核心态下完成;进程控制操作(创建、撤销、阻塞……)大都为原语操作。
- 内核功能:是管理控制中心,为OS其它模块提供最基本的支撑功能,对中断进行“必要和有限的”处理,时钟管理和原语操作。同时完成进程(处理器)、存储器和设备各种资源基本管理功能。
进程状态的细化
挂起和激活操作的引入——
进程控制原语
- 创建进程的方式:
~~~~~~ i. 系统建立时创建
~~~~~~ ii. 使用进程创建原语创建 - 创建原语:一个进程可借助创建原语来创建一个新进程,该新进程是它的子进程,创建一个进程主要是为新进程创建一个PCB。
- 进程创建的时机:
~~~~~~ i. 在分时系统中用户登陆成功后,系统为该用户创建一个进程用于接收用户的命令
~~~~~~ ii. 在批处理系统中发生作业调度时为选中的作业创建进程
~~~~~~ iii. 当应用进程在执行过程中提出某种特殊服务,系统创建专用进程来提供这种服务
~~~~~~ iv. 用户进程自己调用进程创建原语来创建子进程 - 撤销原语:对于树型层次结构的进程系统撤消原语采用的策略是由父进程发出,撤消它的一个子进程及该子进程所有的子孙进程,被撤消进程的所有资源全部释放出来归还系统,并将它们从所有的队列中移去。
~~~~~~ i. 撤销原语过程:
- 进程撤销的时机:
~~~~~~ i. 正常结束
~~~~~~ ii. 异常结束:越界错,保护错,非法指令,特权指令错,除法错等
~~~~~~ iii. 外界干预:程序员干预停止,父进程终止子进程或父进程终止时其子进程也必须终止 - 阻塞原语:当前进程因请求某事件而不能执行时,该进程将调用阻塞原语阻塞自己,暂时放弃处理机。进程阻塞是进程自身的主动行为。
- 进程阻塞的时机:
~~~~~~ i. 所需资源得不到满足时(进程互斥)
~~~~~~ ii. I/O请求
~~~~~~ iii. 等待数据(进程同步)
~~~~~~ iv. 某些系统进程在无事可做时阻塞自己 - 唤醒原语:当被阻塞的进程所期待的事件发生时,则有关进程和过程调用wakeup原语,将阻塞的进程唤醒,将等待该事件的进程从阻塞队列移出,插入到就绪队列中,将该进程的PCB中现行状态,如是活动阻塞态改为活动就绪态,如是静止阻塞态改为静止就绪态。
- 进程唤醒的时机:
~~~~~~ i. 所需资源可以得到(进程互斥)
~~~~~~ ii. I/O完成
~~~~~~ iii. 数据准备好(进程同步)
~~~~~~ iv. 某些系统进程在有事可做时 - 挂起原语:调用挂起原语的进程只能挂起它自己或它的子孙,而不能挂起别的族系的进程。挂起原语的执行过程是:检查要挂起进程PCB的现行状态,若正处于活动就绪态,便将它改为静止就绪态;如是活动阻塞态则改为静止阻塞态。如是运行态,则将它改为静止就绪态,并调用进程调度程序重新分配处理机。为了方便用户或父进程考察该进程的运行情况,需把该进程的PCB复制到内存指定区域。
- 进程挂起的时机:
~~~~~~ i. 终端用户需要
~~~~~~ ii. 父进程需要
~~~~~~ iii. 内存紧张
~~~~~~ iv. OS需要
~~~~~~ v. 可能影响到实时任务的性能时 - 激活原语:用户进程或父进程通过调用激活原语将被挂起的进程激活。激活原语执行过程是:检查被挂起进程PCB中的现行状态,若处于静止就绪态,则将它改为活动就绪态,若处于静止阻塞态,则将它改为活动阻塞态。
- 进程激活的时机:与进程挂起相反。
~~~~~~
四、线程和进程之间的关系
如图所示: