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

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

临界区

什么是临界区

不允许多个并发进程交叉执行的一段程序称为临界部分(critical section )或临界区(critical region)

临界区不可能用增加硬件的方法来解决。因此,临界区也可以被称为访问公用数据的那段程序。

为什么要设置临界区

防止进程并发执行的时候,出现冲突,或者由于两个并发进程处于竞争状态,进而导致两者执行顺序不固定,导致程序执行出错。

例子

设计算进程PA,PB共享内存MS。 MS分为系统区、进程工作区和数据区。数据区划分成大小相等的块,每个块中既可能有数据,也有可能没有数据。系统区主要是堆栈S,存放空数据块的地址。

令getspace 为取空数据块过程,release(ad)为释放数据块过程。如果堆栈S非空的话,进程PA或PB可以任意顺序释放和获取数据块。在进程并发执行时,getspace或 release(ad)将有可能完不成所要求的功能

getspace: begin local g
g←stack[top]
top←top-1
end

release(ad): begin
top ← top+1
stack[top]←ad
end

设时刻t0时,top=h0

首先 release(ad)的第一句执行:
t0:top←top+1 top=h0+1;

接着getspace 执行:
t1:g←stack[top] g=stack[h0+1];
t2:top←top-1 top=h0;

再是 release(ad)的第二句执行:
t3:stack[top]←ad stack[h0+1]←ad;

调用getspace的进程取到的是h0+1中的一个未定义值;调用release(ad)的进程把释放的空块地址ad重复放入了h0。

间接制约

将那些不允许交叉执行的临界区按不同的公用数据划分为不同的集合。

上例中,以公用数据栈S划分的临界区集合是{getspace, release}。把这些集合称为类(class)

类的描述

设类 {getspace,release} 的类名为sp,getspace和release(ad)可重新描述为:

getspace:
when sp
   do
       getspce←stack[top]
        top←top-1
   od
release(ad):
when sp
   do
      top← top+1
      stack [top]← ad
   od

什么是间接制约

由共享公有资源而造成的对并发进程执行速度的间接制约,简称间接制约。

什么造成了间接制约

由于共享某一公有资源而引起的在临界区内不允许并发进程交叉执行的现象

互斥

什么是互斥

不允许两个以上的共享该资源的并发进程同时进入临界区称为互斥

纯过程

纯过程指在执行过程中不改变过程自身代码的一类过程。

纯过程的优缺点

优点:
把一个过程作成纯过程可便于多个进程共享

缺点:
但由于编制纯过程必须对有关变量和工作区作相应的处理,从而其执行效率往往会受到一定的影响

进程互斥要满足要求

1.各并发进程享有平等的、独立的竞争共有资源的权利,且在不采取任何措施的条件下,在临界区内任一指令结束时,其他并发进程可以进入临界区。
2.并发进程中的某个进程不在临界区时,它不阻止其他进程进入临界区
3.并发进程中的若干个进程申请进入临界区时,只能允许一个进程进入
4.并发进程中的某个进程申请进入临界区时开始,应在有限时间内得以进入临界区

互斥的实现方法

加锁

当某个进程进入临界区之后,它将锁上临界区,直到它退出临界区时为止。并发进程在申请进入临界区时,首先测试该临界区是否是上锁的。如果该临界区已被锁住,则该进程要等到该临界区开锁之后才有可能获得临界区

加锁产生的问题:
1.加锁的方法可以实现进程之间的互斥,但存在影响系统可靠性和执行效率的问题。

例如,如果一组并发进程数量较多,每个进程在申请进入临界区时都需要对锁定位进行测试。循环测试锁定位将损耗较多的 CPU计算时间。

2.使用加锁法实现进程间互斥时,还将导致在某些情况下出现不公平现象

产生原因:一个进程能否进入临界区依靠进程自己调用lock过程去测试相应的锁定位。每个进程能否进入临界区是依靠自己的测试判断!

信号量

提出

信号量的概念和下面所述的P、V原语是荷兰科学家E.W.Dijkstra提出来的

什么是信号量

信号量sem是一整数

1.sem大于等于零时代表可供并发进程使用的资源实体数;
2.sem小于零时表示正在等待使用临界区的进程数。
3.用于互斥的信号量sem的初值应该大于零

建立信号量的过程

建立一个信号量步骤如下:
1.说明所建信号量所代表的意义;
2.为信号量赋初值;
3.建立相应数据结构以便指向那些等待使用该临界区的进程。

PV原语

什么是PV原语

P和V分别是荷兰语 Passeren 和Verhoog 的首字母,相当于英文的pass和increment

sem是与临界区内所使用的公用资源有关的信号量。一次P原语操作使得信号量sem减1,而一次V原语操作将使得信号量sem加1。

V原语

V原语的操作主要动作是:
1.sem加1;
2.若相加结果大于零,进程继续执行;
3.若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度

P原语

1.sem加1;
2.若相加结果大于零,进程继续执行;
3.若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度

PV原语解决的问题

利用P,V原语和信号量,可以方便地解决并发进程的互斥问题,而且不会产生使用加锁法解决互斥问题时所出现的问题。

进程互斥PV原语的条件

利用P,V原语和信号量,可以方便地解决并发进程的互斥问题,而且不会产生使用加锁法解决互斥问题时所出现的问题。

PV原语描述进程互斥

设 sem为互斥信号量,其取值范围为(1,0,-1)。
sem=1表示进程PA和PB都未进入类名为S的临界区;
sem=0表示进程PA或PB已进入类名为S的临界区;
sem=-1表示进程PA和PB中,一个进程已进入临界区,而另一个进程等待进入临界区。

原文地址:https://www.cnblogs.com/mengxiaoleng/p/11619222.html

时间: 2024-11-08 11:50:44

进程管理(九)-进程互斥的相关文章

计算机操作系统学习笔记_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

进程管理(十)-进程通信

进程管理(十)-进程通信 什么是进程通信 通信(communication)意味着在进程间传送数据. 低级通信VS高级通信 控制信息的传送.进程间控制信息的交换称为低级通信. 大批量数据传送.进程间大批量数据的交换称为高级通信. 进程的通信的四种方式 主从式 特点: 1.主进程可自由地使用从进程的资源或数据 2.从进程的动作受主进程的控制 3.主进程和从进程的关系是固定的 例子:主从式通信系统的典型例子是终端控制进程和终端进程 会话式 会话方式中,通信进程双方可分别称为使用进程和服务进程.其中,

linux进程管理(5)---进程消亡

一.目的 本文将讲述进程是如何消亡的.一个进程既有父进程又有子进程,因此进程消亡时,既要通知父进程,也要安排好子进程. 当前进程消亡时主要做了三件大事:释放当前进程占用的资源:为当前进程的子进程重新寻找"养父":通知当前进程的父进程,释放当前进程剩下的资源. 当前进程释放掉大多数进程资源后,只保留内核栈.structtask_struct数据结构:剩下的资源由父进程负责释放. linux调用sys_exit().sys_wait4()实现进程的消亡,代码可以在kernel/exit.c

Linux c进程管理—创建进程 system、execl、execlp、fork

Linux c 进程管理:   1.      创建进程:        system函数:         int system(const char*filename);                                                  建立独立进程,拥有独立的代码空间,内存空间                                                  等待新的进程执行完毕,system才返回.(阻塞)          system:

进程管理(六)-进程的描述

进程管理(六)-进程的描述 进程控制块:进程的PCB 是系统感知进程的唯一实体 程序段:描述进程所要完成的功能 程序操作的数据集:程序在执行时必不可少的工作区和操作对象 PCB PCB是什么 PCB包含有关进程的描述信息.控制信息以及资源信息,是进程动态特征的集中反映. PCB作用 1.系统根据PCB感知进程的存在和通过PCB中所包含的各项变量的变化,掌握进程所处的状态以达到控制进程活动的目的. 2.一个进程的PCB结构都是全部或部分常驻内存的. PCB的生命周期 在创建一个进程时,首先创建其

Linux进程管理及进程管理工具的使用

Linux的进程管理 进程:简单来说就是一个运行中的程序的副本,是进程的一个实例,它是有生命周期的 进程的创建:进程都是由其父进程创建的,最开始的进程就是init. 进程优先级:0-139 实时优先级:1-99: 静态优先级:100-139,对于静态来说数字越小优先级越高, 优先级还有一个Nice值,值为-20(对应100),19(对应19),可以通过调整Nice值来调整优先级. 进程分为守护进程和前台进程,守护进程就是在系统引导过程中启动的进程,跟终端无关的进程:前台进程跟终端有关,通过终端启

linux下的进程管理(进程的基本了解及查看pstree,ps,pgrep命令)

Linux下的进程管理 1.什么是进程?程序是静态的文件进程是运行中的程序的一个副本进程存在生命周期(准备期,运行期,终止期)2.进程状态 状态 定义 R(TASK_RUNNING) . 可执行状态(RUNNING,READY)running:正在被处理 ready: 在排队, cpu处理进程个数有限 S(TASK_INTERRUPTIBLE) 可唤醒状态 :在cpu上使用的时间超时,此时被打入休眠状态,随着程序的调用会被唤醒 D(TASK_UNINTERRUPTIBLE) 不可唤醒状态 T(T

【进程管理】进程(线程)创建

本节主要研究进程(线程)创建的过程,下文将不区分进程和线程: 基本知识 在linux系统中,第一个进程是系统固有的,是由内核的设计者安排好的:一个新的进程一定要由一个已存在的进程复制出来,而不是创造出来的,其实linux系统并不提供直接创建进 程的方法:创建了子进程以后,父进程可以继续走自己的路,与子进程分道扬镳,但是如果子进程先行exit(),那么将要向父进程发一个信号:父进程也可以选择睡眠,等子进程 exit()以后再去世,然后父进程再继续执行,可使用wait3()某个特定的子进程,wait

UNIX环境编程学习笔记(18)——进程管理之进程控制三部曲

lienhua342014-10-05 1 进程控制三部曲概述 UNIX 系统提供了 fork.exec.exit 和 wait 等基本的进程控制原语.通过这些进程控制原语,我们即可完成对进程创建.执行和终止等基本操作.进程的控制可以划分为三部曲, • 第一部:fork 创建新进程. • 第二部:exec 执行新程序. • 第三部:exit 和 wait 处理终止和等待终止. 2 第一部:fork 创建新进程 在一个现有的进程中,我们可以通过调用 fork 函数来创建一个新进程, #includ