完成临界区互斥的根本办法

软件完成办法

在进入区设置和反省一些标记来标明能否有过程在临界区中,假如已有过程在临界区,则在进入区经过轮回反省停止等候,过程分开临界区后则在加入区修正标记。

1) 算法一:单标记法。

该算法设置一个公用整型变量turn,用于指导被许可进入临界区的过程编号,即若turn=0,则许可P0过程进入临界区。该算法可确保每次只许可一个过程进入临界区。但两个过程必需瓜代进入临界区,假如某个过程不再进入临界区了,那么另一个过程也将进入临界区(违犯“闲暇让进”)如许很轻易形成资本应用的不充沛。

					// P0过程 while(turn!=0); critical section; turn=1; remainder section;
					// P1过程 while(turn!=1); // 进入区 critical section; // 临界区 turn = 0; // 加入区 remainder section; // 残剩区

2) 算法二:双标记法先反省。

该算法的根本思惟是在每个过程拜访临界区资本之前,先检查一下临界资本能否正被拜访,若正被拜访,该过程需等候;不然,过程才进入本人的临界区。为此,设置了一个数据flag[i],如第i个元素值为FALSE,表现Pi过程未进入临界区,值为TRUE,表现Pi过程进入临界区。

					// Pi 过程 while(flag[j]); // ①  flag[i]=TRUE; // ③  critical section; flag[i] = FALSE; remainder section;
					// Pj 过程 while(flag[i]); // ② 进入区 flag[j] =TRUE; // ④ 进入区 critical section; // 临界区 flag[j] = FALSE; // 加入区 remainder section; // 残剩区

长处:不必瓜代进入,可延续运用;缺陷:Pi和Pj能够同时进入临界区。顺次列①②③④ 履行时,会同时进入临界区(违犯“忙则等候”)。即在反省对方flag之后和切换本人flag 之前有一段工夫,后果都反省经过。这里的成绩出在反省和修正操作不克不及一次停止。

3) 算法三:双标记法后反省。

算法二是先检测对方过程形态标记后,再置本人标记,因为在检测和放置中可拔出另一个过程抵达时的检测操作,会形成两个过程在辨别检测后,同时进入临界区。为此,算法三釆用先设置本人标记为TRUE后,再检测对方形态标记,若对方标记为TURE,则过程等候;不然进入临界区。

					// Pi过程 flag[i] =TRUE; while(flag[j]); critical section; flag[i] =FLASE; remainder section;
					// Pj过程 flag[j] =TRUE; // 进入区 while(flag[i]); // 进入区 critical section; // 临界区 flag [j] =FLASE; // 加入区 remainder section; // 残剩区

当两个过程简直同时都想进入临界区时,它们辨别将本人的标记值flag设置为TRUE,而且同时检测对方的形态(履行while语句),发现对方也要进入临界区,于是单方相互辞让,后果谁也进不了临界区,从而招致“饥饿”景象。

4)算法四:Peterson’s Algorithm。

为了避免两个过程为进入临界区而有限期等候,又设置变量turn,指导不许可进入临界区的过程编号,每一个过程在先设置本人标记后再设置turn 标记,不许可另一个过程进入。这时,再同时检测另一个过程形态标记和不许可进入标记,如许可以包管当两个过程同时请求进入临界区,只许可一个过程进入临界区。

					// Pi过程 flag[i]=TURE; turn=j; while(flag[j]&&turn==j); critical section; flag[i]=FLASE; remainder section;
					// Pj过程 flag[j] =TRUE;turn=i; // 进入区 while(flag[i]&&turn==i); // 进入区 critical section; // 临界区 flag[j]=FLASE; // 加入区 remainder section; // 残剩区

本算法的根本思惟是算法一和算法三的联合。应用flag处理临界资本的互斥拜访,而应用turn处理“饥饿”景象。

硬件完成办法

本节对硬件完成的详细了解对前面的旌旗灯号量的进修很有协助。盘算机供给了特别的硬件指令,许可对一个字中的内容停止检测和修改,或许是对两个字的内容停止交流等。经过硬件支撑完成临界段成绩的初级办法或称为元办法。

1) 中缀屏障办法

当一个过程正在运用处置机履行它的临界区代码时,要避免其他过程再进入其临界区拜访的最复杂办法是制止一切中缀发作,或称之为屏障中缀、关中缀。由于CPU只在发作中缀时惹起过程切换,如许屏障中缀就能包管以后运转过程将临界区代码顺遂地履行完,从而包管了互斥的准确完成,然后再履行开中缀。其典型形式为:

关中缀;
临界区;
开中缀;

这种办法限制了处置机瓜代履行程序的才能,因而履行的效力将会分明下降。对内核来说,当它履行更新变量或列表的几条指令时期关中缀是很便利的,但将关中缀的权利交给用户则很不明智,若一个过程关中缀之后不再开中缀,则零碎能够会因而终止。

2) 硬件指令办法

TestAndSet指令:这条指令是原子操作,即履行该代码时不许可被中缀。其功用是读出指定标记后把该标记设置为真。指令的功用描绘如下:

			boolean TestAndSet(boolean *lock){ boolean old; old = *lock; *lock=true; return old; }

可认为每一个临界资本设置一个共享布尔变量lock,表现资本的两种形态:true表现正被占用,初值为false。在过程拜访临界资本之前,应用TestAndSet反省和修正标记lock;如有过程在临界区,则反复反省,直到过程加入。应用该指令完成过程互斥的算法描绘如下:

			while TestAndSet (& 1 ock); // 过程的临界区代码段; lock=false; // 过程的其他代码

Swap指令:该指令的功用是交流两个字节的内容。其功用描绘如下。

			Swap(boolean *a, boolean *b){ boolean temp; Temp=*a; *a = *b; *b = temp; }

留意:以上对TestAndSet和Swap指令的描绘仅仅是功用完成,并非软件完成界说,现实上它们是由硬件逻辑直接完成的,不会被中缀。
应为每一个临界资本设置了一个共享布尔变量lock,初值为false;在每一个过程中再设置一个部分布尔变量key,用于与lock交流信息。在进入临界区之前先应用Swap指令交流lock 与key的内容,然后反省key的形态;有过程在临界区时,反复交流和反省进程,直到过程加入。应用Swap指令完成过程互斥的算法描绘如下:

			key=true; while(key!=false) Swap(&lock, &key); // 过程的临界区代码段; lock=false; // 过程的其他代码;

硬件办法的长处:实用于恣意数量的过程,不论是单处置机照样多处置机;复杂、轻易验证其准确性。可以支撑过程内有多个临界区,只需为每一个临界区设立一个布尔变量。
硬件办法的缺陷:过程等候进入临界区时要消耗处置机工夫,不克不及完成让权等候。从等候过程中随机选择一个进入临界区,有的过程能够不断选不上,从而招致“饥饿”景象。

时间: 2024-11-15 03:44:42

完成临界区互斥的根本办法的相关文章

操作系统--进程同步和互斥的概念

简介 进程同步是一个操作系统级别的概念,是在多道程序的环境下,存在着不同的制约关系,为了协调这种互相制约的关系,实现资源共享和进程协作,从而避免进程之间的冲突,引入了进程同步. 临界资源 在操作系统中,进程是占有资源的最小单位(线程可以访问其所在进程内的所有资源,但线程本身并不占有资源或仅仅占有一点必须资源).但对于某些资源来说,其在同一时间只能被一个进程所占用.这些一次只能被一个进程所占用的资源就是所谓的临界资源.典型的临界资源比如物理上的打印机,或是存在硬盘或内存中被多个进程所共享的一些变量

旌旗灯号量:整型、记载型旌旗灯号量以及应用旌旗灯号量完成过程互斥和前驱关系

旌旗灯号量机构是一种功用较强的机制,可用来处理互斥与同步的成绩,它只能被两个规范的原语wait(S)和signal(S)来拜访,也可以记为"P操作"和"V操作".原语是指完成某种功用且不被联系不被中缀履行的操作序列,平日可由硬件来完成完成不被联系履行特征的功用.如前述的"Test-and-Set"和"Swap"指令,就是由硬件完成的原子操作.原语功用的不被中缀履行特征在单处置机时可由软件经过屏障中缀办法完成.原语之所以不克不及

操作系统原理---操作系统中进程同步和互斥的概念

简介 进程同步是一个操作系统级别的概念,是在多道程序的环境下,存在着不同的制约关系,为了协调这种互相制约的关系,实现资源共享和进程协作,从而避免进程之间的冲突,引入了进程同步. 临界资源 在操作系统中,进程是占有资源的最小单位(线程可以访问其所在进程内的所有资源,但线程本身并不占有资源或仅仅占有一点必须资源).但对于某些资源来说,其在同一时间只能被一个进程所占用.这些一次只能被一个进程所占用的资源就是所谓的临界资源.典型的临界资源比如物理上的打印机,或是存在硬盘或内存中被多个进程所共享的一些变量

计算机操作系统学习笔记_5_进程管理 -- 同步与互斥

h3.western { font-family: "Liberation Sans",sans-serif; }h3.cjk { font-family: "微软雅黑"; }h3.ctl { font-family: "AR PL UMing CN"; }h2.western { font-family: "Liberation Sans",sans-serif; font-size: 16pt; }h2.cjk { fon

基于请求的分布式互斥算法

一个悲剧的文章,研究的东西确实比较老,但是因为这些研究,让我对分布式的底层的关系有了更加清晰的认识,也算是不枉此功. 下面贴出来核心的部分. 引言 分布式系统中的一组进程可能会同时访问一个资源或者同时执行一个给定的函数,我们称这些资源或者函数为临界区(Critical Section),若不加控制的话,会造成资源或者环境的不一致的现象.保证任何给定时刻只允许一个进程或者给定的进程去执行临界区的算法称为互斥算法.互斥也可以称为并发控制. 这个问题最早由Dijkstra[1]在1965年提出.互斥可

进程管理(九)-进程互斥

进程管理(九)-进程互斥 临界区 什么是临界区 不允许多个并发进程交叉执行的一段程序称为临界部分(critical section )或临界区(critical region) 临界区不可能用增加硬件的方法来解决.因此,临界区也可以被称为访问公用数据的那段程序. 为什么要设置临界区 防止进程并发执行的时候,出现冲突,或者由于两个并发进程处于竞争状态,进而导致两者执行顺序不固定,导致程序执行出错. 例子 设计算进程PA,PB共享内存MS. MS分为系统区.进程工作区和数据区.数据区划分成大小相等的

线程同步方式比较

用户模式下的方法有:原子操作(例如一个单一的全局变量),临界区. 内核模式下的方法有:事件,信号量,互斥量. 临界区 保证在某一时刻只有一个线程能访问数据的简便办法.在任意时刻只允许一个线程对共享资源进行访问.如果有多个线程试图同时访问临界区,那么 在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开.临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操 作共享资源的目的. 仅能在同一进程内使用 互斥量 Mutex 互斥量跟临界区很相似,只有拥有互

Linux信号量实践(1)

进程的同步与互斥 顺序程序与并发程序特征 顺序程序 并发程序 顺序性 共享性 封闭性:(运行环境的封闭性) 并发性 确定性 随机性 可再现性 进程互斥 由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥. 系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源. 在进程中涉及到互斥资源的程序段叫临界区. 互斥示例 说明:如果此时票数X=1,A进程与B进程同时抢到临界资源X,都执行X--,则会出现X<0的情况,这种情况肯定是不

c++后台开发面试常见知识点总结(三)操作系统

静态链接库和动态链接库的区别 一个进程可以通过调用waitpid函数来等待它的子进程终止或者停止 Debug和Release的区别 临界区互斥量信号量事件进程互斥与同步 进程有哪几种状态,状态转换图,及导致转换的事件 进程由运行态进入就绪态和阻塞态的原因 进程切换 进程调度算法 死锁 哲学家就餐问题 linux运行时内存映像 通过虚拟地址访问内存的优势 缓存是数据交换的缓冲区(称为Cache) 线程访问某数据 无名管道  FIFO(命名管道)消息队列信号量信号共享内存 1.    静态链接库和动