进程的同步与互斥
进程同步和互斥的概念
进程同步和互斥的概念
进程同步和互斥是操作系统中的两个关键概念,它们用于控制多个进程并发执行时的互相干扰和冲突。
进程同步指的是多个进程在运行过程中需要相互协调和配合,以便达到某种预期的效果。
这种场景通常需要使用一些机制,如信号量、互斥锁、条件变量等来协调进程之间的执行顺序和同步过程。
互斥则是指多个进程之间的资源访问冲突问题。
在多进程并发执行的情况下,会存在多个进程同时访问同一个共享资源的情况,这样就有可能引发数据竞争和资源的访问冲突。
通过使用互斥信号量或者互斥锁等机制,可以有效地避免这种冲突的发生,保证每个进程对共享资源的访问互不干扰,从而实现进程之间的安全交互。
操作系统第6章 进程互斥与同步
Co-begin void Producer_i( ) (i=1,2…k) { item next_p; while(1){ produce an item in next_p P(empty); P(s); add next_p to buffer V(s); V(full); } } void consumer_j( ) (j=1,2…m) { item next_c; while(1){ P(full); P(s); remove an item from buffer to next_c V(s); V(empty); consume the item in next_c}} Co-end
• 进入临界段之前要申请,获得批准方可进入; • 退出临界段之后要声明,以便其他进程进入。
用程序描述: While(1){ entry_section; critical_section; exit_section; remainder_section; }
解决临界段问题的软件算法必须遵循:
准则1:不能虚设硬件指令或假设处理机数目。 准则2:不能假设n个进程的相对速度。 准则3:当一个进程未处于其临界段时,不应阻止 其他进程进入临界段。 准则4:当若干进程欲进入临界段时,应在有限时 间内选出一个进程进入其临界段。 用准则3,4不难推出下面原则 协调各进程入临界段的调度原则: • 当无进程处于临界段时,允许一个进程立即进入临界段。
3.实现临界段的硬件方法
利用处理机提供的特殊指令实现临界区加锁。 常见硬件指令有: ⑴ “Test_and_Set”指令 该指令功能描述为: int *target ( 限定为0,1) int Test_and_Set (int *target) { int temp; temp = *target ; *target = 1; return temp; }
第4章 进程的同步与互斥
mxh
同步
生产者活动:
Repeat 加工一件物品
消费者活动:
Repeat wait(full)
wait(empty)
物品放入箱中 signal(full)
箱中取一物品
signal(empty) 消耗这件物品
Until false
Until false
mxh
互斥
生产者活动:
Repeat
认为缓冲区同一时刻只有一个人可
mxh
4.1 进程的同步和互斥
信号量定义(记录型信号量)
semaphore是一个结构体: typedef struct {
int value;
//资源的个数
//进程链表
struct process *L;
} semaphore;
mxh
4.1 进程的同步和互斥 申请一个
• 信号量操作wait现在可按如 下来定义: void wait (semaphore S) { S.value - -; if (S.value <0) { add this process to S.L; block(); } }
mxh
4.1 进程的同步和互斥
• 信号量的应用
–合作进程的执行次序 –共享缓冲区的进程的同步
mxh
4.1 进程的同步和互斥
• 合作进程的执行次序:
–保证一组合作进程按照逻辑需要所确定 的次序进行。
mxh
4.1 进程的同步和互斥
• 合作进程的执行次序
–可以用一个图来表示进程集合的执行次 序。图的连接描述了进程开始和结束的 次序约束,此图称为进程流图. –例如P78,图4-2。 –使用信号量机制实现图4-2的同步。(练 习)
进程同步与互斥
条件变量
通过条件变量的等待和通知机 制来实现进程同步。
消息传递
通过发送和接收消息来实现不 同进程之间的同步与互斥。
软件陷阱和中断
使用软件陷阱和中断来控制进 程的执行流程,从而实现同步
与互斥。
混合实现方式
硬件与软件的结合
结合硬件和软件来实现进程同步与互斥, 以获得更好的性能和灵活性。
多任务处理系统
任务调度
通过进程同步,可以按照一定的 优先级或时间片轮转的方式,将 任务分配给处理器执行。
资源共享
在多任务处理系统中,资源通常 是有限的,进程互斥可以确保同 一时间只有一个进程访问共享资 源,避免数据不一致和冲突。
任务间的通信
进程同步和互斥还可以用于实现 进程间的通信,例如信号量、消 息队列等机制,使得任务之间可 以相互协调和同步。
信号量
01 信号量是一个整数值,用于表示资源或临界 区的数量。 02 信号量通常用于实现进程间的同步和互斥。
03
信号量可以是一个全局变量,也可以是进程 间共享的变量。
04
信号量的值表示当前可用的资源或临界区的 数量。
信号量的应用
实现进程间的同步
01
通过使用信号量,进程可以等待或释放资源,以确保资源在需
并行计算系统
负载均衡
在并行计算中,进程同步可以帮助实现负载均衡,使得各个处理器 能够均匀地分配计算任务,充分利用系统资源。
任务划分
进程互斥可以用于划分计算任务,确保同一时间只有一个处理器执 行特定任务,避免任务之间的干扰和冲突。
数据一致性
通过进程同步,可以确保并行计算中各个处理器访问和修改的数据保 持一致性,避免数据不一致的问题。
互斥的效率问题
详解进程同步与互斥机制
详解进程同步与互斥机制⽬录⼀、什么是进程同步⼆、什么是进程互斥三、常见的进程同步与互斥机制⼀、什么是进程同步在多道批处理系统中,多个进程是可以并发执⾏的,但由于系统的资源有限,进程的执⾏不是⼀贯到底的,⽽是⾛⾛停停,以不可预知的速度向前推进,这就是进程的异步性。
那么,进程的异步性会带来什么问题呢?举个例⼦,如果有 A、B 两个进程分别负责读和写数据的操作,这两个线程是相互合作、相互依赖的。
那么写数据应该发⽣在读数据之前。
⽽实际上,由于异步性的存在,可能会发⽣先读后写的情况,⽽此时由于缓冲区还没有被写⼊数据,读进程 A 没有数据可读,因此读进程 A 被阻塞。
进程同步(synchronization)就是⽤来解决这个问题的。
从上⾯的例⼦我们能看出,⼀个进程的执⾏可能影响到另⼀个进程的执⾏,所谓进程同步就是指协调这些完成某个共同任务的并发线程,在某些位置上指定线程的先后执⾏次序、传递信号或消息。
再举个⽣活中的进程同步的例⼦,你想要喝热⽔,于是你打了⼀壶⽔开始烧,在这壶⽔烧开之前,你只能⼀直等着,⽔烧开之后⽔壶⾃然会发⽣响声提醒你来喝⽔,于是你就可以喝⽔了。
就是说⽔烧开这个事情必须发⽣在你喝⽔之前。
注意不要把进程同步和进程调度搞混了:进程调度是为了最⼤程度的利⽤ CPU 资源,选⽤合适的算法调度就绪队列中的进程。
进程同步是为了协调⼀些进程以完成某个任务,⽐如读和写,你肯定先写后读,不能先读后写吧,这就是进程同步做的事情了,指定这些进程的先后执⾏次序使得某个任务能够顺利完成。
⼆、什么是进程互斥同样的,也是因为进程的并发性,并发执⾏的线程不可避免地需要共享⼀些系统资源,⽐如内存、打印机、摄像头等。
举个例⼦:我们去学校打印店打印论⽂,你按下了 WPS 的 “打印” 选项,于是打印机开始⼯作。
你的论⽂打印到⼀半时,另⼀位同学按下了 Word 的 “打印” 按钮,开始打印他⾃⼰的论⽂。
想象⼀下如果两个进程可以随意的、并发的共享打印机资源,会发⽣什么情况?显然,两个进程并发运⾏,导致打印机设备交替的收到 WPS 和 Word 两个进程发来的打印请求,结果两篇论⽂的内容混杂在⼀起了。
同步与互斥实现方法
同步与互斥实现方法一、同步与互斥的概念同步是指多个线程或进程之间按照一定的顺序执行,以达到其中一种约定或要求。
在同步的过程中,程序等待其他线程或进程完成一些操作后再继续执行。
互斥是指多个线程或进程之间访问共享资源时,要互相排斥,避免冲突和竞争。
互斥的目的是保证多个线程或进程对共享资源的操作是互斥的,即同一时刻只有一个线程或进程可以访问共享资源。
二、实现同步的方法1. 互斥锁(Mutex)互斥锁是一种最常用的同步机制,通过对一些代码块或函数的访问加上互斥锁的操作,可以保证只有一个线程能够执行该代码块或函数。
当一些线程获得互斥锁时,其他线程在获得该锁之前会被阻塞。
2. 信号量(Semaphore)信号量是一种更为复杂的同步机制,用于实现一些资源的访问控制。
一个信号量有一个整型值和两个原子操作:P和V。
P操作(也称为wait或down)会使信号量的值减1,如果值小于0,当前线程或进程就会被阻塞。
V操作(也称为signal或up)会使信号量的值加1,如果值小于等于0,就会唤醒等待的线程或进程。
信号量可以用于解决生产者-消费者问题、读者-写者问题等并发编程中的资源竞争问题。
3. 条件变量(Condition Variable)条件变量是一种同步机制,用于在多个线程或进程之间同步共享资源的状态。
条件变量对应一个条件,并提供了等待和通知的机制。
等待操作可以使一个线程或进程等待一些条件成立,直到其他线程或进程通知条件变量,使得等待的线程或进程被唤醒。
通知操作可以使等待中的线程或进程被唤醒,继续执行。
条件变量常和互斥锁一起使用,互斥锁用于保护共享资源,条件变量用于同步共享资源的状态。
三、实现互斥的方法1. Peterson算法Peterson算法是一种经典的软件方法,用于解决两个进程之间的互斥访问问题。
该算法使用了两个布尔型变量flag和turn,通过交替使用这两个变量,实现了两个进程之间的互斥。
2. 印章(Semaphores)信号量也可以用于实现互斥操作。
进程同步与互斥
对资源的互斥访问,则信号量值的变化范围是 ________________。
课堂练习
▪ 8.某车站售票厅,任何时刻最多可容纳 20 名购票者进入,当售票厅中少于 20 名购票 者时,则厅外的购票者可立即进入,否则 需在外面等待。若把一个购票者看作一个 进程,请回答下列问题:
};
正确
P.V操作讨论
1) 信号量的物理含义: S>0表示有S个资源可用 S=0表示无资源可用 S<0则| S |表示S等待队列中的进程个数
P(S):表示申请一个资源 V(S)表示释放一个资源。信号量的初值应
该大于等于0
2) P.V操作必须成对出现,有一个P操作就 一定有一个V操作
当为互斥操作时,它们同处于同一进程 当为同步操作时,则不在同一进程中出 现.
用P、V操作解决进程间互斥问题
P1
P(mutex) V(mutex) 互斥区
P2
P(mutex) V(mutex)
P3 P(mutex) V(mutex)
互斥例子
三个进程共用两个I/O缓冲区。 解:设用信号量S表示共享资源,S初始值为
2
例:用信号量及P、V原语实现两个并发进程Pa和Pb互 斥。两进程都想进入临界区S。
如果P(S1)和P(S2)两个操作在一起,那 么P操作的顺序至关重要,一个同步P操作 与一个互斥P操作在一起时同步P操作在 互斥P操作前 而两个V操作无关紧要
3)P.V操作的优缺点 优点:
简单,而且表达能力强(用P.V操作可解决 任何同步互斥问题)
进程互斥与同步
互斥-信号量机制
1965年由荷兰的Dijkstra提出 信号量( semaphore ) 是一种软件不忙等待法 信号量机制的类型
– 经典信号量(忙等待) – 记录型信号量(使用不当可能会造成死锁)
– 信号量集(资源利用率低)
记录型信号量的定义
数据结构 typedef struct semaphore { int value; PCB * P; } S; //定义信号量的结构体及变量S
哲学家进餐问题(2/4)
一种解法 struct semaphore chopstick[5]={1,1,1,1,1}; 第i个哲学家的并发程序为 while ( 1 ){ think() ; P ( chopstick[i] ); //想拿左边的叉子 P ( chopstick[ (i+1) mod 5] ); //想拿右边的叉子 eat () ; V ( chopstick[i] ); //放下左边的叉子 V ( chopstick[ (i+1) mod 5] ); //放下右边的叉子 }
P-V操作原语
P(S)操作原语 void P( struct semaphore S ) { S.value --; if ( S.value < 0 ) block( S.P); //阻塞调用进程,在S.P中排队
}
P操作的主要动作: ①s值减1; ②若相减结果>=0,则进程继续执行; ③若相减结果<0,则进程被封锁,并将它插入到该信号灯 的等待队列之中,然后转进程调度程序。
P1 P2 P3 . Pk. C1
0
1
2
…
….
…
…
n-1
C2 C3 .
操作系统的进程同步与互斥
操作系统的进程同步与互斥操作系统是计算机系统中最核心的组成部分之一,它负责管理计算机资源和协调各个应用程序的执行。
在多任务处理的环境下,不同的进程可能会同时访问共享资源,为了保证数据的一致性和避免竞争条件的出现,操作系统引入了进程同步与互斥机制。
本文将深入探讨操作系统中进程同步与互斥的原理和实现方式。
一、进程的概念和特点进程是操作系统中的基本执行单元,它是一个正在执行中的程序的实例。
进程是临时的,动态的,具有独立的内存空间和执行环境,通过操作系统的调度器来进行管理和调度。
每个进程都有自己的执行序列,独立的内存空间和上下文环境。
进程的特点包括:并发性、独立性、异步性和共享性。
并发性指的是多个进程可以同时存在于内存中,并且可以以任意的次序进行执行。
独立性体现在每个进程都拥有独立的执行序列和内存空间,彼此之间不会相互影响。
异步性是指进程的执行是由操作系统的调度器决定的,进程之间的执行顺序是不可预测的。
共享性是指多个进程可以同时访问和共享系统资源。
二、进程同步的概念和原因进程同步是指进程之间按照一定的规定,按照一定的次序来访问和使用共享资源的过程。
在多个进程同时访问共享资源的情况下,如果没有进行进程同步,就会导致数据的不一致性和竞争条件的发生。
因此,进程同步是操作系统必须解决的一个重要问题。
进程同步的原因主要有以下几点:互斥访问资源、合作共享资源、数据的一致性和死锁的避免。
互斥访问资源是指多个进程需要对共享资源进行访问时,要求只有一个进程可以访问该资源,其他进程必须等待。
合作共享资源是指多个进程之间需要协同工作,共同完成某个任务,如生产者-消费者问题。
数据的一致性要求多个进程在访问和修改数据时能够保持数据的正确性和完整性。
死锁是指进程之间因为争夺资源而相互等待,导致系统无法继续运行。
三、进程同步与互斥的实现方式为了实现进程同步与互斥,操作系统提供了一些机制和算法。
其中比较常用的有:临界区、互斥量、信号量和条件变量。
进程互斥与同步
进程互斥与同步两个或多个进程读写⼀些共享数据(⼀般是驻内存或共享⽂件),最终的结果取决于当时运⾏的是哪个程序,这种场景被称为竞态条件为了避免竞态条件,最关键的处理就是在同⼀个时间内,只允许⼀个进程使⽤共享数据(共享内存,共享⽂件或者其他的贡献的东西),通常来说就是互斥。
根据互斥的解决⽅案,设计了⼀系列关于操作系统同步的⽅案互斥互斥⽅案在现⾏的解决⽅案中,主要分为软件和硬件两种⽅案。
软件⽅案主要是Peterson算法,硬件⽅案主要是TSL指令Peterson算法Peterson算法的主要代码结构如下#define FALSE 0#define TRUE 1#define N 2 /* 进程数量 */int turn; /* 谁的轮次 */int interested[N]; /* 所有变量初始化为0 */void enter_region(int process) { /* 进程是0或者1 */int other;other = 1 - process; /* 其他进程的数量,跟进程是相反数 */interested[process] = TRUE; /* 表明正在运⾏ */turn = process; /* 标记运⾏的进程 */while(turn == process && interested[other] == TRUE); /* 循环 */}void leave_region(int process) {interested[process] = FALSE;}主要解决了两个进程之间互斥的问题,⽤⼀个turn变量来表明是谁的轮次。
在使⽤共享变量(即进⼊其临界区)之前,各个进程使⽤其进程号0或1作为参数来调⽤enter_region。
该调⽤在需要时将使进程等待,直到能安全地进⼊临界区。
在完成对共享变量的操作之后,进程将调⽤leave_region,表⽰操作已完成,若其他的进程希望进⼊临界区,则现在就可以进⼊。
互斥与同步关系
互斥与同步关系在计算机科学领域中,互斥与同步是非常重要的概念,它们对于多线程编程和并发控制起着至关重要的作用。
互斥和同步关系是为了解决多个线程或进程之间的资源竞争和协同工作的问题。
互斥是指在同一时间内,只允许一个线程或进程访问共享资源。
当一个线程进入临界区,其他线程必须等待,直到该线程退出临界区才能进入。
互斥机制的目的是确保在任何时刻只有一个线程可以访问共享资源,从而避免数据的不一致性和竞态条件的发生。
互斥机制有多种实现方式,其中最常见的是使用互斥锁。
互斥锁是一种同步原语,它提供了两个基本操作:锁定和解锁。
当一个线程想要访问共享资源时,它必须先获取互斥锁,其他线程则必须等待。
一旦线程完成了对共享资源的访问,它就释放互斥锁,其他线程便可以获取锁并进入临界区。
互斥锁的使用可以有效地避免多个线程同时访问共享资源而导致的数据冲突和错误。
与互斥不同,同步是指多个线程或进程之间按照一定的顺序和时间进行协调和合作。
在多线程编程中,同步机制可以确保线程按照一定的顺序执行,避免出现数据竞争和不一致的情况。
同步机制有多种实现方式,其中最常见的是使用信号量。
信号量是一种计数器,用于控制对共享资源的访问。
当一个线程需要访问共享资源时,它必须先获取信号量,如果信号量的计数器大于0,则线程可以继续执行;否则,线程将被阻塞直到信号量计数器大于0。
当线程完成对共享资源的访问后,它必须释放信号量,使得其他线程可以获取信号量并继续执行。
除了互斥锁和信号量,还有其他的同步机制,如条件变量、屏障和互斥量等。
这些机制可以根据具体的需求和应用场景进行选择和使用。
互斥与同步关系密切相关,它们共同构成了多线程编程和并发控制的基础。
互斥机制用于保护共享资源,确保在任何时刻只有一个线程可以访问资源;而同步机制用于协调多个线程的执行顺序,避免数据竞争和不一致的情况。
互斥和同步是为了保证程序的正确性和可靠性,是并发编程中必不可少的概念。
互斥和同步关系是多线程编程和并发控制中的重要概念。
进程的互斥与同步
进程的互斥与同步=问题---采用多道程序设计技术的操作系统,允许多个进程同时驻留内存并发执行。
---如何协调多个进程对系统资源,如内存空间、外部设备等的竞争和共享?---如何解决多个进程因为竞争资源而出现执行结果异常,甚至导致系统不稳定,失效等问题?---例如,多个进程同时申请文件打印,如何有效分配打印机?=并发控制+竞争资源---当并发进程竞争使用同一资源时,他们之间就会发生冲突。
---如果操作系统把资源分配给其中某个进程使用,另一个进程就必须等待,直到申请的资源可用时,由操作系统分配给他。
---如果竞争某资源的进程太多,这些进程还必须等待在一个队列中,如就绪队列,阻塞队列等。
---一种极端的情况是,被阻塞的进程永久的不到申请资源,而死锁。
---进程竞争资源首先必须解决“互斥”问题。
某些资源必须互斥使用,如打印机、共享变量、表格、文件等。
---这类资源又称为临界资源,访问临界资源的那段代码称为临界区。
---任何时刻,只允许一个进程进入临界区,以此实现进程对临界资源的互斥访问。
=互斥使用临界资源---当进程需要使用临界资源时,通过获得临界区的使用权实现的。
---首先,在“进入区”判断是否可以进入临界区,如果可以进入,则必须设置临界区使用标志,阻止后来的其他进程进入临界区。
后来的进程通过查看临界区使用标识,知道自己不能进入临界区,就进入阻塞队列将自己阻塞。
---当临界区内的进程使用完毕,退出临界区时,即在“退出区”修改临界区使用标志,并负责唤醒阻塞队列中的一个进程,让其进入临界区。
---由于一个临界资源在多个共享它的进程中将对应多个临界区,那么怎样才能保证诸进程间互斥的执行临界区呢?---这就必须保证“临界区使用标志”是可被系统中的所有进程共享的全局变量,而且诸进程对该标志的修改操作必须互斥进行。
=临界区使用原则(也称为互斥条件)---每次只允许一个进程进入临界区(忙则等待)---进程只能在临界区逗留有限时间,不得使其他进程在临界区外无限等待(有限等待)---如果临界区空闲,则只要有进程申请就立即让其进入(空闲让进)---进入临界区的进程,不能在临界区内长时间阻塞等待某事件,必须在一定期限内退出临界区(让权等待)---不得限制进程的执行进度及处理机的数量。
进程同步的方法
进程同步的方法
进程同步指的是在多个进程间实现互斥、协作和同步执行的方法。
以下是常见的几种进程同步方法:
1. 互斥锁
互斥锁是最常用的进程同步方法之一,在程序中通过加锁和解锁
来控制对共享资源的访问。
当一个进程已经持有了互斥锁时,其他进
程就需要等待锁被释放后才能获得锁。
互斥锁可以避免多个进程同时
修改同一个共享资源导致数据的混乱。
2. 信号量
信号量是一种计数器,用于控制对共享资源的访问。
当一个进程
需要使用共享资源时,它会尝试获得信号量,如果信号量的值大于零,则进程可以获得资源,并将信号量的值减一,表示该进程占用了一个
资源。
当进程使用完共享资源后,它会将信号量的值加一,表示释放
了该资源,其他进程则可以继续使用。
3. 事件
事件是一种进程同步方法,用于在多个进程间实现协作和同步执行。
它是一种对信号的扩展,可以用来通知进程发生了某个事件。
当
一个进程需要等待某个事件发生时,它会阻塞等待,直到事件触发后
才被唤醒继续执行。
4. 管程
管程是一种高级的进程同步方法,用于更为复杂的共享资源管理和多进程协作。
它是一种抽象的程序设计模型,其中包含了一组共享数据结构和一组操作这些数据结构的过程。
管程通过提供一些原始操作(如发送信号、等待事件等)来保证多个进程之间的正确协作和同步执行。
以上是常见的几种进程同步方法,应根据具体场景和需求选择合适的方法。
在编写程序时,应遵循好的编程习惯,充分测试程序,避免出现死锁等问题,以确保程序的正确性和稳定性。
进程互斥与同步
进程互斥与同步
1、并发与并⾏是两个既相似⽽⼜不相同的概念:
并发性,⼜称共⾏性,是指能处理多个同时性活动的能⼒;
并⾏是指同时发⽣的两个并发事件,具有并发的含义,⽽并发则不⼀定并⾏,也亦是说并发事件之间不⼀定要同⼀时刻发⽣。
两者区别:⼀个是交替执⾏,⼀个是同时执⾏.
2、进程之间存在同步和互斥两种关系
同步是因合作进程之间协调彼此的⼯作⽽控制⾃⼰的执⾏速度,即因相互合作,相互等待⽽产⽣的制约关系。
⽽互斥是进程之间竞争临界资源⽽禁⽌两个以上的进程同时进⼊临界区所发⽣的制约关系。
3、互斥指的是某种资源⼀次只允许⼀个进程使⽤,即在你使⽤的时候我不能⽤,我使⽤是时候你不能⽤,这是⼀种协调⼀种同步
4、如果在⼀个进程集合中的每个进程都在等待只能由该集合中的其他进程才能引发的事件,⽽⽆限期僵持的局⾯称死锁。
⼀个可运⾏进程由于其他进程总是优先于它,⽽被⽆限期拖,延⽽不能被执⾏的现象称饥饿。
死锁进程必然处于饥饿状态,但处于饥饿状态的进程未必陷⼊死锁。
5、每个进程中访问临界资源的那段程序称为临界区,每次只准许⼀个进程进⼊临界区,进⼊后不允许其他进程进⼊。
如果有若⼲进程要求进⼊空闲的临界区,⼀次仅允许⼀个进程进⼊。
任何时候,处于临界区内的进程不可多于⼀个。
如已有进程进⼊⾃⼰的临界区,则其它所有试图进⼊临界区的进程必须等待。
进⼊临界区的进程要在有限时间内退出,以便其它进程能及时进⼊⾃⼰的临界区。
如果进程不能进⼊⾃⼰的临界区,则应让出CPU,避免进程出现“忙等”现象。
《进程同步与互斥》课件
消息传递的方式
包括发送和接收消息,以 及处理消息队列。
消息传递的作用
通过发送和接收消息,进 程可以交换信息,协调彼 此的行为,实现进程同步 。
共享内存机制
共享内存定义
多个进程共享同一块内存区域,通过 该区域进行通信。
共享内存的访问规则
共享内存的作用
通过共享内存,进程可以直接读写共 享数据,实现快速的数据交换和同步 。
学家都能进餐。这需要使用同步和互斥机制来控制哲学家进程的执行顺序。
05
进程同步与互斥的案例分析
基于信号量的进程同步案例
总结词
通过使用信号量作为同步机制,实现多个进程对 共享资源的正确访问。
总结词
通过使用信号量来控制进程的执行顺序,保证某 些进程必须先于其他进程执行。
详细描述
一个经典案例是生产者-消费者问题,其中生产者 和消费者共享一个有限的缓冲区。使用信号量来 控制生产者和消费者对缓冲区的访问,确保不会 发生溢出或饥饿现象。
哲学家就餐问题
总结词
哲学家就餐问题是进程同步与互斥问题中的一种经典问题,涉及到五个哲学家围坐在圆 桌旁,思考和进餐的哲学行为。
详细描述
哲学家就餐问题描述了一个场景,其中五个哲学家围坐在圆桌旁,他们有时思考,有时 进餐。餐桌中央有一盘意大利面,每位哲学家之间有一只叉子。如果一个哲学家要进餐 ,他需要同时拿起左右两只叉子。为了防止产生死锁,需要设计一种策略来确保所有哲
读者写者问题
总结词
读者写者问题是另一个经典的进程同步与互 斥问题,涉及到多个读者进程和写者进程对 共享资源的访问。
详细描述
读者写者问题描述了一个场景,其中多个读 者进程可以同时访问共享资源,但写者进程 在修改共享资源时需要独占式的访问。为了 维护数据的一致性和完整性,需要使用同步 和互斥机制来控制读者和写者进程的访问顺 序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
进程的同步与互斥
1. 同步:是进程间共同完成一项任务时直接发生相互作用的关系。
2. 互斥:排它性访问即竞争同一个物理资源而相互制约。
l 什么是临界资源、临界区?
1. 临界资源:一次仅允许一个进程使用的资源。
2. 临界区:在每个进程中访问临界资源的那段程序。
3. 互斥进入临界区的准则:
1) 如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。
2) 任何时候,处于临界区内的进程不可多于一个。
如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。
3) 进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。
4) 如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。
l 信号量
1. 信号量定义:
信号量(信号灯)=<信号量的值,指向PCB的指针>
2. 信号量的物理意义:
大于0:表示当前资源可用数量
1) 信号量的值
小于0:其绝对值表示等待使用该资源的进程个数
2) 信号量初值为非负的整数变量,代表资源数。
3) 信号量值可变,但仅能由P、V操作来改变。
l P,V操作原语
1. P操作原语P(S) :
1) P操作一次,S值减1,即S=S-1(请求分配一资源);
2) 如果S≥0,则该进程继续执行;
如果S<0表示无资源,则该进程的状态置为阻塞态,把相应的PCB连入该信号量队列的末尾,并放弃处理机,进行等待(直至另一个进程执行V(S)操作)。
2. V操作原语(荷兰语的等待)V(S) :
1) V操作一次,S值加1,即S=S+1(释放一单位量资源);
2) 如果S>0,表示有资源,则该进程继续执行;
如果S≤0,则释放信号量队列上的第一个PCB所对应的进程(阻塞态改为就绪态),执行V操作的进程继续执行。
l 进程间简单同步与互斥的实现
1. 用P,V原语实现互斥的一般模型:
设互斥信号量mutex初值为1
2. 用P、V原语操作实现简单同步的例子
供者和用者对缓冲区的使用关系如下图:
S1缓冲区是否空(0表示不空,1表示空),初值S1=0;
S2缓冲区是否满(0表示不满,1表示满),初值S2=0;
3. 生产者---消费者问题(OS典型例子)
mutex互斥信号量,初值为1;full满缓冲区数,初值为0;empty空缓冲区数,初值为N;
4. 应用举例
[例1] 设系统中只有一台打印机,有三个用户的程序在执行过程中都要使用打印机输出计算结果。
设每个用户程序对应一个进程。
问:这三个进程间有什么样的制约关系?使用P、V操作写出这些进程使用打印机的算法。
[解]
由于打印机是一种临界资源,故三个进程只能互斥使用这台打印机。
设三个进程分别为PA、PB和PC,互斥信号量mutex初值为1,执行过程如下:
[例2] 判断下面的同步问题的算法是否正确?若有错,请指出错误原因并予以改正。
1)设A、B两进程共用一个缓冲区Q,A向Q写入信息,B则从Q读出信息,算法框图如图所示。
注:信号量S的初值为0
[解] 该算法不正确。
因为A、B两个进程共用一个缓冲区Q,如果A先运行,且信息数量足够多,则缓冲区Q中的信息就会发生后面的冲掉前面的,造成信息丢失,B就不能从Q 中读出完整的信息。
改正如下:
A、B两进程同步使用缓冲区Q,应设定两个信号量:
empty 表示缓冲区Q为空,初值为1;full表示缓冲区Q已满,初值为0
算法框图如下:
2)设A、B为两个并发进程,它们共享一临界资源。
其运行临界区的算法框图如图所示。
[解] 该算法不正确。
因为A、B两个进程并发执行,且共享一临界资源,故A、B应互斥地使用该临界资源,即在某一时刻只允许一个进程进入该临界资源,无时序关系。
改正算法:A、B二进程应互斥进入临界区,设定一信号量mutex,初值为1。
[例2] 设有一台计算机,有两个I/O通道,分别接一台卡片输入机和一台打印机。
卡片机把一叠卡片逐一输入到缓冲区B1中,加工处理后再搬到缓冲区B2中,并在打印机上印出,问:
1) 系统要设几个进程来完成这个任务?各自的工作是什么?
2) 这些进程间有什么样的相互制约关系?
3) 用P、V操作写出这些进程的同步算法。
[解]
1) 系统可设三个进程来完成该任务:Read进程负责从卡片输入机上读入卡片信息,输入到缓冲区B1中;Get进程负责从缓冲区B1中取出信息,进行加工处理,之后将结果送到缓冲区B2中;Print进程负责从缓冲区B2中取出信息,并在打印机上打印输出。
2) 操作过程:
? Read进程受Get进程的影响,B1缓冲区中放满信息后Read进程要等待get 进程将其中信息全部取走后才能读入信息;
? Get进程受Read进程和Print进程的约束:B1缓冲区中信息放满后,Get
进程才可从中取走信息,且B2缓冲区信息被取空后Get进程才能将加工结果送入其中;
? Print进程受Get进程的约束,B2缓冲区中信息放满后Print进程方可取出信息进行打印输出。
3) 信号量的含义及初值:
? B1full——缓冲区B1满,初值为0
? B1empty——缓冲区B1空,初值为0
? B2full——缓冲区B2满,初值为0
? B2empty——缓冲区B2空,初值为0。