进程
- 一、进程的引入
- 二、进程的状态及组成
- 三、进程控制
一、进程的引入
(1)程序的顺序执行:
P1:a=x+y
P2:b=a-5
P3:c=b+1
程序总是按照P1→P2→P3的顺序执行。
特点:
- 顺序性:处理机的操作严格按规定顺序执行。
- 封闭性:程序执行时,独占系统资源。
- 可再现性:当初始条件相同时,程序多次执行的结果相同。
(2)程序的并发执行
P1:a=5
P2:b=6
P3:c=a+b
P4:d=c+1
程序按照P1/P2→P3→P4的顺序执行。
特点:
- 间断性:程序在并发执行时,形成了相互制约关系。相互制约将导致并发程序具有“执行—暂停—执行”这种间断性的活动规律。
- 失去封闭性:系统中的资源供多个程序共享,致使程序的运行失去了封闭性。
- 失去可再现性。
(3)程序并发执行的条件Bernstein
Bernstein条件:
读集:R(Pi)={a1,a2,…,am} 程序Pi执行期间参考的变量集合。
写集:W(Pi)={b1,b2,…,bm} 程序Pi执行期间改变的变量集合。
两个进程P1,P2若满足:R(P1)∩W(P2)∪R(P2)∩W(P1)∪W(P1)∩W(P2)={}则P1,P2并发执行,且具有可再现性。
例如:
P1:a=5
P2:b=6
P3:c=a+b
P4:d=c+1
P1、P2可以并发执行吗?P3、P4可以并发执行呢?
解:
P1:a=5
P2:b=6
R(P1)={} W(P1)={a} → R读取右边的变量;W读取左边的变量,没有变量则为空集
R(P2)={} W(P2)={b}
R(P1) ∩W(P2)={} R(P2) ∩W(P1)={} W(P1) ∩W(P2)={}
R(P1)∩W(P2)∪R(P2)∩W(P1)∪W(P1)∩W(P2)={}
P1、P2可以并发执行。
P3:c=a+b
P4:d=c+1
R(P3)={a,b} W(P3)={c}
R(P4)={c} W(P4)={d}
R(P3) ∩W(P4)={}
R(P4) ∩W(P3)={c}
R(P3) ∩W(P4) ∪R(P4) ∩W(P3)∪W(P3)∩W(P4) ={c}
P3、P4不能并发执行。
(4)进程的定义
进程:可并发执行的程序在一个数据集合上的执行过程(实质)。
进程与程序的关系:
进程 | 程序 |
---|---|
动态的 | 静态的 |
并发的 | 顺序的 |
暂时的 | 永久的 |
数据结构=程序+数据+PCB
程序与进程不是一一对应关系。
二、进程的状态及组成
(1)三种基本状态
- 运行态:进程正在处理机上运行的状态。
- 就绪态:进程已获得了除处理机之外的所有必要资源,只要获得处理机就可以运行的状态。
- 阻塞状态:进程由于等待输入输出操作或某个同步事件而暂停运行时,就处于阻塞状态。
状态转化 | 说明 |
---|---|
就绪态→运行态 | 处于就绪态的进程具备了运行条件,但未能获得处理机而没有运行 |
运行态→就绪态 | 正在运行的进程由于规定的时间片用完而暂停执行 |
运行态→阻塞态 | 正在运行的进程可能需要等待某些资源(例如进程请求I/O、等待某个事件或请求访问某个临界资源) |
阻塞态→就绪态 | 获得所等待的条件和资源,具备了运行条件 |
注意:没有阻塞态→运行态和就绪态→阻塞态
(2)五种状态的状态转换图
(3)进程的挂起状态
挂起状态的作用:
- 内外存对换的需要:为了缓解内存的紧张,我们可以将处于阻塞状态的作业调到外存。
- 用户调试程序的需要:用户需要调试修改自己的程序时,需要把进程调入到挂起状态。
- 实时系统中调节负载的需要
(4)进程控制块(PCB)
进程通常有程序段、数据段、栈栈和PCB四部分构成,进程控制块是进程存在的唯一的标识。
PCB的作用:就是使程序能成为独立运行的单位,并可和其他进程并发执行。
进程控制块PCB的内容:
进程描述信息 | 说明 |
---|---|
进程名 | 创建者提供的名字 |
进程标识符 | 区分每一个进程(系统通常为进程分配一个唯一的整数) |
用户名 | 创建该进程用户的名字 |
处理机状态信息 | 说明 |
---|---|
通用寄存器 | 当进程运行时用于暂存信息的 |
指令计数器 | 存放要访问的下一条指令 |
程序状态字(PSW)寄存器 | 包括程序执行的状态信息,如执行方式,中断允许位 |
栈指针 | 每个程序都有一个或多个与之相关的地址栈 |
进程调度信息 | 说明 |
---|---|
进程状态 | 指明该进程所处的状态 |
进程优先级 | 表示进程的优先级,优先级高的先获得处理机 |
运行统计信息 | 这些信息与采用的调度算法有关,包括进程执行的时间,等待的时间 |
进程阻塞的原因 | 记录进程阻塞的原因 |
进程控制和资源占有量信息 | 说明 |
---|---|
程序入口地址 | 进程对应程序和数据的内存地址 |
程序的外存地址 | 进程被调出使用的地址 |
进程同步及通信机制 | 进程在执行中,可能与其他进程有同步关系,进程的信号量都有存放在PCB中 |
资源占有信息 | 列出了除CPU之外进程所需要的全部资源及已经占用的资源情况 |
链接指针 | 本进程所在队列的下一个进程的PCB的地址 |
三、进程控制
操作系统的内核:
核心态:具有较高的特权,能执行一切命令,访问所有寄存器和存储区。
用户态:具有较低特权,只能执行规定的命令,访问指定的寄存器和存储区。
内核:
- 硬件的第一次延伸。
- 系统将一些与硬件紧密相关的模块放在内核,中断处理,时钟管理
- 内核在执行某些基本操作时,往往是利用原语操作实现的。
原语:
- 原语由若干条指令构成、用于完成一定功能的过程。
- 原语是“原子操作”。即一个操作中的所有动作,要么全做,要么全不做。换言之,原子操作是一个不可分割的操作。
进程创建:
进程创建的事件:用户登录;新作业进入系统;提供服务;应用请求。
创建原语要做的工作:申请空白PCB;为进程分配资源;初始化PCB(初始化进程描述信息,初始化处理机状态信息初,始化进程控制信息);将新进程插入就绪队列。
进程的撤消:
引起进程撤消的事件:进程正常结束;进程异常结束;外界干预。
撤消原语要做的工作:查找撤消进程的PCB若;处于执行状态,终止之,并进行进程调度;若有子孙,予以终止;归还资源;从所在队列移出。
进程的阻塞与唤醒:
引起进程阻塞的事件:请求系统服务;启动某种操作;数据尚未到达;无新工作可做。
阻塞原语要做的工作:停止进程的执行;将进程插入阻塞队列,改变进程在PCB中的状态;重新调度。
唤醒原语要做的工作:将进程从阻塞队列解下;将进程插入就绪队列;改变进程在PCB中的状态。
进程的挂起与激活:
挂起原语要做的工作:检查被挂起进程的状态;如进程处于就绪状态,将进程从就绪状态变为就绪挂起状态;如进程处于阻塞状态,将进程从阻塞状态变为阻塞挂起状态;如进程正在运行,将进程变为就绪挂起状态,并重新调度。
激活原语要做的工作:检查被激活进程的状态;如进程处于就绪挂起状态,将进程从就绪挂起状态变为就绪状态;如进程处于阻塞挂起状态,将进程从阻塞挂起状态变为阻塞状态;若系统为抢占式系统,则进行进程调度。