在作業系統中,程序之間常常會存在相互排斥(都須要共享獨占性資源時)和同步(完畢非同步的兩個程序的協作)兩種關係。
而訊號量和
pv操作完美有效的處理了這兩種情況。
相互排斥:就好比過獨木橋,一次僅僅能執行乙個程序。
同步:好比乙個人騎車乙個人步行,兩方協作完畢一件事情,速度快的每過一段時間就停下來等等速度慢的
訊號量是一種特殊的變數。表現形式是乙個整型
s和乙個佇列,依據控制物件的不同被賦予不同的值。分為下面兩類:
1,公用訊號量。實現程序間的相互排斥,初值為
1或資源的數目,
2,私用訊號量。實現程序間的同步,初值為
0或某個正整數。
s的物理意義:
s>=0
表示某資源的可用數。若
s<0
,則其絕對值表示堵塞佇列中等待該資源的程序數。
p
操作:也稱為
down()
、wait()
操作,使
s=s-1
。若s<0,
程序暫停執行。放入訊號量的等待佇列。表示申請乙個資源。
v
操作:也稱為
up()
、signal()
操作。使
s=s+1,
若s<=0,
喚醒等待佇列中的乙個程序。表示釋放乙個資源。
利用
pv操作實現程序的相互排斥
令訊號量
s的初值為
1,當進入臨界區時執行
p操作,退出臨界區時執行
v操作。這樣,利用
pv操作實現程序相互排斥的**例如以下:
p(s)
臨界區v(s)
利用
pv操作實現程序的同步
令訊號量
s的初值為
0。程序
a在程序b到達
l2曾經。不應前進到超過點l1。
程序a 程序b
… …
l1:p(s) l2: v(s)
… …
當程序a
先執行到
l1時,執行完
p操作後,訊號量
s=s-1<0,
停止執行。直到程序
b執行到
l2時,訊號量
s=s+1=1
。喚醒程序
a繼續執行。
達到了同步的目的。
最後通過乙個例項分析來鞏固一下
比如。某倉庫有一名保管員。該倉庫可存放
n箱零件。
現有m名工人。僅僅要倉庫空暇。工人就可以將生產好的零件放入倉庫。並由保管員登記入庫數量。另外有
k名銷售員,僅僅要倉庫的零件數滿足顧客要求,便可提貨並由保管員登記出庫數量。
規定:工人和銷售員不能同一時候進入倉庫,可是工人和工人,銷售員和銷售員能夠同一時候進入倉庫。設定訊號量
s1,初值為
n,表示倉庫空暇位置數;訊號量
s2。初值為
0,表示倉庫中零件箱數;訊號量
s3,初值為
1,用於實現對保管員的相互排斥訪問。
則其管理系統流程圖例如以下:
對於工人程序,首先執行
p(s1)
申請資源。看倉庫中是否有空暇位置。
若有,則將零件送入倉庫。然後執行v(s2)
表明倉庫中已經有一箱零件,喚醒銷售員程序,告知銷售員能夠提貨了。然後執行p(
s3)申請資源,看是否有保管員空暇,若有。則登記入庫數,然後執行v(
s3)釋放保管員資源,使保管員處於空暇狀態。
對銷售員程序,首先執行
p(s2)
申請資源,看倉庫是否有貨物,若有,進入倉庫提貨,然後執行
v(s1)
釋放資源。使倉庫空暇出乙個位置。告知工人程序能夠放置貨物了,然後執行
p(s3)
申請資源,看是否有保管員空暇,若有,則登記出庫數,然後執行v(
s3)釋放保管員資源,使保管員處於空暇狀態。
通過上述例項可知,在現實生活中相互排斥和同步都是同一時候存在的,兩者相輔相成。
關於pv
操作,相對來講在軟考的複習內容中是比較生疏的一部分,了解了它是什麼,為什麼使用它,它有什麼長處以後,剩下的就是通過多多的實踐練習來加深對理論的理解和吸收了。
軟考學習 PV操作二 PV應用
pv原語的應用 pv原語可以解決程序管理當中的互斥問題,以及同步問題,還有通訊問題.我覺得我只要明白互斥和同步問題就好了,通訊就 1 用pv原語實現程序互斥 把臨界區置於p sem 和v sem 之間。ps 訊號量的英文是semaphore 當乙個程序想要進入臨界區時,它必須先執行p操作以將訊號量s...
測試unix linux系統PV操作的效能示例
使用此程式可以粗略的測試linux系統下pv操作的效能。system v 訊號燈 如下 include include include include include include include include include include define key t double union ...
效能測試綜述
一 了解效能測試 效能測試是不斷的通過不同場景的系統表現去 系統設計與資源消耗之間的平衡。我們可以認為效能測試是 通過在測試環境下對系統或構件的效能進行探測,用以驗證在生產環境下系統效能是否達到預估的效能需求,發現系統可能存在的效能瓶頸,進而改善優化並系統的效能,提高系統的可擴充套件性 穩定性。從上...