APP开发程序运行环境的进程互斥与同步的工作原理,进程互斥定义为:一组并发进程中一个或多个程序段,因共享某一共有资源而导致必须以一个不允许交叉执行的单位执行。也就是说互斥是要保证临界资源在某一时刻只被一个进程访问。APP开发公司理解进程同步定义为:把异步环境下的一组并发进程因直接制约而互相发送消息而进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程同步。也就是说进程之间是异步执行的,同步即是使各进程按一定的制约顺序和速度执行。
博纳网络APP开发资深工程师提示:简单一点来说,互斥是资源的竞争关系,而同步是进程间的协作关系。
系统中有些资源可以供多个进程同时使用,有些资源则一次仅允许一个进程使用,将一次仅允许一个进程使用的资源称为临界资源,很多物理设备如打印
机、磁带机等都属于临界资源,某些软件的变量、数据、表格也不允许两个进程同时使用,所以也是临界资源。
进程在并发执行中可以共享系统中的资源。但是临界资源的访问则必须互斥进行,即各进程对临界资源进行操作的那段程序的执行也必须是互斥的,只有这样才能保证对临界资源的互斥访问。把一个进程访问临界资源的那段程序代码称为临界区,有了临界区的概念,进程间的互斥就可以描述为:禁止两个或两个以上的进程同时进入访问同一临界资源的临界区。为此,必须有专门的同步机构来协调它们,协调准则如下:
(1)空闲让进。无进程处于临界区时,若有进程要求进入临界区则立即允许其进入;
(2)忙则等待。当已有进程进入其临界区时,其他试图进入各自临界区的进程必须等待,以保证诸进程互斥地进入临界区;
(3)有限等待。有若干进程要求进入临界区时,应在有限时间内使一进程进入临界区,即它们不应相互等待而谁也不进入临界区;
(4)让权等待。对于等待进入临界区的进程必须释放其占有的CPU。
信号量可以有效地实现进程的同步和互斥。在操作系统中,信号量是一个整数。当信号量大于等于o时,代表可供并发进程使用的资源实体数,当信号量小于零时则表示正在等待使用临界区的进程数。建立一个信号量必须说明所建信号量代表的意义和设置初值,以及建立相应的数据结构,以便指向那些等待使用该临界区的进程。
对信号量只能施加特殊的操作:P操作和V操作。P操作和V操作都是不可分割的原子操作,也称为原语。因此,Р原语和V原语执行期间不允许中断发生。
P (sem)操作的过程是将信号量sem值减l,若sem的值成负数,则调用P操作的进程暂停执行,直到另一个进程对同一信号量做V操作。V (sem)操作的过程是将信号量sem值加1,若sem的值小于等于o,从相应队列(与sem有关的队列)中选一个进程,唤醒它。
一般P操作与V操作的定义如下所述。P操作:
P{sem}i
sem=sem - 1;
if {sem < o}进程进入等待状态;else 继续进行;}
V操作:
v {sem}{sem=sem + 1;
if {sem ≤ o}唤醒队列中的一个等待进程;else继续进行;}
为了保护共享资源(如公共变量),使它们不被多个进程同时访问,就要阻止这些进程同时执行访问这些资源(临界资源)的代码段(临界区)﹔进程互斥不允许两个以上共享临界资源的并发进程同时进入临界区。利用P、V原语和信号量可以方便地解决并发进程对临界区的进程互斥问题。
设信号量mutex是用于互斥的信号量,初值为1,表示没有并发进程使用该临界区。于是各并发进程的临界区可改写成下列形式的代码段:
P( mutex) ;
临界区v (mutex) ;
要用P,V操作实现进程同步,需要引进私用信号量。私用信号量只与制约进程和被制约进程有关,而不是与整组并发进程相关。与此相对,进程互斥使用的信号量为公用信号量。首先为各并发进程设置私用信号量,然后为私用信号量赋初值,最后利用P,V原语和私用信号量规定各进程的执行顺序。
经典同步问题的例子是“生产者一消费者”问题。这要求存后再取,取后再存,即有两个制约关系,为此,需要两个信号量,表示缓冲区中的空单元数和非空单元数,记为Bufempty和Buffull,它们的初值分别是1和o,相应的程序段形式是:
生产者loop
生产一产品next;P(Bufempty) ;
next产品存缓冲区;V(Buffull) ;
endloop
消费者loop
(Buffulll) ;V ( Bufempty) ;从缓冲区中取产品;使用产品
endloop5.前趋图
前趋图是一个由结点和有向边构成的有向无循环图。该图通常用于表现事务之间先后顺序的制约关系。图中的每个结点可以表示一个语句、一个程序段或是一个进程,结点间的有向边表示两个结点之间存在的前趋关系。
例:在计算机中,经常采用流水线方式执行指令,每一条指令都可以分解为取指、分析和执行三步。取指操作为Ai,分析操作为Bi和执行操作为Ci(i=1,2,3)。
如图2-4所示为三个任务各程序段并发执行的前驱图。
图中Ay没有前趋结点,称为开始结点,它不受任何制约,可以直接执行;而
B与A2只能在A执行完成之后才能开始,而B,必须在B1与A,完成之后才能开始;C没有后继结点,称为终止结点。
在前趋图中,执行先后顺序的制约关系可分为两种:直接制约和间接制约。直接制约通常是指一个操作中,多个步骤之间的制约关系,也可以说是“同步的进程之间的制约关系”。如图2-4所示,A、B,、C,是一条指令的取指、分析、执行的三个步骤,所以它们之间的关系是直接制约。
间接制约通常是指多个操作之间相同步骤的制约关系,也可以说是“互斥的进程之间的制约关系”。如图2-4所示,A、A、A之间就存在间接制约的关系。
前趋图的应用广泛,在项目开发中,可用前趋图来分析哪些活动可以并行完成。同时项目管理工具:Pert图,单(双)代号网络图等都融入了前趋图的思想。好了,
深圳APP开发公司本文关于“程序运行环境的进程互斥与同步的工作原理”的APP项目开发前期工作经验就分享到这里,谢谢关注,博纳网络编辑整理。