第一节 进程(线程)的同步与互斥 第二节 进程的同步与互斥
本章重难点分析
1、进程同步与互斥
2.死锁
多道程序系统中并发进程通常有多个。在逻辑上具有某种联系的进程称为相关进程
如果一个进程的执行不影响其他进程的执行,且不受其他进程的影响,则这些并发进程相互之间是无关的
如果一个进程的执行影响到其他进程的执行,或者受其他进程的影响,则这些并发进程是相关的
一、与时间有关的错误
相同的程序在可能的三种情况下,分别产生了三组不同的结果
根本原因在于:在并发程序中共享了公共变量,使得程序的计算结果与并发程序执行的速度有关
这种错误的结果又往往是与时间有关的(如上例中的三种情形,其结果时对时错,随执行速度的不同而异),所以,把它称为“与时间有关的错误”
二、进程的同步与互斥
解决进程同步与互斥的做法有两种:一是由竞争各方平等协商;二是引入进程管理者
临界资源是指计算机系统中的需要互斥使用的硬件或如那件资源,如外设、共享代码段、共享数据结构等。多个进程在对临界资源进行写入或修改操作时,必须互斥的进行
计算机系统中也有一些可以同时访问的共享资源不是临界资源,如只读数据
进程间的相互制约关系按照相互感知程度分为如表8-1所列的三种类型。资源共享的程度分成三个层次:互斥(mutual exclusion)、死锁(deadlock)和饥饿(starvation)
保证资源的互斥使用是指多个进程不同时使用同一个资源。避免死锁是指避免多个进程互不相让而得不到足够的资源的情况出现。避免饥饿是指避免某些进程一直得不到资源

临界资源的正确访问过程分成如图8-2所示的四个部分:
1)进入区:(entry section):在进入区设置相应的“正在访问临界区”标志,检查可否进入临界区;以防止其他进程同时进入临界区
2)临界区(critical section):进程中访问临界资源的一段代码
3)退出区(exit section):将“正在访问临界区”的标志清除
4)剩余区(remainder scetion):代码中的其余部分
同步机制应遵循以下4条准则:
1)空闲则入:任何时刻最多只有一个进程位于临界区。当有进程位于临界区时,其他进程不能进入临界区
2)忙则等待:当由进程处于临界区时,后到达的进程只能在进入区等待
3)有限等待:等待进入临界区的进程不能无期限的死等
4)让权等待:因在进入区等待而不能进入临界区的进程,应释放处理机,转换到阻塞状态

1.进程互斥的软件方法


彼得送算法可实现四条准则中的前二条:空闲则入和忙则等待。但pi各pj会形成乒乓效应,也就是当pi希望进入临界区而pj无响应时,Pi会出现“饥饿现象”。另外对于三个以上进程间的互斥其标识设计更为复杂
这里的根本问题就是修改标志和检查标志不能作为一个整体来执行
2.进程互斥的硬件方法
软件方法实现互斥不适用于数目很多的进程间的互斥
利用硬件方法的主要思路是用一条指令完成渡河写两个操作,因而保证读操作和写操作不被打断。依据锁采用的指令的不同硬件你方法完成TS指令和swap指令两种
(1)Test-and-set指令
Ts指令的功能是读出指定标志后八该标志设置为TRUE。ts指令互斥算法是,每个临界资源黄色至一个公共布尔变量lock,表示资源的两种状态:TRUE标志正被占用,FALSE表示空间。初值为FALSE。在进入利用TS进行检查和修改lock,有进程在临界区时,重复检查;直到其他进程退出时,检查通过。
(2)Swap指令(或exchange指令)

硬件方法把修改和检查操作合称为整体而具有明显的优点,体现在以下几个方面
1)使用范围广:硬件方法适用于任意数目的进程,在单处理器和多处理器环境中完全相同
2)简单:硬件方法的标志设置简单,含义明确,容易验证其正确性
3)支持多个临界区:在一个进程内有多个临界区时,只需为每个临界区设立一个布尔变量
硬件方法的主要缺点包括:
1)进程在等待进入临界区时,处理机为忙等,不能实现“让权等待”
2)进入临界区的进程是从等待进程中随机选择的,可能导致“饥饿”
三、信号量(semaphore)和P、V原语
平等进程间的协商机制存在有些问题协商无法解决的,需要引入一个地位高于进程的管理者来解决共有资源的使用问题
操作系统可以从进程管理者的角度来处理互斥的问题,信号量就是由操作系统提供的管理共有资源的有效手段



第二节、经典的进程同步问题
Dijkstra把同步问题抽象成一种“生产者-消费者关系”
生产者-消费者问题是计算机中各种实际的同步、互斥问题的一个抽象模型。计算机系统中的许多问题都可被归结为生产者和消费者关系,例如,处理并生成数据是生产者进程,打印结果是消费者进程;在输入时输入进程是生产者进程,处理并生成数据是消费者进程。
简单生产者--消费者问题:设有一个生产者进程P,它们通过一个缓冲区联系起来,如图所示。缓冲区只能容纳一个产品,生产者不断的生产产品,然后往空缓冲区送产品;而消费者则不断的从缓冲区中取出产品,并消费掉

P进程不能往已经“满”的缓冲区中放入产品,设置信号量empty,其初值为1,用于指示空缓冲区数量;同样,Q进程也不能从已经“空”的缓冲区中取出产品,设置信号量full,初值为0,用于指示满缓冲区数量


(1)、同步问题
生产者进程不能往“满”的缓冲区中放产品,设置信号量empty,设为k,用于指示缓冲池中空缓冲区数目。消费者进程不能从“空”的缓冲区中取产品,设置信号量full,初值为0,用于指示缓冲池中满缓冲区数目
(2)互斥问题
设置信号量mutex,初值为1,用于实现临界区(环形缓冲池)的互斥。另设整型量i和j,初值均为0,i用于指示空缓冲区的头指针;j用于指示有产品的满缓冲区的头指针

(1)读者--写者问题的描述
假定有某个共享文件F,系统允许若干进程对文件读或者写。这里把药读文件的进程称为读者,把腰子额文件的进程称为写者
读者和写者必须遵守如下的约定
1)多个进程可以同时读文件F
2)任一进程在对文件F进行写时,不允许其他文件对文件进行读或写
3)当有进程正在读文件时不允许任何进程去写文件




浙公网安备 33010602011771号