?

嵌入式實時多分區操作系統進程同步機制的研究

2017-07-10 07:11衛一芃楊弋張東
科技風 2017年2期
關鍵詞:事件信號

衛一芃 楊弋 張東

摘 要: 并發執行的各進程在訪問共享資源時可能造成操作系統的混亂。如何做到進程間相互合作,共享資源?本文詳細介紹了各種進程間同步互斥的方式以及信號機制。這些方式使用靈活、方便,能夠有效地實現進程間的資源共享及相互合作。

關鍵詞:進程同步;信號量;事件;互斥量;條件變量;信號

中圖分類號:TP311 文獻標識碼:A

嵌入式實時多分區操作系統是專門為新一代航空電子系統開發的,它是支持綜合化航空電子系統的嵌入式實時操作系統。進程同步與通信功能的出現為多任務同時執行提供的可能。進程同步機制在嵌入式實時多分區操作系統中進程交互、數據保護及臨界資源保護等方面做出巨大貢獻。

1 進程間關系

為了滿足新一代航空電子系統高度綜合化、模塊化的要求,在高安全實時操作系統中引 入了分區的概念。分區在時間和空間上相互隔離。分區內運行一個或多個進程,每個進程作為基本的運行單位隸屬于特定的分區,各進程之間并發執行[ 1 ]。

一個進程就是一個正在執行程序的實例,包括程序計數器,寄存器和變量的當前值。進程是分區內的可調度單元。一個分區內的進程共享分區資源。進程參與資源競爭,處理器資源在進程間分配,進程的狀態在不斷的變化[ 2 ]。

進程動態性、并發性、獨立性及異步性等特性。進程的異步性就是指每個進程都以其相對獨立不可預知的速度運行。進程的異步性是導致進程爭奪共享資源的原因。

多道程序系統中,進程間由于資源共享及合作,各進程可能產生兩種形式的制約關系—間接制約和直接制約。在僅有一臺打印機的系統中有兩個進程,一個進程占用打印機時另一個進程必須阻塞,等到打印機空閑,阻塞的進程才能被喚醒,轉為就緒態,占用打印機。這種情況下兩個進程的關系稱為間接制約。另一種情況是,進程之間通過緩沖傳遞數據。當緩沖為空時接收進程阻塞,此時,如果有發送進程向緩沖發送數據,接收進程才能被喚醒。反之,當緩沖滿時,發送進程阻塞,接收進程從緩沖接收數據后,緩沖不滿,發送進程才能從阻塞態轉為就緒態,向緩沖發送消息。

2 進程同步與互斥

任何一個時刻,只有一個進程處于運行態,占用處理器。兩個或多個進程讀寫某些共享數據,而最后的結果取決于進程運行的精準時序,這種現象稱為競爭條件(race condition)。

如何避免競爭條件?要避免此類現象的發生關鍵是要找出某種途徑以阻止多個進程同時讀寫共享數據,即以某種手段確保當一個進程在使用共享變量或文件時其他進程不能操作。這種手段即為互斥(mutual exclusion)。我們把對共享內存進行訪問的程序片段稱為臨區域(critical region)或臨界區(critical section)。如果我們能夠適當地安排,使得兩個進程不可能同時處于臨界區中,就能夠避免競爭條件。

實現進程間同步與互斥的方式有:信號量,事件,互斥量,條件變量。下面詳細介紹這幾種方式。

2.1信號量

信號量用于實現對分區內資源的同步和互斥訪問。進程等待信號量以獲取資源訪問權,訪問結束時釋放信號量。等待信號量的進程可以按照FIFO(先進先出,First in First out)規則,也可以按照優先級規則在資源的等待隊列中排隊。相同優先級的進程按照FIFO規則排隊。進程在等待隊列的排隊規則在信號量創建時定義。

信號量管理提供了資源同步和互斥訪問的機制,分區中提供了兩種類型的信號量:計數信號量和互斥信號量。

計數信號量用于對多個資源的受控訪問,初始值為共享資源的數目?;コ庑盘柫坑糜诠蚕碣Y源的互斥訪問。創建信號量時設置計數器的初始值,當信號量被獲取時,其計數值減1;當信號量被釋放時,其計數值加1。如果計數值為0,則嘗試獲取信號量的進程被阻塞。等待信號量的進程可以按照先進先出原則,也可以按照優先級次序原則在隊列中排隊。采用優先級排隊規則時,對于同優先級進程按先進先出原則排隊。

2.2 事件

事件是一種進程間通信機制:它可以把某種情況的發生告知給等待進程。事件是一個二值狀態變量(狀態為“有效態(UP)”和“無效態(DOWN)”),通過事件狀態的改變通知進程事件的發生。

2.3互斥量

一個互斥量在某一時刻只允許一個進程獲取。每個互斥量包含一個優先級定義,當某個進程擁有該互斥量時,該進程的優先級被提升到該互斥量所定義的優先級;當該進程釋放該互斥量時,該進程的優先級被恢復到其擁有該互斥量之前的值;如果進程在獲得互斥量后被其他服務設置了優先級,那么在該進程釋放互斥量時,它的優先級將被恢復為該服務設置的優先級。

一個進程在某一時刻最多只允許獲取一個互斥量,當某進程擁有互斥量時,它不允許被調用的服務阻塞。

等待互斥量的進程可以按照先進先出原則,也可以按照優先級次序原則在隊列中排隊。在優先級次序條件下,同等優先級的進程按照先進先出原則排隊。等待隊列的排隊原則在互斥量創建時定義。

每個互斥量都有一個鎖定計數,進程釋放互斥量的次數必須和獲取互斥量的次數相等,該互斥量才能夠被釋放。此外,進程也可以通過重置互斥量來立即釋放互斥量[ 3 ]。

2.4 條件變量

條件變量是另一種同步機制?;コ饬吭谠试S或阻塞對臨界區的訪問上非常有用,而條件變量允許線程由于一些未達到的條件而阻塞。

絕大多數情況下,條件變量與互斥量在一起使用。這種模式用于讓一個線程鎖住一個互斥量,然后當它不能獲得它期待的結果時等待一個條件變量。最后另一個線程會向它發信號,使其繼續執行[ 4 ]。

3 信號

信號機制是進程之間相互傳遞消息的一種方法,主要用于產生、傳送和處理系統中的各種信號。通過信號可以實現進程間的控制和通信。進程等待某個事件時,該進程仍然可以執行其他任務。當事件發生,操作系統發送信號通知該進程。這稱之為信號的異步性。通過信號完成進程間通信和控制,將大幅提高嵌入式實時多分區操作系統的處理能力,增強實時性。

4 結語

操作系統中引入進程后,改善了資源利用率,但是由于進程的異步性,在其爭奪共享資源時可能會給系統造成混亂,使數據處理出錯,導致每次結果不同。進程同步和互斥的任務就是使并發執行的各進程之間能有效地共享資源和相互合作,從而使程序的執行具有可再現性。

本文詳細介紹了信號量、事件、互斥量、條件變量等同步機制與信號的基本概念,在復雜的應用中,進程間共享的資源類型不一、大小不一,因此應根據具體情況和需求,采用相應的同步機制,以提高軟件設計的靈活性和信息交換的效率。

參考文獻:

[1] 李運喜,時磊,任曉瑞.分區內進程管理的設計與實現[J].航空計算計算,2005年12月,04期:12-14.

[2] 馮海欣.系統進程的同步[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著,陳向群,馬紅兵,等譯.現代操作系統[M].第1版.北京:機械工業出版社,2013年6月.

航空科學基金項目資助:

工信部民用飛機專項科研項目(MJ-S-2012-05)

作者簡介:

衛一芃(1984-),女,陜西西安人,碩士研究生,研究方向為嵌入式實時操作系統。

猜你喜歡
事件信號
完形填空二則
大赤魷的圖案信號
民用航空測距信號對北斗導航信號的干擾分析
民用航空測距信號對北斗導航信號的干擾分析
Contiki系統進程與事件剖析
網絡輿情反轉現象中的“參照點效應”
保羅·利科的“話語事件”思想
授之以魚,不如授之以漁
熱點事件中的“輿論搭車”現象探析
嵌入式系統課程“中斷、異常與事件”教學實踐及啟示
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合