<object id="ir2le"></object>
  • 加入收藏 在線留言 聯系我們
    關注微信
    手機掃一掃 立刻聯系商家
    全國服務熱線15267534595
    公司新聞
    操作系統---PV操作
    發布時間: 2024-05-13 21:36 更新時間: 2025-01-01 09:10

    PV操作是一種實現進程互斥與同步的有效方法。PV操作與信號量的處理相關,P表示通過的意思,V表示釋放的意思。

    PV操作是典型的同步機制之一。用一個信號量與一個消息聯系起來,當信號量的值為0時,表示期望的消息尚未產生;當信號量的值非0時,表示期望的消息已經存在。用PV操作實現進程同步時,調用P操作測試消息是否到達,調用V操作發送消息。 


    簡介圖片

    1962年,狄克斯特拉離開數學中心進入位于荷蘭南部的艾恩德霍芬技術大學(Eindhoven Technical University)任數學教授。在這里,他參加了X86計算機的開發,設計與實現了具有多道程序運行能力的操作系統——THE Multiprogramming System。

    THE 是艾恩德霍芬技術大學的荷蘭文Tchnische Hoogeschool Eindhov –en的詞頭縮寫。狄克斯特拉在THE這個系統中所提出的一系統方法和技術奠定了計算機現代操作系統的基礎,尤其是關于多層體系結構,順序進程之間的同步和互斥機制這樣一些重要的思想和概念都是狄克斯特拉在THE中首先提出并為以后的操作系統如UNIX等所采用的。

    為了在單處理機的情況下確定進程(process)能否占有處理機,狄克斯特拉將每個進程分為“就緒”(ready)、“運行”(running)和“阻塞”(blocking)三個工作狀態。由于在任一時刻Zui多只有一個進程可以使用處理機,正占用著處理機的進程稱為“運行”進程。當某進程已具備了使用處理機的條件,而當前又沒有處理機供其使用,則使該進程處于“就緒”狀態。當運行進程由于某種原因無法繼續運行下去時,就停止其占用處理機,使之進入“阻塞”狀態,待造成其退出運行的條件解除,再進入“就緒”狀態。而對系統中所有同時運行的進程之間所存在的相互制約的同步(synchronization,指為了避免錯誤,在一個進程訪問共享數據時,另一個進程不訪問該數據)和互斥(mutually-exclusive,指兩個進程不能同時在一個臨界區中使用同一個可重復使用的資源,諸如讀寫緩沖區)兩個關系,狄克斯特拉巧妙地利用火車運行控制系統中的“信號燈”(semaphore,或叫“信號量”)概念加以解決。

    中國讀者常常不明白這一同步機制為什么叫PV操作,原來這是狄克斯特拉用荷蘭文定義的,因為在荷蘭文中,通過叫passeren,釋放叫vrijgeven,PV操作因此得名。這是在計算機術語中不是用英語表達的極少數的例子之一 

    信號量

    信號量的概念和PV操作是荷蘭科學家E.W.Dijkstra提出來的。信號是鐵路交通管理中的一種常用設備,交通管理人員利用信號顏色的變化來實現交通管理。在操作系統中,信號量S是一整數。S大于或等于零,代表可供并發進程使用的資源實體數;在S小于零時,ISl表示正在等待使用資源實體的進程數。建立一個信號量必須說明此信號量所代表的意義并且賦初值。除賦初值外,信號量僅能通過PV操作來訪問。

    信號量按其用途可分為兩種。

    ①公用信號量。聯系一組并發進程,相關的進程均可在此信號量上執行P操作和V操作,初值常常為1,用于實現進程互斥。

    ②私有信號量。聯系一組并發進程,僅允許擁有此信號量的進程執行P操作,而其他相關進程可在其上施行V操作。初值常常為0或正整數,多用于實現進程同步。

    PV操作是由兩個操作,即P操作和V操作組成的。P操作和V操作是兩個在信號量上進行操作的過程,假定用S表示信號量,則把這兩個過程記作P(S)和V(S)。 

    原理

    用PV操作來管理共享資源時,首先要確保PV操作自身執行的正確性。由于P(S)和V(S)都是在同一個信號量S上操作,為了使得它們在執行時不發生因交叉訪問信號量S而可能出現的錯誤,約定P(S)和V(S)必須是兩個不可被中斷的過程,即讓它們在屏蔽中斷下執行。把不可被中斷的過程稱為原語。于是,P操作和V操作實際上應該是P操作原語和V操作原語。

    P操作的主要動作是:

    ①S減1;

    ②若S減1后仍大于或等于0,則進程繼續執行;

    ③若S減1后小于0,則該進程被阻塞后放入等待該信號量的等待隊列中,然后轉進程調度。

    V操作的主要動作是: 

    ①S加1; 

    ②若相加后結果大于0,則進程繼續執行; 

    ③若相加后結果小于或等于0,則從該信號的等待隊列中釋放一個等待進程,然后再返回原進程繼續執行或轉進程調度。

    PV操作對于每一個進程來說,都只能進行一次,而且必須成對使用。在PV原語執行期間不允許有中斷發生。原語不能被中斷執行,因為原語對變量的操作過程如果被打斷,可能會去運行另一個對同一變量的操作過程,從而出現臨界段問題。如果能夠找到一種解決臨界段問題的元方法,就可以實現對共享變量操作的原子性。 



    應用

    實現進程的同步

    要實現進程的同步就必須提供一種機制,該機制能把其他進程需要的消息發送出去,也能測試自己需要的消息是否到達。把能實現進程同步的機制稱為同步機制。不同的同步機制實現同步的方法也不同。PV操作和管程是兩種典型的同步機制。在這里,只介紹怎樣用PV操作實現進程間的同步。

    用一個信號量與一個消息聯系起來,信號量的值為0表示期望的消息尚未產生;信號量的值為非0表示期望的消息已經存在。假定用信號量S表示某個消息,現在來看看怎樣用PV操作達到進程同步的目的。

    (1)調用P操作測試消息是否到達

    任何進程調用P操作可測試到自己所期望的消息是否已經到達。若消息尚未產生,則S=0,調用P(S)后,P(S)一定讓調用者成為等待信號量S的狀態,即調用者此時必定等待直到消息到達;若消息已經存在,則S≠0,調用P(S)后,進程不會成為等待狀態而可繼續執行,即進程測試到自己期望的消息已經存在。

    (2)調用V操作發送消息

    任何進程要向其他進程發送消息時可調用V操作。若調用V操作之前S=0,表示消息尚未產生且無等待消息的進程,則調用V(S)后,V(s)執行S:=S+1使S≠0,即意味著消息已存在;若調用V操作之前S<0,表示消息未產生前已有進程在等待消息,則調用V(S)后將釋放一個等待消息者,即表示該進程等待的消息已經到達,可以繼續執行。

    在用PV操作實現同步時,一定要根據具體的問題來定義信號量和調用P操作或V操作。一個信號量與一個消息聯系在一起,當有多個消息時必須定義多個信號量;測試不同的消息是否到達或發送不同的消息時,應對不同的信號量調用P操作或V操作。


    實現進程互斥

    用PV操作可實現并發進程的互斥,其步驟如下。

    (1)設立一個互斥信號量S,表示臨界區,其取值為1,0,-1,…其中,S=1表示無并發進程進入S臨界區;S=0表示已有一個并發進程進入了S臨界區;S等于負數表示已有一個并發進程進入S臨界區,且有|S|個進程等待進入S臨界區,S的初值為1。

    (2)用PV操作表示對S臨界區的申請和釋放。在進入臨界區之前,通過P操作進行申請,在退出臨界區之后,通過V操作釋放。

     


    注意事項圖片

    1、使用PV操作實現進程互斥時應該注意的是:

    ⑴每個程序中用戶實現互斥的P、V操作必須成對出現,先做P操作,進臨界區,后做V操作,出臨界區。若有多個分支,要認真檢查其成對性。

    ⑵P、V操作應分別緊靠臨界區的頭尾部,臨界區的代碼應盡可能短,不能有死循環。

    ⑶互斥信號量的初值一般為1。

    2、使用PV操作實現進程同步時應該注意的是:

    ⑴分析進程間的制約關系,確定信號量種類。在保持進程間有正確的同步關系情況下,哪個進程先執行,哪些進程后執行,彼此間通過什么資源(信號量)進行協調,從而明確要設置哪些信號量。

    ⑵信號量的初值與相應資源的數量有關,也與P、V操作在程序代碼中出現的位置有關。

    ⑶同一信號量的P、V操作要成對出現,但它們分別在不同的進程代碼中。

    圖片


    聯系方式

    • 電  話:18126392341
    • 聯系人:梁濤
    • 手  機:15267534595
    • 微  信:15267534595