操作系统-进程管理
# 基本概念
前趋图
- 一个较大的程序通常分为若干个程序段执行,各段必须按照先后次序关系逐个执行,这种先后次序可以用前趋图表示,前趋图是一个有向无环图:
-
程序顺序执行的特征:
- 顺序性:各程序按照规定的顺序执行
- 封闭性:程序运行时独占全机资源,因而机内各资源的状态(初态除外),只有本程序可以改变它。程序一旦开始运行,其执行结果不受外界影响。
- 可再现性:只要程序执行时的环境和初始条件相同,程序多次执行,获得的结果一样
-
当多个作业并处于内存中时,同一个作业中没有前趋关系的程序段或者不同作业的程序段可以并行执行。
-
程序并发执行的特征
- 并发程序间相互制约
- 失去了程序的封闭性
- 不可再现性
-
程序并发导致的不可再现性:
-
由于程序的并发执行,失去了封闭性,其计算结果与并发程序推进的速度有关,从而失去了程序的可再现性,也就是说,程序经过多次执行后,虽然执行时的环境和初始条件相同,但得到的结果不同
进程通信
什么的进程?
- 定义:进程是并发执行的程序在一个数据集合上的运行过程。从结构上看,进程实体通常由程序、数据和进程控制块(PCB) 组成。从资源分配和调度的角度上看,进程是系统进行资源分配和调度的独立的基本单位。
- PCB中的信息主要有:
进程的基本特征
- 进程和程序是两个截然不同的两个概念,进程具有五个特征,而程序则不具备这些特征
- 动态性:进程是进程实体的执行过程,动态性是它的最基本的特征,而程序是静态的。
- 并发性:多个进程实体同时存在于内存中,能在一段时间内同时运行。引入进程的目的就是为了使程序并发执行,而一般的程序本身是不能并发执行的,他必须要符合一定的条件或者建立进程才能并发执行。
- 独立性:进程实体是一个能独立运行的基本单位,同时是系统中分配资源和独立调度的基本单位。
- 异步性:进程按照各自独立的、不可预知的速度向前推进,即按异步方式运行
- 结构特征:从结构上看,进程实体由程序段、数据和PCB三部分组成,有人称这三部分为"进程映像"。
进程的基本状态
- 进程有三种基本状态:运行、就绪和阻塞,后来又加入了新建和终止状态变成了五态模型。
进程的挂起状态
- 现代操作系统中,还要挂起状态。引入挂起状态主要是为了缓和内存紧张的状态,将进程暂放到磁盘对换区中。
进程的控制
- 进程的控制就是对系统中所有进程从创建到消亡所有的全过程实施有效的控制。进程的控制机构是由操作系统的内核实现的。
- 操作需要的内核有如下三大支撑功能:
- 中断处理
- 时钟管理
- 原语管理
- 操作系统内核有如下三大资源管理功能:
- 进程管理
- 存储管理
- 设备管理
进程的同步和互斥
- 把异步环境下的一组并发程序因直接制约而互相发送消息而进行互相合作、互相等待,使得各进程按照一定的速度执行的过程称为进程同步。也就是说,进程之间是异步执行的,同步即是使各进程按一定的制约顺序和速度执行,同步关系是直接制约关系。
- 临界资源就是指那种在一段时间内只允许一个进程访问的资源,如打印机。互斥就是要保证临界资源在某一时刻只被一个进程访问。互斥关系是间接制约关系。
- 临界区是进程中使用临界资源的那段程序:
临界区管理四原则
- 对互斥临界区管理的四个原则是:
- 对空即进:当没有进程处于临界区时,就允许要进入自己临界区的进程进入自己的临界区,并且只能在临界区运行有限的时间
- 无空则等:当某一个进程A处于自己的临界区时,其他任何一进程B要进入自己的临界区(亦是B的临界区)都必须等待,以保证进程互斥地访问临界资源。
- 有限等待:对要求访问临界资源的进程,应保证进程能在有限的时间进入临界区,以免改进程陷入"饥饿"或"死等"状态。
- 让权等待:当进程不能进入自己的临界区时,那它应当立即释放处理机,以免阻塞其他进程,造成多个进程等待的状态,即"忙等"状态。
信号量机制
- 信号量机制是一种有效解决进程同步和互斥的工具,该机制已经得到很大的发展,目前主要有:整型信号量机制、记录型信号量机制、信号量集机制
- 信号量是一个整型变量,根据控制对象的不同被赋予不同的值。它分为两类:
- 公用信号量:实现进程间的互斥,初值为1或资源的数目。
- 私用信号量:实现进程间的同步,初值为0或者某个正整数。
信号量S的物理意义是:当S≥0,表示某类资源可用的数目;S<0时表示,因无法得到该资源而被阻塞的进程的个数,即阻塞队列中等待该资源的进程数目。
PV操作
- PV操作均是原子操作,是低级的进程通信原语,在执行期间不可分割。P操作表示要申请一个资源,V操作表示使用完了一个资源要释放这个资源。
高级通信原语
- PV操作实现进程通信的问题:
- 编程难度大,PV操作不当容易引起死锁;
- 效率低
- 进程高级通信的类型有三种:
- 共享存储系统:相互通信的进程通过共享某些数据结构或存储区实现通信。
- 消息传递系统:进程之间的数据交流以消息为单位,程序员直接利用系统提供的一组通信原语(命令)来实现通信。
- 管道通信:管道是用于连接一个读进程和一个写进程以实现两者之间通信的共享文件。
进程调度
调度的级别、方式
- 一个作业从提交到完成需要经历高、中、低三个级别的调度。
- 高级调度:又称为长调度或作业调度或接纳调度,他决定输入池中的哪个后备作业可以调入内存做好运行准备。
- 中级调度:又称中程调度或对换调度,他决定处于静止就绪的进程中哪个可以从外存调入内存,参与CPU竞争。
- 低级调度:又称短程调度或进程调度,它决定内存中哪个就绪的进程可以占用CPU。
- 调度方式:分为可剥夺与不可剥夺两种
进程调度的算法
- 常用的进程调度算法有:
- 先来先服务(FCFS):按照进程变为就绪状态的先后次序分配CPU。
- 时间片轮转:将系统中所有就绪进程按照FCFS原则排成一个队列,每次调用是将CPU分派给队首进程,让其执行一个时间片,时间片到了时,发送时钟中断,将该进程送到就绪队列末尾,并切换执行当前的队首进程。
- 优先级调度:分为静态和动态两种
- 多级反馈调度:是时间片轮转法和优先级算法的综合
死锁
- 死锁是指两个以上的进程互相都要求使用对方已经占有的资源而导致无法继续运行的现象。
产生死锁的原因
- 产生死锁的4个必要条件为:
- 互斥条件:进程对其所要求的资源进行独占性控制。
- 请求保持条件:进程已经保持了至少一个资源,但又提出新的资源申请,而该资源又得不到满足,于是该进程阻塞,但其原先获得的资源保持不放。
- 不可剥夺条件:进程已获得的资源在未使用完之前,不能被剥夺,只能在使用完事由自己释放。
- 环路条件:当发生死锁时,在进程资源有向图中存在环路
线程
定义
- 线程是系统实施调度的基本的、独立的单位。
- 引入线程的原因:由于在进程的创建、撤消和切换的过程中,系统付出的时空代价比较大,因此在系统中的进程数目不宜过多,进程切换不能过于频繁,这就限制了并发程度的提高。引入线程之后,将传统的进程的两个基本属性分开,可以通过创建线程来完成任务,提高了并发。
- 线程基本不拥有资源,只拥有一点运行必不可少的资源。
- 线程可以创建另外一个线程,同一个线程中的多个线程可以并发执行。线程也有就绪、运行和阻塞的三种基本状态。