晚上用將近3個小時集體討論了有關pv原語的一部分題目,雖然效果不是預期那麼理想,但也是熱熱鬧鬧、百家爭鳴。真理,總是越辯越清的嘛。
主要討論了兩道pv題,第一題(例2)主要用來將pv概念例項化,我計畫能通過分析這道題能跟大家慢慢找到解這類題的乙個關鍵所在。
尤其強調,要在讀題、審題上要細心,說不上字字推敲,但也要能夠將題意歸納、概括出重點。細細的審題很重要,細節決定成敗。
小結:
1. 做這類題,要首先從題目中發掘出所有給出的程序及其間關係。
2. 明確訊號量和相關程序之間存在著緊密的聯絡。
3. p:理解為申請資源;v:理解為釋放資源。相對於同一訊號量來說,p和v是成對出現的。
以下是在面對pv原語時,大家容易犯迷糊的地方。
一、以v原語的1、2步來做,sem不就永遠大於0,那程序不就一直迴圈執行成為死迴圈了?
解答:p操作對sem減1的。p、v原語必須成對使用!從而不會造成死迴圈。
二、sem大於0那就表示有臨界資源可供使用,為什麼不喚醒程序?
解答:sem大於0的確表示有臨界資源可供使用,而且這個時候沒有程序被阻塞在這個資源上,也就是說沒有程序因為得不到這類資源而阻塞,所以沒有被阻塞的程序,自然不需要喚醒。
三、sem小於0應該是說沒有臨界資源可供使用,為什麼還要喚醒程序?
解答:v原語操作的本質在於:乙個程序使用完臨界資源後,釋放臨界資源,使sem加1,以通知其它的程序,這個時候如果sem<0,表明有程序阻塞在該類資源上,因此要從阻塞佇列裡喚醒乙個程序來「轉手」該類資源。比如,有2個某類資源,三個程序a、b、c、d要用該類資源,最開始sem=2,當a進入,sem=1,當b進入sem=0,表明該類資源剛好用完,當c進入時sem=-1,表明有乙個程序被阻塞了,d進入,sem=-2。當a用完該類資源時,進行v操作,sem=-1,釋放該類資源,而這時sem<0,表明有程序阻塞在該類資源上,於是喚醒乙個。
四、如果是互斥訊號量的話,應該設定訊號量sen=1,但是當有5個程序都訪問的話,最後在該訊號量的煉表裡會有4個在等待,也是說s=-4,那麼第乙個程序執行了v操作使s加1,釋放了資源,下乙個應該能夠執行,但喚醒的這個程序在執行p操作時因s〈0 ,也還是執行不了,這是怎麼回事呢?
解答:當乙個程序阻塞了的時候,它已經執行過了p操作,並卡在臨界區那個地方。當喚醒它時就立即進入它自己的臨界區,並不需要執行p操作了,當執行完了臨界區的程式後,就執行v操作。
五、sem的絕對值表示等待的程序數,同時又表示臨界資源,這到底是怎麼回事?
解答:當訊號量sem小於0時,其絕對值表示系統中因請求該類資源而被阻塞的程序數目。s大於0時表示可用的臨界資源數。注意在不同情況下所表達的含義不一樣。當等於0時,表示剛好用完。
當看完這些疑惑解答,我想,對於pv操作的一些細微之處,我們有所了解了。
基礎 PV原語
pv原語通過操作訊號量來處理程序間的同步與互斥的問題。p原語 為阻塞原語,負責把當前程序由執行狀態轉換為阻 塞狀態,直到另外乙個程序喚醒它。操作為 申請乙個空閒資源 把訊號量減1 若成功,則退出 若失敗,則該程序被阻塞 v原語 為喚醒原語,負責把乙個被阻塞的程序喚醒,它有乙個參數列,存放著等待被喚醒...
P,V原語都是完成哪些動作???
用變數s記錄當前可用資源的數量 s為一 整數,且s o s o或s 0 s o表示當前可用的空閒資源個數,s 0表示當前可用資源個數為0 s 0表示有 1 個程序正在等待 進入臨界區 此變數s稱為訊號量 訊號量是由作業系統 來維護的,一般用於管理os 中臨界資源的分配 pv 原語對訊號量的操作 1 ...
pv原語的定義及解釋理解
pv原語的含義 p操作和v操作是不可中斷的程式段,稱為原語.pv原語及訊號量的概念都是由荷蘭科學家e.w.dijkstra提出的.訊號量sem是一整數,sem大於等於零時代表可供併發程序使用的資源實體數,但sem小於零時則表示正在等待使用臨界區的程序數.p原語操作的動作是 1 sem減1 2 若se...