【操作系統原理】進程的互斥以及上鎖與解鎖原語


什麼是進程互斥?

        所謂進程互斥,就是對於系統的某種資源,若一個進程正在訪問它,其他進程必須等待,不能同時使用。這是一種源於資源共享的制約關係,也稱爲間接制約關係。

 

接下來,我們來簡要的瞭解一下幾個概念:

  1. 這種限定資源只能排他性的訪問的資源叫做臨界資源

  2. 程序中訪問臨界資源的那段代碼稱爲臨界區或臨界段

     

    如何實現進程互斥?

    爲實現對臨界資源的互斥訪問,應保證諸進程互斥的進入各自的臨界區。在操作系統中,最早採用軟件的方法,後來常採用硬件指令或者在系統中設置專門的同步機構方法。這些方法共同形成臨界區的使用原則:

    1當臨界區空閒時,必須讓一個要求進入臨界區的進程立即進入,以有效的利用資源;

    2當臨界區已經有進程進入時,其他試圖進入臨界區的資源必須等待,以保證互斥地進入臨界區;

    3)對於要求進入臨界區的進程應在有限的時間內使之進入,以免陷入死等

    4等待進入臨界區的進程必須立即釋放CPU,以免“忙等”。

     

    上鎖與開鎖是一種最簡單的進程互斥方法。它使用一個變量“W”來表示某種臨界資源的狀態。若W=1,表示資源已經被使用,若W=0,表示資源可用。一般將上鎖與開鎖原語設置在臨界區相應的程序段前後。

    舉個栗子

                甲進程:

                       其他代碼:

                        LOCK(W)

                        甲進程的臨界區;

                        UNLOCK(W)

                         其他代碼;

          進程進入臨界區之前應該測試W的值,若W=1,資源被佔用,則應返回測試;若W=0,即資源可用,則在進入臨界區前爲防止其他進程進入二給資源上鎖,將W置爲1。用完資源退出前,給資源解鎖,使W=0

     

          但是有沒有想過,如此簡單的條件測試有可能會導致CPU“忙等?於是就有了信號量機制的產生。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章