操作系统教程第3章-3 进程的同步与互斥

合集下载

操作系统中的进程同步与互斥

操作系统中的进程同步与互斥

操作系统中的进程同步与互斥进程同步和互斥是操作系统中重要的概念和技术。

在多道程序环境中,多个进程同时运行,但它们之间存在着共享资源、互相依赖等情况,因此需要进行同步和互斥处理。

本文将从互斥与同步的定义、需求、常用的同步与互斥机制等方面进行论述。

一、互斥与同步的定义互斥是指某个资源同时只允许一个进程访问,其他进程需要等待。

同步是指一组相关进程在执行过程中需要相互合作,按照一定顺序执行。

二、互斥与同步的需求1. 互斥:当多个进程同时访问一个共享资源时,若不进行互斥处理,可能会引发数据不一致、竞争条件等问题。

例如,多个进程同时对一个文件进行写操作,可能导致文件内容错乱。

因此,需要通过互斥来保证每个进程访问共享资源的独占性,避免冲突。

2. 同步:在某些情况下,多个进程需要按照一定顺序执行,以满足某种逻辑关系或条件。

例如,生产者-消费者问题中,生产者需要在缓冲区未满时才能生产,消费者需要在缓冲区非空时才能消费。

因此,需要通过同步来协调进程的执行顺序。

三、常用的同步与互斥机制1. 互斥机制:常用的互斥机制包括信号量、互斥锁和临界区等。

a) 信号量:是一种用于控制对共享资源的访问的机制。

通过定义一个信号量,以保证同一时间只有一个进程可以访问共享资源。

典型的信号量包括二进制信号量和计数信号量。

b) 互斥锁:是一种用于协调多个进程访问共享资源的机制。

通过对共享资源加锁,只有持有锁的进程才能访问该资源,其他进程需要等待。

常见的互斥锁有互斥量(Mutex)和读写锁(ReadWrite Lock)等。

c) 临界区:是指一段在并发执行环境中,对某种共享资源进行操作的代码段。

在进入临界区之前,进程需要获取临界区的访问权限,执行完临界区代码后,释放访问权限。

通过临界区机制,可以保证同一时间只有一个进程在执行临界区的代码。

2. 同步机制:常用的同步机制包括信号量、条件变量和屏障等。

a) 信号量:除了用于互斥机制,信号量也可以用于同步机制。

操作系统同步和互斥

操作系统同步和互斥

操作系统同步和互斥操作系统中的进程之间的关系只有两种:同步与互斥。

下面由店铺为大家整理了操作系统的同步和互斥的相关知识,希望对大家有帮助!操作系统同步和互斥1.进程同步进程同步也是进程之间直接的制约关系,是为完成某种任务而建立的两个或多个线程,这个线程需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。

进程间的直接制约关系来源于他们之间的合作。

比如说进程A需要从缓冲区读取进程B产生的信息,当缓冲区为空时,进程B因为读取不到信息而被阻塞。

而当进程A产生信息放入缓冲区时,进程B才会被唤醒。

2.进程互斥进程互斥是进程之间的间接制约关系。

当一个进程进入临界区使用临界资源时,另一个进程必须等待。

只有当使用临界资源的进程退出临界区后,这个进程才会解除阻塞状态。

比如进程B需要访问打印机,但此时进程A占有了打印机,进程B会被阻塞,直到进程A释放了打印机资源,进程B才可以继续执行。

扩展:临界资源在操作系统中,进程是占有资源的最小单位(线程可以访问其所在进程内的所有资源,但线程本身并不占有资源或仅仅占有一点必须资源)。

但对于某些资源来说,其在同一时间只能被一个进程所占用。

这些一次只能被一个进程所占用的资源就是所谓的临界资源。

典型的临界资源比如物理上的打印机,或是存在硬盘或内存中被多个进程所共享的一些变量和数据等(如果这类资源不被看成临界资源加以保护,那么很有可能造成丢数据的问题)。

对于临界资源的访问,必须是互诉进行。

也就是当临界资源被占用时,另一个申请临界资源的进程会被阻塞,直到其所申请的临界资源被释放。

而进程内访问临界资源的代码被成为临界区。

对于临界区的访问过程分为四个部分:1.进入区:查看临界区是否可访问,如果可以访问,则转到步骤二,否则进程会被阻塞2.临界区:在临界区做操作3.退出区:清除临界区被占用的标志4.剩余区:进程与临界区不相关部分的代码临界资源使用规则:忙则等待、优先等待、空闲让进、让权等待(在临界区的进程,不能在临界区内长时间处于事件等待,必须在一定时间退出临界区)。

进程同步与互斥

进程同步与互斥
的值来同步进程。
条件变量
通过条件变量的等待和通知机 制来实现进程同步。
消息传递
通过发送和接收消息来实现不 同进程之间的同步与互斥。
软件陷阱和中断
使用软件陷阱和中断来控制进 程的执行流程,从而实现同步
与互斥。
混合实现方式
硬件与软件的结合
结合硬件和软件来实现进程同步与互斥, 以获得更好的性能和灵活性。
多任务处理系统
任务调度
通过进程同步,可以按照一定的 优先级或时间片轮转的方式,将 任务分配给处理器执行。
资源共享
在多任务处理系统中,资源通常 是有限的,进程互斥可以确保同 一时间只有一个进程访问共享资 源,避免数据不一致和冲突。
任务间的通信
进程同步和互斥还可以用于实现 进程间的通信,例如信号量、消 息队列等机制,使得任务之间可 以相互协调和同步。
信号量
01 信号量是一个整数值,用于表示资源或临界 区的数量。 02 信号量通常用于实现进程间的同步和互斥。
03
信号量可以是一个全局变量,也可以是进程 间共享的变量。
04
信号量的值表示当前可用的资源或临界区的 数量。
信号量的应用
实现进程间的同步
01
通过使用信号量,进程可以等待或释放资源,以确保资源在需
并行计算系统
负载均衡
在并行计算中,进程同步可以帮助实现负载均衡,使得各个处理器 能够均匀地分配计算任务,充分利用系统资源。
任务划分
进程互斥可以用于划分计算任务,确保同一时间只有一个处理器执 行特定任务,避免任务之间的干扰和冲突。
数据一致性
通过进程同步,可以确保并行计算中各个处理器访问和修改的数据保 持一致性,避免数据不一致的问题。
互斥的效率问题

北大操作系统第三章:操作系统习题课(三)

北大操作系统第三章:操作系统习题课(三)

操作系统习题讲解进程的同步与互斥(三)赵俊峰P 、V 题的一般分析过程1问题的分析确定有哪些进程y1.问题的分析,确定有哪些进程;2y2.确定各个进程之间的同步互斥关系;y3.信号量的设计(初值以及用来实现哪些进程间的同步互斥、是否需要一般变量的辅助)辅助);y4、实现(避免出现不公平现象比如饥饿、避免出现死锁如P 操作的次序问题)。

同学们的问题1有几个进程进程的划分?y:有几个进程,进程的划分?y 2:if 判断语句与P/V 之间的区别?多余的判断?y 3:每个进程的行为划分?对于行为的控制?该谁去控制?触发行为的条件及被触发的行为?y 5:触发行为的条件及被触发的行为?y 6:需要全面考虑题目要求需要全面考虑题目要求y 7:什么时候需要计数?共享变量需要互斥使用y 8:共享变量需要互斥使用进程同步与互斥习题(四)请用信号量解决以下问题y 把学生和监考老师都看作进程, 学生有N 人, 考场门口每次只能进出个人教师1人. 考场门口每次只能进出一个人, 进考场原则是先来先进. 当N 个学生都进入考场后, 教师才能发卷子. 学生交卷后可以离开考场. 教师要等收上来全部卷子并封装卷子后才能离开考场.(1)(1)问共需设置几个进程?(2) 试用P 、V 操作解决上述问题中的同步和互斥关系.进程同步与互斥习题(四)共享资源:考场门口请用信号量解决以下问题y 把学生和监考老师都看作进程, 学生有N 人, 考场门口每次只能进出个人教师1人. 考场门口每次只能进出一个人, 进考场原则是先来先进.c 当N 个学生都进入考场后, 教师才能发卷子. 学生交卷后可以离开考场. d 教师要等收上来全部卷子并封离同步行为:c d 装卷子后才能离开考场.(1) ?()问共需设置几个进程(2) 试用P 、V 操作解决上述问题中的同步和互斥关系.信号量及其他变量的设置需设置以下的信号量S_Door = 1//能否进出门;S St d tR d 0学生是否到齐S_StudentReady = 0//学生是否到齐;S_Mutex1 = 1//互斥信号量;S M t 21互斥信号量S_Mutex2 = 1//互斥信号量;S_ExamBegin = 0//开始考试;S E O 0考试结束所有试卷S_ExamOver = 0//考试结束,所有试卷已交;int nStudentNum 0;int nStudentNum = 0;int nPaperNum = 0;student(){学生进程P(S_Door);进门;V(S Door);V(S_Door);P(S_Mutex1);// 增加学生的个数nStudentNum ++;if(nStudentNum N)V(S StudentReady);if(nStudentNum == N) V(S_StudentReady);V(S_Mutex1);P(S_ExamBegin);//等老师宣布考试开始考试;交卷;P(S Mutex2);P(S_Mutex2);//增加试卷的份数nPaperNum ++;if(nPaperNum == N) V(S_ExamOver);V(S Mutex2);V(S_Mutex2);P(S_Door);出门;V(S_Door);}Teacher()教师进程(){P(S_Door);进门进门;V(S_Door);P(S StudentReady);//P(S_StudentReady); 最后一个进来学生把老师唤醒;发卷子;for(i=1; i <= N; i++)(;;)V(S_ExamBegin);//开始考试;P(S_ExamOver);//等待考试结束;封装卷子P(S_Door);出门;V(S_Door);}进程同步与互斥习题(五)某商店有两种食品B A 和B, 最大数量各为m 个.该商店将A,B 两种食品搭配出售, 每次各取一个. 为避免食品变质, 遵循先到食品先出售的原则, 有两个食品公司分别不断地供应A,B 两)种食品(每次一个). 为保证正常销售, 当某种食品的数量比另一种的数量超过k(k<m)个时, 暂停对数量大的食品进货, 补充数量少的食品.◦(1)(1) 问共需设置几个进程?◦(2) 试用P ,V 操作解决上述问题中的同步和互斥关系.生产者-消费者中的消费者行为进程同步与互斥习题(五)某商店有两种食品B A 和B, 最大数量各为m 个. 该商店将A,B 两种食品搭配出售, 每次各取一个. 为避免食品变质, 遵循先到食品先出售的原则, 有两个食品公司分别不断地供应A,B 两)种食品(每次一个).为保证正常销售, 当某种食品的数量比另一种的数量超过k(k<m)个生产者-消费者中的生产者行为生产者之间时, 暂停对数量大的食品进货, 补充数量少的食品.的同步行为◦(1) 问共需设置几个进程?(2)PV ◦(2) 试用P ,V 操作解决上述问题中的同步和互斥关系.信号量及其他变量的设置设置以下的信号量 S_Mutex = 1 S Wait A = 0; S_Wait_A = 0; S_Num_A = 0; S BuffNum A = m; S_BuffNum_A = m; S_Wait_B = 0; S Num B 0; S_Num_B = 0 S_BuffNum_B = m; i t N int nNum_A = 0; A 0 int nNum_B = 0; //用于互斥访问的信号量 //A太多了,要等一等 太多了 要等一等B //食品A的空闲缓冲区个数; //B太多了,要等一等A //食品B的空闲缓冲区个数;Producer_A() A进程 { int b_TooMuch; while(1) { 生产产品; P(S_Mutex); if((nNum A nNum_B) == k) b_TooMuch = 1; if((nNum_A nNum B) == k) b TooMuch = 1; else b_TooMuch = 0; V(S_Mutex); if(b T M h) P(S W i A) //A太多了 if(b_TooMuch) P(S_Wait_A); 太多 P(S_BuffNum_A); 向商店提供一个 向商店提供 个A商品; V(S_Num_A); P(S_Mutex); nNum A ++; nNum_A ++; if(nNum_B - nNum_A == k-1)  V(S_Wait_B);  //可以进B了}}V(S Mutex); V(S_Mutex);Producer_B() B进程 { int b_TooMuch; while(1) { 生产产品; P(S_Mutex); if((nNum B nNum_A) == k) b_TooMuch = 1; if((nNum_B nNum A) == k) b TooMuch = 1; else b_TooMuch = 0; V(S_Mutex); if(b T M h) P(S W i B) //B太多了 if(b_TooMuch) P(S_Wait_B);  太多 P(S_BuffNum_B); 向商店提供一个 向商店提供 个B商品; V(S_Num_B); P(S_Mutex); nNum B ++; nNum_B ++; if(nNum_A - nNum_B == k-1)  V(S_Wait_A);  //可以进A了}}V(S Mutex); V(S_Mutex);Shop() Sh () { while(1) { P(S_Num_A); ( _Num_B); ); P(S 出售A、B食品各一个; V(S BuffNum A); V(S_BuffNum_A); V(S_BuffNum_B); } }Shop进程信号量和P、V原语的小结对信号量和P、V原语的使用可以归纳为三种情形:  第一,把信号量视为一个加锁标志位,其目的是为了 实现对某个唯一 实现对某个唯 唯一的共享数据 唯 的共享数据 共享数据的互斥访问 互斥访问,如数据库中 的某个记录,各个进程间的某个共享变量。

操作系统中的进程同步与互斥实现

操作系统中的进程同步与互斥实现

操作系统中的进程同步与互斥实现在操作系统中,进程同步和互斥是非常重要的概念。

进程同步是确保多个进程在共享资源时按照特定的顺序进行访问,而互斥是确保在任何时候只能有一个进程访问共享资源。

本文将介绍进程同步和互斥的操作系统机制,并讨论它们在现代操作系统中的应用。

一、进程同步机制实际应用场景中,许多进程都需要共享某些资源。

在这种情况下,同步机制可以确保按照特定的顺序共享资源,以避免竞争和死锁。

1.信号量信号量是最常见的同步机制之一。

在操作系统中,信号量是一个计数器,用于记录共享资源的使用次数。

当进程需要访问资源时,它会尝试获取信号量。

如果资源当前没有被其他进程使用,信号量的值将减去1,并且进程将可以访问资源。

如果资源已经被其他进程使用,进程将被阻塞,直到资源可用。

当进程完成资源的使用时,它必须释放信号量,使其值增加1,以便其他进程可以访问该资源。

2.互斥锁互斥锁是一种更简单和更常见的同步机制,它用于确保共享资源仅由一个进程使用。

在操作系统中,互斥锁是一种执行阻塞锁的特殊锁。

如果一个进程想要访问一个共享资源,它必须先尝试获取互斥锁。

如果锁当前未被其他进程使用,则该进程将能够访问资源,锁将被锁定,以允许进程在访问资源时保持独占状态。

当进程完成访问资源时,它必须释放该锁,以便其他进程可以使用它。

3.条件变量条件变量是一种同步机制,用于仅在特定条件下执行操作。

条件变量由两个主要部分组成:条件和等待队列。

条件是一个布尔表达式,用于检查是否满足特定的条件。

等待队列是队列,其中包含在条件不满足时被阻塞的进程。

当条件被满足时,等待进程将被唤醒,并且可以开始执行所需的操作。

二、进程互斥机制在共享资源时,进程互斥是非常重要的。

这可以确保在任何时候仅有一个进程访问共享资源。

以下是三种常见的互斥机制的例子:1.临界区临界区是指只能由一个进程访问的代码部分。

在这种情况下,进程将在进入临界区之前获得互斥锁,以确保在任何时候只有一个进程可以访问临界区。

计算机操作系统03进程的同步与通信

计算机操作系统03进程的同步与通信

用TS实现进程互斥: repeat while TS(lock) do skip; critical section lock:=false; remainder section until false;
第三章 进程的同步与通信
2. 利用Swap指令实现互斥 Swap指令: procedure (var a,b:Boolean) var temp:Boolean; begin temp:=a; a:=b; b:=temp end
计算机操作系统
第三章 进程的同步与通信
教学目的与要求: 1.掌握进程同步、进程通信、资源、信号量等
基本概念 2.了解解决进程同步问题的软件方法和硬件方
法 3.能用信号量和管程解决简单进程同步问题 4.了解OS/2操作系统的进程同步与通信机制
第三章 进程的同步与通信
重点与难点:
1. 同步、通信、资源、信号量等基本概念
第三章 进程的同步与通信
2 临界资源的定义 临界资源是指并发进程之间在某段时间内同
时提出访问请求的互斥型资源。 例:在A进程正在访问打印机的时候,B进程也提
出对打印机的访问请求,则打印机为临界资源。应 互斥使用临界资源。
三.临界区 1 临界区的定义 是指进程中访问临界资源的那段代码
第三章 进程的同步与通信
第三章 进程的同步与通信
算法3:与算法2相似,只是在flag[i]=ture时表示进 程P[i]要求进入临界区,若此时无其它进程有此要求, 则进程P[i]可进入临界区。对于进程Pi repeat flag[i]:=true; while flag[j] do no_op critical section flag[i]:=false; remainder section until false 该算法的缺点:违背了空闲让进和有限等待原则

操作系统中进程同步和互斥的实现方法

操作系统中进程同步和互斥的实现方法

操作系统中进程同步和互斥的实现方法在操作系统中,进程同步和互斥是非常重要的概念。

它们确保了并发程序的正确性和可靠性。

本文将介绍进程同步和互斥的实现方法。

一、进程同步在多任务环境中,不同的进程之间存在着相互依赖和相互制约的关系。

进程同步是为了协调进程之间的交互,使得它们在适当的时间进行合作,共同完成任务。

1. 互斥锁(Mutex)互斥锁是最常见的进程同步机制之一。

它通过给临界资源加锁,保证同一时刻只有一个进程可以访问该资源。

当一个进程占用了互斥锁后,其他进程试图访问该资源时会被阻塞,直到锁被释放。

2. 信号量(Semaphore)信号量是一种更加通用的进程同步机制。

它是一个计数器,用来控制多个进程对共享资源的访问。

当信号量的值大于等于1时,进程可以访问资源;当值为0时,进程被阻塞。

通过对信号量的操作(P/V操作),可以实现进程之间的同步和互斥。

3. 条件变量(Condition Variable)条件变量用于实现进程间的同步和通信。

当一个进程等待某个条件满足时,可以调用条件变量的等待操作来挂起它的执行;当条件满足时,其他进程可以通过唤醒操作通知等待的进程继续执行。

二、进程互斥进程互斥是为了防止多个进程同时访问或修改共享资源而引发的竞争条件和数据不一致问题。

它保证了同一时刻只有一个进程可以对共享资源进行操作,从而避免了竞争和冲突。

1. 临界区(Critical Section)临界区是一段代码,其中包含对共享资源的访问和操作。

为了实现进程的互斥访问,可以使用互斥锁、信号量等同步机制来对临界区进行保护。

一次只允许一个进程进入临界区,其他进程必须等待。

2. Peterson算法Peterson算法是一种经典的实现进程互斥的算法。

它利用了共享的标志和转弯顺序来实现两个进程之间的互斥访问。

然而,Peterson算法只适用于两个进程之间的互斥,对于多个进程之间的互斥并不适用。

3. 同步屏障(Barrier)同步屏障是一种常用的进程互斥机制。

进程同步与互斥(进程同步与互斥问题)

进程同步与互斥(进程同步与互斥问题)

(二)基本概念
1.信号量 为解决多进程线程同步与互斥问题,让两个或多个多道进程 线程通过特殊的变量展开交互 2.线程 是进程的一个实体,是进程上下文中执行的代码序列,是被 系统调度的基本单元 3.进程 是正在运行的程序实体,并且包括这个运行的程序中占据的 所有系统资源 4.进程同步 它主要源于进程合作,是进程间共同完成一项任务时直接发 生相互作用的关系 5.进程互斥 它主要源于资源共享,是进程之间的间接制约关系
具体实现:
(1)创建进程:创建A、B、C、a、b、c六个进程,要求包括 进程的状态、执行时间和申请资源的等待时间等。在同一时刻可 能有多个进行在内存申请资源,即可以输入多个进程的资源申请。 小和尚的状态有五种:打水,等待打水,倒水,等待倒水, 空闲;老和尚状态有两种:喝水和空闲。 (2)临界资源的管理,包括申请以及分配等,通过信号量和 信号量集实现。水井和水缸作为两个信号量实现各进程之间对共 享资源的互斥和同步。 (3)生产者消费者算法,判断是否可以进行资源的分配。 (4)各个进程的状态实时输出在界面上。
(四)界面设计
输出“是”表 示正在打水; “否”表示没 有打水;“等 待”表示在水 井旁等待打水
输出“是”表 示正在倒水; “否”表示没 有倒水;“等 待”表示在水 缸旁等待倒水
输出解 释参考 本页左 侧
谢谢观看
操作系统讨论课(和尚挑水问题)
小组成员:
CONTENTS
目录
ቤተ መጻሕፍቲ ባይዱ
问题概述 基本概念
设计原理
界面设计
(一)问题概述
某寺庙有小和尚、老和尚各三名。庙内有一水缸、 由小和尚提水入缸,供老和尚引用。水缸可容纳10桶水, 每次往里倒水、往外取水都为1桶,且不可同时进行。 水取自一井中,水井口很小,每次只能容纳一只水桶取 水。设水桶个数为3个。 和尚挑水问题就是使用某种机制,能够使得3名老和 尚可以顺利地喝到水,3名小和尚之间能够有条不紊地 往水缸中入水。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第16/51页
记录型信号量
抽象成 S(信号量) (信号量) value≥0 ≥ L=nil
一类资源
记录型信号量
信号量S 记录型数据结构,一个分量为整型量value, value,另 信号量S:记录型数据结构,一个分量为整型量value,另 一个分量为信号量队列 L;
第17/51页
信号量的物理含义
输入 进程PI 进程
第4/51页
缓冲区
计算 进程PC 进程
缓冲区
打印 进程争关系(间接制约关系)的手段。 是解决进程间竞争关系(间接制约关系)的手段。 间接相互制约关系(互斥) 间接相互制约关系(互斥) 是指若干个进程同时竞争一个需要互斥使用 是指若干个进程同时竞争一个需要互斥使用 一个 的资源时,任何时刻最多允许一个进程去使用,其 的资源时,任何时刻最多允许一个进程去使用, 他要使用该资源的进程必须等待, 他要使用该资源的进程必须等待,直到该资源被释 进程间要通过某种中介发生联系, 无意识安 放。进程间要通过某种中介发生联系,是无意识安 排的。 排的。 产生的原因 资源共享 互斥是一种特殊的同步 逐次使用互斥资源, 逐次使用互斥资源,也是对进程使用资源次序 上的一种协调。 上的一种协调。
P、V操作既可以实现互斥,也可以实现同步 、 操作既可以实现互斥 操作既可以实现互斥,
Swap(int lock, int key) { int temp; temp=lock; lock=key; key=temp }
交换指令的应用
int lock=0; 每个进程定义一个局部变量 int key; 进入临界区前执行: 进入临界区前执行: key=1; do swap(lock, key) while key=0; 离开临界区后执行: 离开临界区后执行: lock=0;
第19/51页
P、V操作讨论 、 操作讨论
P(S):表示申请一个资源 : V(S):表示释放一个资源。 :表示释放一个资源。 P、V操作必须成对出现,有一个 操作就一定 操作必须成对出现, 、 操作必须成对出现 有一个P操作就一定 有一个V操作 有一个 操作 P、V操作的优点 、 操作的优点 简单,而且表达能力强,可解决任何互斥问题 简单,而且表达能力强, P、V操作的缺点 、 操作的缺点 不够安全,P、V操作使用不当会出现死锁,遇 不够安全, 、 操作使用不当会出现死锁, 操作使用不当会出现死锁 到复杂互斥问题时,实现复杂。 到复杂互斥问题时,实现复杂。
对于n个并发进程,互斥信号量的取值范围是? 对于 个并发进程,互斥信号量的取值范围是? 个并发进程 (n-(n-1) ~1
第21/51页
利用记录型信号量实现进程互斥
P1
P2
P(mutex) P(mutex) V(mutex) V(mutex) 互斥区
第22/51页
利用P、 操作实现两个进程互斥的模板如下 操作实现两个进程互斥的模板如下: 利用 、V操作实现两个进程互斥的模板如下:
产生的原因
进程合作
第3/51页
进程的同步( ) 进程的同步(2)
一般同步问题有两类
保证一组合作进程按逻辑需要的执行次序执行 P1 【例】司机 REPEAT 启动 正常运行 到站停 UNTIL FALSE 售票员 P2 REPEAT 关门 售票 开门 UNTIL FALSE
保证共享缓冲区(共享数据) 保证共享缓冲区(共享数据)的合作进程的同步 【例】
struct semaphore mutex; mutex.value=1; mutex.L=nil; { cobegin Process P1:{ M P(mutex); 临界区1 临界区 V(mutex); M } Process P2:{ M P(mutex); 临界区2 临界区 V(mutex); M } coend }
第23/51页
使用PV操作实现互斥应注意 使用PV操作实现互斥应注意 PV
识别临界资源
是否被共享; 是否被共享 是否有排它性使用要求。 是否有排它性使用要求。
临界区代码应尽量短小,不能有死循环。 临界区代码应尽量短小,不能有死循环。 P和V原语应分别紧靠临界区的头尾。 原语应分别紧靠临界区的头尾。 和 原语应分别紧靠临界区的头尾 P、V操作在同一进程中必须成对出现。 操作在同一进程中必须成对出现。 、 操作在同一进程中必须成对出现
remainder section; /*剩余区 剩余区*/ 剩余区
……
第9/51页
访问临界区应遵循的原则
空闲让进 当无进程在临界区时, 当无进程在临界区时,任何有权使用临界区 的进程可进入。 的进程可进入。 忙则等待 不允许两个以上的进程同时进入临界区。 不允许两个以上的进程同时进入临界区。 有限等待 任何进入临界区的要求应在有限的时间内得 到满足。 到满足。 让权等待 不能进入临界区的进程应放弃占用CPU CPU。 不能进入临界区的进程应放弃占用CPU。
第20/51页
用P、V操作实现互斥 、 操作实现互斥
信号量初值为1 信号量初值为 对于两个并发进程,互斥信号量的值仅取1、 和 对于两个并发进程,互斥信号量的值仅取 、0和1三个值 : 三个值
若mutex.value=1表示没有进程进入临界区 = 表示没有进程进入临界区 若mutex.value=0表示有一个进程进入临界区 = 表示有一个进程进入临界区 表示一个进程进入临界区, 若mutex.value =-1表示一个进程进入临界区,另一个 表示一个进程进入临界区 进程等待进入。 进程等待进入。
第5/51页
临界资源 临界资源
系统中某些资源一次只允许一个进程 系统中某些资源一次只允许一个进程 使用, 使用,称这样的资源为临界资源或互斥 资源或共享变量。 资源或共享变量。
硬件临界资源:打印机、磁带机 硬件临界资源:打印机、 软件临界资源:只能排它使用的变量、表格、 软件临界资源:只能排它使用的变量、表格、 队列
第13/51页
硬件解法(3) 硬件解法( )
进入临界区前执行: 进入临界区前执行: 执行“关中断” 执行“关中断”指令 离开临界区后执行: 离开临界区后执行: 执行“开中断” 执行“开中断”指令
第14/51页
信号量机制
一类资源
抽象成
S(信号量) (信号量)
信号量 只能由P 操作对其进行操作的变量。 只能由P、V操作对其进行操作的变量。 信号量的使用应注意 必须置一次且只能置一次初值 初值只能为非负整数 只能执行P 只能执行P、V操作
S .value >0: 表示有 .value个资源可用 表示有S S .value =0: 表示无资源可用 S .value <0: 则| S .value|表示等待队列中的进程 表示等待队列中的进程 个数
信号量的值( 信号量的值(-2) 信号量队列指针
信号量的初值应该大于等于0 信号量的初值应该大于等于
在进程中访问临界资源的那段代码区。 在进程中访问临界资源的那段代码区。 例子
第8/51页
具有临界资源的进程结构
…… entry section critical section; exit section /*进入区 进入区*/ 进入区 /*临界区 临界区*/ 临界区 /*退出区 退出区*/ 退出区
第15/51页
整型信号量
一类资源
抽象成
S(信号量) (信号量)
整型量
整型信号量 信号量S:整型量,除初始化外仅能通过P 信号量 :整型量,除初始化外仅能通过P、V 操作访问 操作原语定义: P和V操作原语定义: S=1 int S; S=1; P(S): while S ≤0 do no-op : S = S -1; ; V(S ):S = S +1; : ;
第6/51页
临界资源实例
二人合作存款
count=100; PA S1:N=count; S2:N=N+100; S3:count=N; 执行情况: 执行情况:
(1) PA—> PB ,PB—> PA ) (2) S1 ) S1—> PB—>S2—>S3 (3) S4 ) S4—> PA—>S5—>S6
测试与设置指令的使用 int lock=0; M /*进入临界区前执行 进入临界区前执行*/ 进入临界区前执行 while TS(lock) do skip; 临界区 /*离开临界区后执行 离开临界区后执行*/ 离开临界区后执行 lock:=0; M
第12/51页
硬件解法(2) 硬件解法( )
交换指令
第7/51页
PB S4:M=count; S5:M=M+200; S6:count=M;
count=400 √ count=200 × count=300 ×
是一个互斥性使用的变量, 因count是一个互斥性使用的变量,是一个临界资源 是一个互斥性使用的变量
临界区
临界区(临界段) 临界区(临界段)
第3章 进程管理
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 进程的引入 进程的结构 进程控制 进程的同步与互斥 进程间通信 进程调度 死锁 线程
第1/51页
两种制约关系
直接相互制约关系(同步) 直接相互制约关系(同步) 间接相互制约关系(互斥) 间接相互制约关系(互斥) 产生的原因
第18/51页
记录型信号量描述
struct semaphore { int value; int *L; } void P(struct semaphore S); { S.value = S.value – 1; /* 把信号量减去 */ 把信号量减去1 if S.value < 0 then block(S.L); /* 若信号量小于 ,则调用 若信号量小于0,则调用P(S)的进 程被置成等待信号量 的状态 */ 的进 程被置成等待信号量S的状态 } 物理意义:申请一个资源,如果申请成功,则返回;如果申请不成功, 物理意义 : 申请一个资源 , 如果申请成功 , 则返回 ; 如果申请不成功 , 则挂在 该资源的等待队列上。 该资源的等待队列上。 void V(struct semaphore S); { S.value = S.value + 1; /* 把信号量加 */ 把信号量加1 if S.value <= 0 then wakeup(S.L); /* 若信号量小于等于 ,则释放一个等待信号量 的进程 */ 若信号量小于等于0,则释放一个等待信号量s的进程 } 物理意义:归还一个资源,如果没有进程等待该资源,则返回; 物理意义 : 归还一个资源 , 如果没有进程等待该资源 , 则返回 ; 如果有进程在 等待,把等待的进程从L上移到就绪队列 上移到就绪队列。 等待,把等待的进程从 上移到就绪队列。
相关文档
最新文档