专注SIP通讯产品与方案

进程的同步

            引入进程的程控交换软件还应考虑进程的同步(Synchroniza-tion)和互斥(MutualExclusion)o各种程控交换系统由于中断机理、调度策略、资源分配方式等方面的差异,对同步和互斥的要求和实现方式也会有所不同。例如,S1240系统考虑了对SSM(系统支援机)内的共享数据的可靠存取,设置了临界区(CriticalRegion),并采用监控(Monitor)方式。原语ENTER_MONITOR(进入监控)可使运行进入监控方式,设置新的中断屏蔽字,使所有可屏蔽中断不能进入。原语EXIT一MONITOR(退出监控)则用来退出监控方式,恢复原有中断屏蔽字
DMS-100系统对进程的同步和互斥有较多的设施,以下作一介绍。
1.进程的同步
            在DMS—100系列中,同步是指对进程访问共享数据和申请共享的系统资源的同步,设置了号志和标志两种同步原语。
(1)号志
            DMS-100系统采用Dijkstra提出的号志概念,以保证对共享数据的有效存取。
①psema和vsema原语
            每个临界区可具有相应的号志。所谓临界区,是指在任一时刻只允许一个进程在执行的程序段,也可称为互斥段。
            每个进程要进入某临界区,必须先申请号志,调用过程psema:DCLpsemaPROC( sid semaid usertypesemauser UPDATES src semarc)
sid:与该临界区对应的号志识别码。
usertype:赋与用户进程的访问类别(读或写)。
src;指示号志是否可用的返回码。
            当进程离开临界区,要调用过程vsema以释放号志:DCLvsemaPROC( sid semaidUPDATES src semarc)
sid:调用psema时所指定的号志识别码。
src:返回码。
②号志状态
号志可具有以下3种状态:
(a)idle(空闲)
            没有进程在临界区执行。
(b)readersin(读)
            一个或多个进程在临界区执行以读出数据。
(c)writerin(写)
            一个且只能有一个进程在临界区执行以写入数据,了解也要读出数据。
③号志队列
            每个号志具有相应的队列,队列中是等待进入临界区的各个进程,采用先到来先服务(First一ComeFirst一Served一FCFS)的原则。当正进临界区执行的进程调用了vsema后,可从队列中取一个进程。可用时限来保证较短的等待时间,时限是从该进程排到队列之首时才起算。如超过时限,则“杀死”迟迟不离开临界区的进程,而使排在队首的进程进入临界区。
            要对数据写入的进程在申请号志时,如果号志状态为读或写,都不能进入临界区而要排入号志队列。要读出数据的进程在申请号志时,号志状态为空闲或读状态,队首并无要写入数据的进程在等待,则可进入临界区。
在读状态时可设一计数器指示在临界区内的进程数,每当一个进程调用vsema,则计数器减lo当计数器减到零,状态改为空闲。
            (2)标志
            标志用来控制有限的系统资源(例如缓冲器)的分配和归还。每种有限的资源具有对应的标志,标志中的计数器的初值为资源的数量,每当分配一个资源,标志计数器减,每当归还一个资源,标志计数器增1。因此,标志计数器中反映了此刻可用的资源数。标志计数器还可以为负值,表明资源全忙时在等待分配资源的进程数。
在要求分配某种资源时,进程必须先作申请标志的操作,调用过程claimflag:DCLclaimflagPROC( flidflagid timeouttime UPDATESfireflagrc)
Hid:标志识别码。
timeout:进程在队列中等待分配资源的最大时间°
fire:返回码。
            claimflag过程将首先检查标志计数器。如计数器大于零,申请成功,将资源分配给进程,进程可继续运行。如计数器小于或等于零,表示资源已全忙,进程被挂起而置于标志队列之中。在两种情况下都要将计数器减lo进程等待时长可用时限监视,时限从进程进入等待队列开始起算。返回码可反映申请成功与否等不同情况。
当进程归还资源时,调用过程releaseflag,执行释放标志的操作:DCLreleaseflagPROC( flidflagid UPDATESfireflagrc)
            releaseflag将计数器增1,如果有进程在等待队列中,则可取出队首的进程进行资源分配。