衛(wèi)一芃 楊弋 張東
摘 要: 并發(fā)執(zhí)行的各進程在訪問共享資源時可能造成操作系統(tǒng)的混亂。如何做到進程間相互合作,共享資源?本文詳細介紹了各種進程間同步互斥的方式以及信號機制。這些方式使用靈活、方便,能夠有效地實現(xiàn)進程間的資源共享及相互合作。
關鍵詞:進程同步;信號量;事件;互斥量;條件變量;信號
中圖分類號:TP311 文獻標識碼:A
嵌入式實時多分區(qū)操作系統(tǒng)是專門為新一代航空電子系統(tǒng)開發(fā)的,它是支持綜合化航空電子系統(tǒng)的嵌入式實時操作系統(tǒng)。進程同步與通信功能的出現(xiàn)為多任務同時執(zhí)行提供的可能。進程同步機制在嵌入式實時多分區(qū)操作系統(tǒng)中進程交互、數(shù)據(jù)保護及臨界資源保護等方面做出巨大貢獻。
1 進程間關系
為了滿足新一代航空電子系統(tǒng)高度綜合化、模塊化的要求,在高安全實時操作系統(tǒng)中引 入了分區(qū)的概念。分區(qū)在時間和空間上相互隔離。分區(qū)內運行一個或多個進程,每個進程作為基本的運行單位隸屬于特定的分區(qū),各進程之間并發(fā)執(zhí)行[ 1 ]。
一個進程就是一個正在執(zhí)行程序的實例,包括程序計數(shù)器,寄存器和變量的當前值。進程是分區(qū)內的可調度單元。一個分區(qū)內的進程共享分區(qū)資源。進程參與資源競爭,處理器資源在進程間分配,進程的狀態(tài)在不斷的變化[ 2 ]。
進程動態(tài)性、并發(fā)性、獨立性及異步性等特性。進程的異步性就是指每個進程都以其相對獨立不可預知的速度運行。進程的異步性是導致進程爭奪共享資源的原因。
多道程序系統(tǒng)中,進程間由于資源共享及合作,各進程可能產生兩種形式的制約關系—間接制約和直接制約。在僅有一臺打印機的系統(tǒng)中有兩個進程,一個進程占用打印機時另一個進程必須阻塞,等到打印機空閑,阻塞的進程才能被喚醒,轉為就緒態(tài),占用打印機。這種情況下兩個進程的關系稱為間接制約。另一種情況是,進程之間通過緩沖傳遞數(shù)據(jù)。當緩沖為空時接收進程阻塞,此時,如果有發(fā)送進程向緩沖發(fā)送數(shù)據(jù),接收進程才能被喚醒。反之,當緩沖滿時,發(fā)送進程阻塞,接收進程從緩沖接收數(shù)據(jù)后,緩沖不滿,發(fā)送進程才能從阻塞態(tài)轉為就緒態(tài),向緩沖發(fā)送消息。
2 進程同步與互斥
任何一個時刻,只有一個進程處于運行態(tài),占用處理器。兩個或多個進程讀寫某些共享數(shù)據(jù),而最后的結果取決于進程運行的精準時序,這種現(xiàn)象稱為競爭條件(race condition)。
如何避免競爭條件?要避免此類現(xiàn)象的發(fā)生關鍵是要找出某種途徑以阻止多個進程同時讀寫共享數(shù)據(jù),即以某種手段確保當一個進程在使用共享變量或文件時其他進程不能操作。這種手段即為互斥(mutual exclusion)。我們把對共享內存進行訪問的程序片段稱為臨區(qū)域(critical region)或臨界區(qū)(critical section)。如果我們能夠適當?shù)匕才牛沟脙蓚€進程不可能同時處于臨界區(qū)中,就能夠避免競爭條件。
實現(xiàn)進程間同步與互斥的方式有:信號量,事件,互斥量,條件變量。下面詳細介紹這幾種方式。
2.1信號量
信號量用于實現(xiàn)對分區(qū)內資源的同步和互斥訪問。進程等待信號量以獲取資源訪問權,訪問結束時釋放信號量。等待信號量的進程可以按照FIFO(先進先出,F(xiàn)irst in First out)規(guī)則,也可以按照優(yōu)先級規(guī)則在資源的等待隊列中排隊。相同優(yōu)先級的進程按照FIFO規(guī)則排隊。進程在等待隊列的排隊規(guī)則在信號量創(chuàng)建時定義。
信號量管理提供了資源同步和互斥訪問的機制,分區(qū)中提供了兩種類型的信號量:計數(shù)信號量和互斥信號量。
計數(shù)信號量用于對多個資源的受控訪問,初始值為共享資源的數(shù)目?;コ庑盘柫坑糜诠蚕碣Y源的互斥訪問。創(chuàng)建信號量時設置計數(shù)器的初始值,當信號量被獲取時,其計數(shù)值減1;當信號量被釋放時,其計數(shù)值加1。如果計數(shù)值為0,則嘗試獲取信號量的進程被阻塞。等待信號量的進程可以按照先進先出原則,也可以按照優(yōu)先級次序原則在隊列中排隊。采用優(yōu)先級排隊規(guī)則時,對于同優(yōu)先級進程按先進先出原則排隊。
2.2 事件
事件是一種進程間通信機制:它可以把某種情況的發(fā)生告知給等待進程。事件是一個二值狀態(tài)變量(狀態(tài)為“有效態(tài)(UP)”和“無效態(tài)(DOWN)”),通過事件狀態(tài)的改變通知進程事件的發(fā)生。
2.3互斥量
一個互斥量在某一時刻只允許一個進程獲取。每個互斥量包含一個優(yōu)先級定義,當某個進程擁有該互斥量時,該進程的優(yōu)先級被提升到該互斥量所定義的優(yōu)先級;當該進程釋放該互斥量時,該進程的優(yōu)先級被恢復到其擁有該互斥量之前的值;如果進程在獲得互斥量后被其他服務設置了優(yōu)先級,那么在該進程釋放互斥量時,它的優(yōu)先級將被恢復為該服務設置的優(yōu)先級。
一個進程在某一時刻最多只允許獲取一個互斥量,當某進程擁有互斥量時,它不允許被調用的服務阻塞。
等待互斥量的進程可以按照先進先出原則,也可以按照優(yōu)先級次序原則在隊列中排隊。在優(yōu)先級次序條件下,同等優(yōu)先級的進程按照先進先出原則排隊。等待隊列的排隊原則在互斥量創(chuàng)建時定義。
每個互斥量都有一個鎖定計數(shù),進程釋放互斥量的次數(shù)必須和獲取互斥量的次數(shù)相等,該互斥量才能夠被釋放。此外,進程也可以通過重置互斥量來立即釋放互斥量[ 3 ]。
2.4 條件變量
條件變量是另一種同步機制?;コ饬吭谠试S或阻塞對臨界區(qū)的訪問上非常有用,而條件變量允許線程由于一些未達到的條件而阻塞。
絕大多數(shù)情況下,條件變量與互斥量在一起使用。這種模式用于讓一個線程鎖住一個互斥量,然后當它不能獲得它期待的結果時等待一個條件變量。最后另一個線程會向它發(fā)信號,使其繼續(xù)執(zhí)行[ 4 ]。
3 信號
信號機制是進程之間相互傳遞消息的一種方法,主要用于產生、傳送和處理系統(tǒng)中的各種信號。通過信號可以實現(xiàn)進程間的控制和通信。進程等待某個事件時,該進程仍然可以執(zhí)行其他任務。當事件發(fā)生,操作系統(tǒng)發(fā)送信號通知該進程。這稱之為信號的異步性。通過信號完成進程間通信和控制,將大幅提高嵌入式實時多分區(qū)操作系統(tǒng)的處理能力,增強實時性。
4 結語
操作系統(tǒng)中引入進程后,改善了資源利用率,但是由于進程的異步性,在其爭奪共享資源時可能會給系統(tǒng)造成混亂,使數(shù)據(jù)處理出錯,導致每次結果不同。進程同步和互斥的任務就是使并發(fā)執(zhí)行的各進程之間能有效地共享資源和相互合作,從而使程序的執(zhí)行具有可再現(xiàn)性。
本文詳細介紹了信號量、事件、互斥量、條件變量等同步機制與信號的基本概念,在復雜的應用中,進程間共享的資源類型不一、大小不一,因此應根據(jù)具體情況和需求,采用相應的同步機制,以提高軟件設計的靈活性和信息交換的效率。
參考文獻:
[1] 李運喜,時磊,任曉瑞.分區(qū)內進程管理的設計與實現(xiàn)[J].航空計算計算,2005年12月,04期:12-14.
[2] 馮海欣.系統(tǒng)進程的同步[J].科技資訊,2007年,04期:170.
[3] Airlines Electronic Engineering Committee. Avionics Application Software Standard Interface Part 1-Required Services[S].16701 MELFORD BLVD.SUITE 120 BOWIE, MARYLAND 20715 USA: ARINC, August 21,2015.
[4] Andrew S.Tanenbaum著,陳向群,馬紅兵,等譯.現(xiàn)代操作系統(tǒng)[M].第1版.北京:機械工業(yè)出版社,2013年6月.
航空科學基金項目資助:
工信部民用飛機專項科研項目(MJ-S-2012-05)
作者簡介:
衛(wèi)一芃(1984-),女,陜西西安人,碩士研究生,研究方向為嵌入式實時操作系統(tǒng)。