售前電話
135-3656-7657
售前電話 : 135-3656-7657
引入進程的程控交換軟件還應(yīng)考慮進程的同步(Synchroniza-tion)和互斥(MutualExclusion)o各種程控交換系統(tǒng)由于中斷機理、調(diào)度策略、資源分配方式等方面的差異,對同步和互斥的要求和實現(xiàn)方式也會有所不同。例如,S1240系統(tǒng)考慮了對SSM(系統(tǒng)支援機)內(nèi)的共享數(shù)據(jù)的可靠存取,設(shè)置了臨界區(qū)(CriticalRegion),并采用監(jiān)控(Monitor)方式。原語ENTER_MONITOR(進入監(jiān)控)可使運行進入監(jiān)控方式,設(shè)置新的中斷屏蔽字,使所有可屏蔽中斷不能進入。原語EXIT一MONITOR(退出監(jiān)控)則用來退出監(jiān)控方式,恢復(fù)原有中斷屏蔽字。
DMS-100系統(tǒng)對進程的同步和互斥有較多的設(shè)施,以下作一介紹。
1.進程的同步
在DMS—100系列中,同步是指對進程訪問共享數(shù)據(jù)和申請共享的系統(tǒng)資源的同步,設(shè)置了號志和標(biāo)志兩種同步原語。
(1)號志
DMS-100系統(tǒng)采用Dijkstra提出的號志概念,以保證對共享數(shù)據(jù)的有效存取。
①psema和vsema原語
每個臨界區(qū)可具有相應(yīng)的號志。所謂臨界區(qū),是指在任一時刻只允許一個進程在執(zhí)行的程序段,也可稱為互斥段。
每個進程要進入某臨界區(qū),必須先申請?zhí)栔荆{(diào)用過程psema:DCLpsemaPROC(sidsemaid usertypesemauser UPDATESsrcsemarc)
sid:與該臨界區(qū)對應(yīng)的號志識別碼。
usertype:賦與用戶進程的訪問類別(讀或?qū)?。
src;指示號志是否可用的返回碼。
當(dāng)進程離開臨界區(qū),要調(diào)用過程vsema以釋放號志:DCLvsemaPROC(sidsemaidUPDATESsrcsemarc)
sid:調(diào)用psema時所指定的號志識別碼。
src:返回碼。
②號志狀態(tài)
號志可具有以下3種狀態(tài):
(a)idle(空閑)
沒有進程在臨界區(qū)執(zhí)行。
(b)readersin(讀)
一個或多個進程在臨界區(qū)執(zhí)行以讀出數(shù)據(jù)。
(c)writerin(寫)
一個且只能有一個進程在臨界區(qū)執(zhí)行以寫入數(shù)據(jù),了解也要讀出數(shù)據(jù)。
③號志隊列
每個號志具有相應(yīng)的隊列,隊列中是等待進入臨界區(qū)的各個進程,采用先到來先服務(wù)(First一ComeFirst一Served一FCFS)的原則。當(dāng)正進臨界區(qū)執(zhí)行的進程調(diào)用了vsema后,可從隊列中取一個進程??捎脮r限來保證較短的等待時間,時限是從該進程排到隊列之首時才起算。如超過時限,則“殺死”遲遲不離開臨界區(qū)的進程,而使排在隊首的進程進入臨界區(qū)。
要對數(shù)據(jù)寫入的進程在申請?zhí)栔緯r,如果號志狀態(tài)為讀或?qū)?,都不能進入臨界區(qū)而要排入號志隊列。要讀出數(shù)據(jù)的進程在申請?zhí)栔緯r,號志狀態(tài)為空閑或讀狀態(tài),隊首并無要寫入數(shù)據(jù)的進程在等待,則可進入臨界區(qū)。
在讀狀態(tài)時可設(shè)一計數(shù)器指示在臨界區(qū)內(nèi)的進程數(shù),每當(dāng)一個進程調(diào)用vsema,則計數(shù)器減lo當(dāng)計數(shù)器減到零,狀態(tài)改為空閑。
(2)標(biāo)志
標(biāo)志用來控制有限的系統(tǒng)資源(例如緩沖器)的分配和歸還。每種有限的資源具有對應(yīng)的標(biāo)志,標(biāo)志中的計數(shù)器的初值為資源的數(shù)量,每當(dāng)分配一個資源,標(biāo)志計數(shù)器減,每當(dāng)歸還一個資源,標(biāo)志計數(shù)器增1。因此,標(biāo)志計數(shù)器中反映了此刻可用的資源數(shù)。標(biāo)志計數(shù)器還可以為負值,表明資源全忙時在等待分配資源的進程數(shù)。
在要求分配某種資源時,進程必須先作申請標(biāo)志的操作,調(diào)用過程claimflag:DCLclaimflagPROC(flidflagid timeouttime UPDATESfireflagrc)
Hid:標(biāo)志識別碼。
timeout:進程在隊列中等待分配資源的最大時間°
fire:返回碼。
claimflag過程將首先檢查標(biāo)志計數(shù)器。如計數(shù)器大于零,申請成功,將資源分配給進程,進程可繼續(xù)運行。如計數(shù)器小于或等于零,表示資源已全忙,進程被掛起而置于標(biāo)志隊列之中。在兩種情況下都要將計數(shù)器減lo進程等待時長可用時限監(jiān)視,時限從進程進入等待隊列開始起算。返回碼可反映申請成功與否等不同情況。
當(dāng)進程歸還資源時,調(diào)用過程releaseflag,執(zhí)行釋放標(biāo)志的操作:DCLreleaseflagPROC(flidflagid UPDATESfireflagrc)
releaseflag將計數(shù)器增1,如果有進程在等待隊列中,則可取出隊首的進程進行資源分配。