传统计算机操作系统中,为了提高资源利用率和系统吐纳量,通常使用多道程序技术。多个程序装入内存,并发运行。此时作为资源分配和独立运行的基本单位即为进程。操作系统的四大特征(并发,共享,虚拟,异步)也是基于进程所描述的。因此想要深入理解操作系统,先要弄清楚进程。
程序执行方式
| 程序执行方式 | 应用的操作系统 |
|---|---|
| 顺序执行 | 早期未配置os的系统和单道批处理系统 |
| 并发执行 | 多道程序系统 |
顺序执行
顺序执行:在内存中只装入一道用户程序即这一道程序独占所有资源,再它完成后下一道用户程序才能再进入内存。从中我们可以明显看出顺序执行的缺点:浪费资源并且系统运行效率低。
并发执行
并发执行:在多道程序系统中,我们在内存中装入多道程序,使他们共享资源,并发执行。从此我们看出:并发执行克服了顺序执行的缺点。
前驱图
为了更好的了解和描述顺序执行和并发执行的情况,我们用前趋图来描述这两种程序执行方式。前驱图(Precedence Graph) 是一个有向无环图,用来描述程序执行的先后情况。图中节点表示:一个进程或者程序段,甚至是一条语句。有向边来表示:节点之间的偏序或者前驱关系。->表示节点之间的前驱关系。例如:P i ->Pj 表示再Pj执行之前先执行Pi。
顺序执行前趋图
由此我们可以看出顺序执行的特征:
顺序性
封闭性:程序一旦执行,其执行结果不受外界元素影响
可再现性:只要程序执行的环境和初始条件相同,程序重复执行就可以得到相同结果
并发执行前趋图
由此我们可以看出并发执行的特点:
进程是我们想要深入理解计算机操作系统中非常重要的一个概念。我们将会从一下几个角度来了解进程
进程的定义
进程的特征
进程的状态以及状态之间的相互转化
进程控制
进程的定义
什么是进程?为什么会有这样的概念?进程等不等于程序呢?从上文中我们知道了程序的并发执行有间断性,不可再现性和失去封闭性,这样通常程序就无法并发执行。如果并发执行,那么程序的执行就没有意义了。因此我们引入进程来使程序并发执行并加以描述。
为了描述进程的基本情况和执行过程,进而我们可以更好的控制和管理进程。我们引入一个数据结构称之为进程控制块PCB(Process Control Block)。这样我们就可以更为清楚的了解进程包括了什么。由程序段,相关数据段和PCB构成一个进程实体(也称进程映像),我们同常将进程实体简称为进程。这样我们即可对进程下一个定义:进程是进程实体的运行过程,是系统资源分配和调度的最基本单位。这样我们就解决我开头所提出的前两个问题。而程序与进程的区别现在我们可以模糊的感觉到不同,我们下面在进程的特征中可以更加的明确感受二者的不同。
进程的特征
动态性
并发性
独立性
异步性
动态性
进程的实质是进程实体的执行过程。进程由创建而产生,由调度而执行,由撤销而消亡, 具有一定的生命周期。
程序:一定数量的指令集合存放于某种介质上。静态的
并发性
进程:我们引入进程的概念就是为了使存在于内存的多个进程实体可以并发执行。
程序:没有PCB,无法并发执行
独立性
进程:进程实体是一个可以独立运行,独立接受调度和独立接受资源的单位
程序:未创建PCB的程序都不能作为一个独立单位参与运行
异步性
进程:进程按着异步方式运行,即按着各自独立,不可预知速度方式运行。为了使进程在并发执行中的具有异步性,在OS 中引进进程的概念,并配置进程同步机制
程序:如果按着异步方式,程序运行得到结果存在不可再现性
进程的状态
由于多个进程在并发执行中共享资源,致使进程在运行过程中呈现间断性,这样表现出来进程会出现多个状态
下面来介绍这些状态
- 就绪态:进程除了cpu以外的所有资源全部已经得到。只要再获得CPU 资源,该进程就可以执行。通常处于就绪态的进程会以一定策略处于一个就绪队列。
- 执行态:进程已经获得所有资源,程序正在执行
- 阻塞态:正在执行态 的进程由于某种事件发生,而无法执行。
- 创建态:进程创建过程
- 申请一个PCB并向PCB中写入控制和管理信息
- 然后分配资源,转入就绪态
进程所需资源不够分配给进程,此时创建工程还没完成这样我们就可以称之为创建态
- 终止态:将进程的PCB撤销
挂起操作
作用于某个进程使其处于静止状态。
该进程处于执行态:会暂停执行
处于就绪态:不接受调度
引入挂起操作的原因
- 终端用户的需求
- 父进程的要求
- 负荷调节的需要
- 操作系统的需要
进程状态的转换
进程控制
一些事件会引起进程状态的改变下面就来介绍一下这些事件
1.引起创建进程的事件:
- 用户登陆
- 作业调度
- 提供服务
- 应用请求:前三者式系统为用户建立新进程,而应用请求则是用户为自己创建进程
2.引起进程终止的事件
- 正常结束
- 异常结束:运行过程中发生异常事件,致使程序停止运行
- 越界错:程序访问到该进程所需资源外的存储区
- 保护错:进程视图访问一个不允许访问的文件或者以一个不正常的访问方式
- 非法指令:指令不存在
- 特权指令错:进程试图执行OS 指令
- 运行超时:程序运行事件超出最大时间
- 等待超时:进程等待某事件超出最大时间
- 算术运算错:进程试图执行一个不被允许执行的算术运算
- I/O故障:I/O过程中发生错误
- 外界干预:应外界请求而终止进程
- 操作员或者操作系统的干预
- 父进程的请求
- 因父进程终止
3.引起进程的阻塞和唤醒的事件
- 向系统请求资源失败
- 等待某种操作的执行
- 新数据尚未到达
- 等待新任务的到达
