訊號量與PV操作

2021-09-27 19:35:34 字數 2695 閱讀 2022

解決程序同步互斥問題的機制。

一種特殊變數,表現形式是乙個整數semaphore和乙個佇列。

s>=0時,s表示可用資源的數量。

s<0時,已經沒有可用資源,s的絕對值表示當前等待該資源的程序數。

s=s-1

使用資源,此時如果s<0,則掛起該程序。

s=s+1

釋放資源,此時如果s<0,從阻塞佇列裡喚醒乙個程序。

互斥控制為了保護共享資源,不讓多個程序同時訪問該資源。

這種一次只讓乙個程序訪問的資源稱為臨界資源,訊號量初值設為1。

在互斥關係中,pv操作在乙個程序中成對出現。

p(s)

臨界區v(s)

最簡單同步形式是a在b到達l2之前不能超過l1。

設定訊號量s初值為0,a到達l1後執行p操作後掛起,直到b到達l2後執行v操作將a喚醒。

在同步操作中,pv操作在兩個甚至多個程序中成對出現。

程序a

程序b

l1   p(s)

l2    v(s)

也稱有限緩衝問題。生產者生成資料項放到緩衝區(bound為n)中,然後重複此過程。與此同時,消費者也在緩衝區消耗這些資料。

要解決該問題,就必須讓生產者在緩衝區滿時休眠,等到下次消費者消耗緩衝區中的資料的時候,生產者才能被喚醒,開始往緩衝區新增資料。同樣,也可以讓消費者在緩衝區空時進入休眠,等到生產者往緩衝區新增資料之後,再喚醒消費者。

訊號量

初值

描述

empty

n緩衝區空項數

full

0緩衝區非空項數

mutex1互斥

生產者

消費者

p(empty)

p(mutex)

緩衝區加資料項

v(mutex)

v(full)

p(full)

p(mutex)

緩衝區減資料項

v(mutex)

v(empty)

指多個程序對乙個共享資源進行讀寫操作的問題,多個程序同時讀是可以接受的,同時只能有乙個程序寫,寫時不能讀。

寫者要等到沒有讀者的時候才能去寫檔案,所有讀者要等待寫者寫完檔案後才能去讀檔案。

訊號量

初值

描述

readmutex

1讀互斥

writemutex

1寫互斥

變數

初值

描述

count

0讀者數

讀者

寫者

p(readmutex)

if(count == 0)

p(writemutex)

++count

v(readmutex)

讀資料p(readmutex)

--count

if(count == 0)

v(writemutex)

v(readmutex)

p(writemutex)

寫資料v(writemutex)

理髮店理有一位理髮師、一把理髮椅和n把供等候理髮的顧客坐的椅子如果沒有顧客,理髮師便在理髮椅上睡覺乙個顧客到來時,它必須叫醒理髮師如果理髮師正在理髮時又有顧客來到,則如果有空椅子可坐,就坐下來等待,否則就離開。

訊號量

初值

描述

customers

0等候的顧客數

barbers

0等候的理髮師數,0或1

mutex

1count訪問互斥

變數

初值

描述

count

0椅子上等待的顧客數,bound為n

理髮師

顧客

p(customers)

p(mutex)

--count

v(barbers)

v(mutex)

理髮師理髮

p(mutex)

if(count < n)else

v(mutex)

哲學家就餐問題可以這樣表述,假設有五位哲學家圍坐在一張圓形餐桌旁,做以下兩件事情之一:吃飯,或者思考。吃東西的時候,他們就停止思考,思考的時候也停止吃東西。餐桌中間有一大碗義大利面,每兩個哲學家之間有乙隻餐叉。因為用乙隻餐叉很難吃到義大利面,所以假設哲學家必須用兩隻餐叉吃東西。他們只能使用自己左右手邊的那兩隻餐叉。

哲學家從來不交談,這就很危險,可能產生死鎖,每個哲學家都拿著左手的餐叉,永遠都在等右邊的餐叉(或者相反)。

訊號量與PV操作

1 訊號量 訊號量 semaphore 的資料結構為乙個值和乙個指標,指標指向等待該訊號量的下乙個程序。訊號量的值與相應資源的使用情況有關。當它的值大於0時,表示當前可用資源的數量 當它的值小於0時,其絕對值表示等待使用該資源的程序個數。注意,訊號量的值僅能由pv操作來改變。訊號量s表示了作業系統中...

訊號量,PV操作

它從整型訊號量 記錄型訊號量,進而發展為 訊號量集 機制 訊號量集,就是訊號量的集合 現在要用的是記錄型訊號量 1,訊號量幹嘛用的?訊號量 解決程序間同步與互斥問題 2.訊號量的組成 訊號量 分很多種,在此寫記錄型訊號量 record semaphore 訊號量組成 每個訊號量s除乙個整數值s.va...

訊號量同步 P V 操作

訊號是 e.w.dijkstra 在二十世紀六十年代末設計的一種程式設計架構。dijkstra 的模型與鐵路操作有關 假設某段鐵路是單線的,因此一次只允許一列火車通過。訊號將用於同步通過該軌道的火車。火車在進入單一軌道之前必須等待訊號燈變為允許通行的狀態。火車進入軌道後,會改變訊號狀態,防止其他火車...