进程的引入
程序顺序执行与特征
程序由若干个程序段组成,程序在执行时,各程序段必须按照先后次序逐个执行,各程序段逐个执行的次序关系可以用前趋图表示
前趋图是一个有向无循环图,图由结点和结点间有向边组成,结点代表各程序段操作,而结点间的有向边表示两程序段操作之间存在的前趋关系,两程序段Pi和Pj的前趋关系表示成Pi → Pj,Pi是Pj的前趋,Pj是Pi的后继。如图:
顺序执行的特征:
- 顺序性
各程序段严格按照规定的顺序执行
- 封闭性
程序运行时独占全部资源,机内各资源只受该程序控制而改变,执行中和执行的结果不受外界因素影响。
- 可再现性
只要程序执行环境和初始条件相同,程序多次执行,可获得相同结果。
程序并发执行与特征
在计算机系统支持并行操作时,如采用多道程序设计技术,则内存中多道程序处于并发执行状态。如有四个程序段的作业类,虽然每个作业有前趋关系的各程序段不能在系统CPU和输入输出各部件并行执行,但一个作业没有前趋关系的程序段或不同作业的程序段可以分别在CPU和各输入输出部件上并行执行。并发执行的前趋图:
并发执行的特征:
- 间断性
程序在并发执行时,由于它们共享资源或为完成同一项任务而相互合作,使在并发程序之间形成了相互制约的关系。相互制约将导致并发程序具有“执行-暂停-执行”这种间断性活动规律。
- 失去封闭性
程序在并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行已失去了封闭性。
- 不可再现性
程序在并发执行时,由于失去了封闭性,也将导致失去结果的可再现性。即程序经过多次运行,虽然其各次的环境和初始条件相同,但得到的结果却各不相同。
- 程序与程序的执行不再一一对应
一个程序可能对应多个执行中的程序。反之亦然。
为什么要引入进程
为什么要引入进程?并发执行出现新的特征,沿用程序的概念已经无法分析、处理和解释这些现象。
进程的定义
进程:可并发执行的程序在一个数据集合上的运行过程
进程的特征
- 动态性
进程由创建而产生,由调度而执行,因得不到资源暂停,因撤销而死亡。ps:程序是一堆指令的集合,是静态的。
- 并发性
多个进程实体同存于内存中,能在一段时间内同时运行。ps:两个程序不能在同一时间并发执行。 - 独立性
进程是一个独立获取资源和独立调度的基本单位。
- 异步性
进程按照各自独立的不可预知的速度向前推进,即进程按异步方式执行,所以也就导致了程序执行的不可再现性,因此OS必须采用某种措施来限制各进程推进序列以保证各程序间正常协调运行
- 结构特征
从结构上,进程实体由程序段,数据段,进程控制块三部分组成
- 生命特征
进程有一个生命周期,有一个从创建到消亡的过程。ps:程序作为一种软件资源可以长期保存
进程的描述
进程的三个基本状态
- 运行态
一个进程在处理机上运行时,则该进程处于运行状态
- 就绪态
一个进程获得了除处理机外的一切所需资源,一旦得到处理机即可运行,则称此进程处于就绪状态。
- 阻塞态
(又称挂起状态、等待状态):一个进程正在等待某一事件发生(例如请求I/O而等待I/O完成等)而暂时停止运行,这时即使把处理机分配给进程也无法运行,故称该进程处于阻塞状态。
进程状态的转换
- 就绪态->运行态
当处理机空闲时,进程调度程序必将处理机分配给一个处于就绪态的进程 ,该进程便由就绪态转换为运行态。
- 运行态->阻塞态
处于运行态的进程在运行过程中需要等待某一事件发生后(例如因I/O请求等待I/O完成后),才能继续运行,则该进程放弃处理机,从运行态转换为阻塞态。
- 阻塞态->就绪态
处于阻塞态的进程,若其等待的事件已经发生,于是进程由阻塞态转换为就绪态。
- 运行态->就绪态
处于运行状态的进程在其运行过程中,因分给它的处理机时间片已用完,而不得不让出(被抢占)处理机,于是进程由运行态转换为就绪态;当系统采用抢占式调度算法时,若有一个优先级比现运行进程高的进程进入就绪状态时,现运行进程也要被迫让出CPU进入就绪状态。
注意:阻塞态->运行态、就绪态->阻塞态这两种状态转换不可能发生
系统中各进程状态的分布和管理
- 处于运行态进程:在单处理机系统中,在任一时刻,最多只有一个进程处于运行状态
- 处于就绪态进程:一般处于就绪态的进程按照一定的算法(先来先服务、优先级调度算法等,具体调度算法介绍可以看我的另一篇博客:)排成一个就绪队列。
- 处于阻塞态进程:处于阻塞态的进程排在阻塞队列中,根据等待事件不同,阻塞队列也按照不同的等待事件分成几个队列。
例如,在单处理机系统中,在某时刻有10个进程并发执行,三种状态的进程数最多和最少有几个?
- 运行态:最多1个,最少0个
单处理机系统在某一时刻最多只能为1个进程分配处理机,最少分配0个(此时,全部进程处于阻塞态,因为只要有一个进程处于就绪态,那么CPU就必须给该就绪态分配处理机)
- 就绪态:最多9个,最少0个
在没有一个进程处于阻塞态的情况下,最多有9个进程处于就绪态,因为只要有一个进程处于就绪态,那么CPU就必须给该就绪态分配处理机;最少有0个就绪态,此时全部进程都处于阻塞态。
- 阻塞态:最多有10个,最少有0个
最多10个进程处于阻塞态,最少0个进程处于阻塞态
进程的控制
详情见于我的另一篇博文:进程的控制