作業系統基礎 訊號量機制的理解

2021-09-19 08:42:49 字數 1173 閱讀 5568

訊號量機制的提出,是為了解決程序間關係通訊的問題,因為程序間不可能用嘴來說「我在使用這個資源啊,你先等我用完再用」,或者說「我用完了,接下來輪到你了!」這是我們人之間通訊的方式,那麼現實中如何讓某個程序知道,自己暫時不能用哪個資源或可以用哪個資源呢?

比如在火車上上廁所,假設有個空廁所,門上顯示器寫著"無人",當我進去把門鎖上後,門上顯示變為"有人",這樣後來者看到門上顯示"有人"就會在外等待而不會冒然闖進來。

這就是用到訊號量的機制,其中門上的顯示器就扮演了"訊號量"的角色,在計算機中,我們稱這是程序互斥。當然,程序間關係還不止互斥。

首先有幾個概念我們要先了解

一段時間內只允許乙個程序訪問的資源稱為臨界資源或獨佔資源。

比如印表機,上文我們提到的廁所,只能你乙個人用,不能多人同時用。

程序中訪問臨界資源的那段**稱為臨界區。

這個容易理解,我有一段**,其中呼叫印表機的那段**塊,就是臨界區。

為使多個程序互斥地訪問某臨界資源,須為該資源設定互斥訊號s,並設其初始值為1,然後將各程序訪問資源的臨界區置於p操作和v操作之間即可。

p操作是申請使用資源的操作,假設我要使用印表機了,就進行p(s),這樣之後,s的值就會減1變成0,s的值為0表示印表機也就是資源不可用。

如果另乙個人要使用也是先進行p(s),由於s為0資源還不能用,這樣s的值會變成-1,表示他暫時沒能使用而在排隊,訊號量s為負數時其絕對值表示阻塞佇列中等待該資源的程序數。

如果沒人在排隊,當我用完印表機後就執行v操作,v操作表示釋放資源,v(s)就讓訊號量s由0加1變成了1,這樣後來者就可以用印表機了。

若有1人在排隊,那s就變0,這個後來者直接使用印表機,使用完後再v操作,s會變1。

兩程序協作完成一件事,我們叫同步。

設有a,b兩程序共用乙個變數x,a負責算數得到x的結果,然後把結果傳給b,b負責把結果x列印出來。這裡我們需要兩個訊號量s1,s2,初值為1,0。(s1給a用,s2給b用)

要完成這次任務

執行p(s1)→得到結果→v(s2)→p(s2)→列印結果→v(s1)

p(s1)表示a程序要工作了,把它對應的訊號量s1置0,表示a程序不可用正在工作中。

得到結果後,v(s2)把s2置1,表示b可以開始工作。

p(s2)表示b程序要工作了,把它對應的訊號量s2置0。

列印出結果後,v(s1)講s1置1,表示任務完成,a程序可以開始下一輪的工作了。

作業系統 訊號量機制

用乙個整數型的變數作為訊號量,用來表示股系統中某種資源的數量。與普通整數變數的區別 對訊號量的操作只有三種,初始化,p操作,v操作。p操作 相當於wait原語,進入區 v操作 signal原語,相當於退出區。大體實現 wait 方法一氣呵成,避免併發導致的問題。但是不滿足 讓權等待原則 程序會處於忙...

作業系統之 訊號量機制

訊號量機制是一種卓越成效的程序同步工具,訊號量機制已經被廣泛的使用於單處理機,和多處理系統的計算機網路中。訊號量s 是乙個整數,s大於等於零代表可供併發程序使用的資源實體數,當 s小於零時則表示正在等待使用臨界區的程序數,整型訊號量 整型訊號量定義乙個用於表示資源數目的整型量數目s 但是僅能通過兩個...

作業系統 2 3訊號量機制

荷蘭科學家 dijkstra 狄克斯特拉 提出的一種卓有成效的程序同步機制。1 整型訊號量 1.訊號量定義為乙個 整型量 2.根據初始情況賦相應的值 3.僅能通過 兩個原子操作 來訪問。p操作 wait s while s 0 do no op s s 1 v操作 signal s s s 1 2....