-
前驱图
-
有向无环图,一个节点表示一条语句、计算步骤或一个进程
-
具有反身性,反对称性,传递性
-
没有前驱的节点为初始节点,没有后继的节点为终止节点
-
-
程序的顺序执行
-
内部顺序性:指令按顺序执行
-
外部顺序性:所有进程的活动依次执行
-
特性
-
连续性
-
封闭性:执行过程中独占系统总的全部资源
-
可再现性:只有可再现的结果才是正确的
-
-
-
程序的并发执行
-
内部并发性:一个程序内部的并发性
-
外部并发性:多个程序的并发性
-
特性
- 间断性:交叉执行,进程可中断
- 非封闭性:运行环境可能被其他进程改变
- 不可再现性:交叉是随机的,导致运行结果不定
-
程序并发执行的条件
-
Bernstein条件(P86):是程序可并发执行的必要条件
-
-
并发程序的表示
-
并发语句:表示可以并发执行
-
-
-
并发带来的与时间有关的错误
- 是否发生错误和进程的推进速度有关,这种错误称与时间有关的错误。
-
可能发生错误,也可能不发生错误。
-
-
竞争条件:多个进程访问同一变量,因交叉次序不同导致变量失去了数据完整性,体现为运行结果不同。
- 是否发生错误和进程的推进速度有关,这种错误称与时间有关的错误。
-
进程互斥
-
进程互斥
-
同一组共享变量的多个临界区中,只允许其中一个临界区被一个进程使用。
-
是保证正确性的要求。
-
-
是一种间接性相互作用,运行进程感觉不到且不希望的。
-
多个进程不能同时进入关于同一组共享变量的临界区,否则会发生时间有关的错误。
-
共享变量:多个进程需要访问的变量。
-
既可能属于操作系统空间,也可能属于用户空间。
-
-
临界区(临界段):访问共享变量的程序段。临界区属于临界资源,是互斥的,独占型的。
-
临界资源:一次只许一个进程使用的资源。
-
死锁:两个进程因临界区访问冲突而导致均无法推进。
-
忙式等待:一个进程在某一条语句内原地踏步,不进入等待状态的等待,为就绪或运行态
-
-
-
进程互斥原则
-
编写进入区和退出区代码,使同一时刻最多一个进程在临界区内。
-
正确性原则
-
互斥性原则
-
进展性原则
-
有限等待性原则
-
-
调度原则
-
临界区均空闲时,要求进入某一临界区的进程立即进入
-
某一临界区被占用时,要求进入某一临界区的进程应等待
-
进程离开临界区时,某一等待进入临界区的进程进入
-
-
-
进程互斥的软件实现
-
用机器指令实现,算法复杂,效率略低,一般适用于单处理器系统。存在忙式等待问题。
-
Dekker互斥算法(两个进程)
-
Peterson互斥算法(两个进程)
-
Lamport互斥算法(多个进程)
-
按号执行进程,号相同时比较进程号
-
-
Eisenberg-Mcguire算法(多个进程)
-
-
进程互斥的硬件支持
-
多处理器内可以并行执行的进程的效果,为重排序执行的结果时,可导致上述算法的结果发生错误。
-
解决方法
-
原子化的硬件指令:直接实现互斥
-
对一个基本变量的访问和修改不被分割的变量。
-
即一系列代码执行时不可被打断。
-
-
一般基础性支持:改进软硬件解法
-
硬件提供存储障碍语句
-
保证前面的指令先于后面指令执行
-
-
硬件提供“测试并重置”指令(两个指令周期)
-
取内存某一单元的值,再给他赋新值。该条指令为原子的。(单处理器每条指令都是原子的)
-
-
-
硬件提供“交换”指令(三个指令周期)
-
硬件提供“开关中断”指令
-
没有忙式等待耗费资源的问题。
-
实现效率高,简单易行,影响系统的并发性。故这种程序段一般较短时间内执行完毕。
-
仅在单处理器系统中有效。
-
-
-
-
进程同步
-
进程间直接的相互形式,发生在相关的,有逻辑关系的进程之间。
-
一组进程为了协调推进程度,在某些地方需要等待或者被唤醒,是一种相互制约的关系。
-
合作进程
-
单独不能执行,并发能够执行的进程。
-
-
-
进程同步机制
-
用于实现进程间同步的工具。
-
-
信号量与PV操作
-
分散型同步机制,易读性差,局部性差,正确性难以保证。
-
信号量类型(一种结构体)
-
value。初值是非负整数。
-
初值为1:实现进程互斥。
-
初值为0:实现进程同步。
-
初值大于1:管理同种组合资源。
-
组合资源:若干相对独立的资源构成的集合。
-
同种组合资源:相同类型子资源构成的集合。
-
-
-
queue。可指向一个等待队列的头部。
-
-
PV操作
-
对信号量类型变量的操作。
-
P
-
一个进程申请资源,进入队列尾部。如果此时没有足够的资源,则该进程进入等待状态,系统转入处理器调度,选择另一个进程来占据时间片。
-
-
V
-
一个进程释放资源,从队列头部弹出。如果此时该进程确实存在(即弹出之前队列不为空,即value<0,此时value的绝对值为等待进程的个数),则该进程进入就绪状态。此时不关中断,方便其进行一系列的资源释放操作。
-
-
一段不可间断的程序称为原语。PV操作是原语。
-
信号量是共享变量,PV操作是其临界区。通常采用开关中断的互斥方法。
-
-
PV操作的实现
-
采用开关中断:快,影响小。
-
-
PV操作的应用
-
司机与售票员问题
-
P1执行P(S1)时,P1被sleep,直到P2执行V(S1)。下同。
-
-
生产者-消费问题
-
生产者可能和生产者互斥,而生产者与消费者不互斥。(PV(S1),PV(S2)保证)
-
-
读者-写者问题
-
第一个来临的读操作、最后一个离开的读操作,和写操作互斥。
-
写者会出现饥饿:一旦有写者等待,则新到达的读者进入等待。
-
-
-
吸烟者问题
-
两个P操作不能同时进行,导致一个可以完成的进程被另一个同时进行的进程抢夺资源,导致死锁。
-
解决:SP,SV,同时进行一系列P或V操作。
-
SP失败:将PCB连接到第一个S<t的队列中,重置该PCB的PC指针。
-
SV:将S队列上所有PCB取出,送入就绪队列。(因为CPU调度处理就绪队列)
-
-
-
-
-
管程
-
集中式同步设施,不灵活,效率低。
-
将共享变量,对共享变量的操作集中在一个模块中,将分散在各个进程中互斥访问公共变量的临界区集中起来,提供对它们的保护。
-
管程的形式
-
共享变量声明:private
-
define的函数名:可供外部使用的函数的名称
-
use的函数名:本管程调用的函数的名称
-
其他函数:仅可在管程内部使用
-
外部只能通过define的函数,来间接访问共享变量,一次只有一个进程进入管程。
-
-
管程的特性
-
模块化
-
抽象数据类型,类似于c++的类
-
信息隐蔽
-
-
管程的语义
-
入口等待队列(管程外定义)
-
申请管程的互斥权。
-
一次只有一个进程进入管程,其余的在入口等待队列等待。或者说,每个时刻都有n-1个进程在各式各样的等待队列里。
-
-
条件队列(可有多个)
-
若进程不满足运行条件,比如刚进入时没有资源,则
-
选取目标共享变量的条件队列,进行一次wait()。
-
此进程进入该队列尾部等待。
-
从紧急等待队列,或入口等待队列选择一个进程运行。(优先紧急等待队列)因为这个进程wait了,CPU总得找点事情做。
-
-
若进程进入后满足运行条件,则无需进入条件队列,直接运行。
-
-
紧急等待队列
-
进程若不满足运行条件,比如即将结束,需要唤醒别的进程,则
-
选取特定共享变量的条件队列,执行一次signal()。
-
此进程进入紧急等待队列尾部,等待被唤醒(Hoare),或直接离开管程((Hansen))。
-
从选中的条件队列选择一个进程运行,如不存在进程,则不运行。
-
-
-
进程离开时:从紧急等待队列,或入口等待队列选择一个进程运行。(优先紧急等待队列)
-
-
-
磁头引臂调度问题
-
电梯调度算法
-
Hansen管程
-
-
嗜睡理发师问题
-
管程和PV操作的等价性
-
等价表 4-1 4-2
-
采用构造方法实现的同步机制,比采用直接方法实现的机制效率低,即用管程模拟PV操作比直接用PV操作效率低,用PV模拟管程比直接用管程效率低
-
以被动成分(被进程所操作的对象,即公共区)为核心,都只适用单处理器系统和有公共内存的多处理器系统,不适合分布式系统
-
进程调用管程define的函数或使用PV操作时,是调用进程执行该代码段,而非将控制权交给其他进程。
-
-
管程嵌套调用
-
管程嵌套可能发生多层,调用后可能等待
-
禁止嵌套
-
允许嵌套,最内层发生等待时,释放其互斥权
-
允许嵌套,最内层发生等待时,释放所有层次的互斥权
-
允许嵌套,最内层发生等待时,释放所有除当前层次的互斥权
-
-
会合(调用)
-
PV,管程的问题:当多个进程处于多个分布式主机时,信号量不能被共同访问
-
进程与进程之间可以通过会合的方式相互作用,不需要被动成分参与
-
当一个任务调用另一个任务,且被调用任务已经准备好时,发生会合
-
任务
-
主动成分称为任务。
-
有若干个入口及其先进先出队列,每个入口后有一段程序。
-
采取先到达者等待后者的方式,和一些选择语句(else部分相当于条件恒真),来调节调用者和被调用者的关系。
-
被调用者按照先到先服务的次序依次接受调用。
-
任务调用时,被调用者(被调用进程)执行接受语句后的程序段。
-
被调用者执行接受语句后,调用者已经返回。类似于委托机制。
-
-
-
进程间的通信
-
进程互斥与同步为低级通信,进程间交换大量信息称为高级通信,简称通信。
-
共享内存模式
-
一组在内存写,一组在内存读。
-
-
消息传递模式
-
通过系统调用命令(send,receive)来进行通信
-
直接方式
-
发送者指定接收者,接收者指定发送者
-
对称式
-
一对一
-
-
非对称式
-
发送者指定唯一接收者,接收者不指定发送者
-
receive时返回进程的pid
-
-
有缓冲途径(非对称式)
-
存在自愿性中断;提高了并发性。
-
send:①操作系统(核心态)为发送的消息分配缓冲区,将消息复制到缓冲区;②然后将缓冲区连接到互斥的接收进程的消息链中。
-
receive:①操作系统(核心态)将缓冲区从消息链取出;②将信息复制到接收进程空间中;③缓冲区回到互斥的系统的空闲缓冲区链中。
-
缓冲区,发送和接收属于操作系统区,故操作系统应能访问用户区。
-
-
无缓冲途径
-
send和receive相互等待
-
①发送进程唤醒接收进程,②发送进程等待接收进程接收消息(从发送进程空间直接传到接收进程空间,可用寄存器传输),③接收进程唤醒发送进程。
-
节省空间;并发性差。
-
-
-
间接方式
-
进程间通过信箱传递消息。信箱可存在操作系统空间,也能存在用户空间。由接收方调用系统创建信箱。
-
-
-
计算机操作系统教程:互斥、同步与通信-期末复习大纲
最新推荐文章于 2024-07-25 16:41:17 发布