研究或學習過作業系統原理的同仁對“PV操作”這個詞不會陌生,但是恐怕很多同仁不理解為什麼叫“P操作、V操作”。在此給出一個比較合理的解釋。
PV的原型
P和V是來源於兩個荷蘭語詞彙,P—— passeren,中文譯為"通過";
V—— vrijgeven,中文譯為"釋放"。
PV的由來
談到PV操作繞不開一位著名的計算機大神—— Edsgar Wybe Dijkstra,中文名"埃德斯加·狄克斯特拉",荷蘭人,畢業於萊頓大學、劍橋大學。
為了在單處理器的情況下確定程序能否佔有處理器,狄克斯特拉將每個程序分為“就緒”、“執行”和“阻塞”三個狀態。由於在任一時刻最多隻有一個程序可以使用處理器,佔用著處理器的程序稱為“執行”程序。當某程序已具備了使用處理器的條 件,而當前又沒有處理器供其使用,則使該程序處於“就緒”狀態。當執行程序由於某種原因無法繼續執行下去時,就停止其佔用處理器,使之進入“阻塞”狀態,待造成其退出執行的條件解除,再進入“就緒”狀態。而對系統中所有同時執行的程序之間所存在的相互制約的同步和互斥兩個關係,狄克斯特拉巧妙地利用火車執行控制系統中的“訊號燈”(semaphore)概念加以解決。
而對訊號量的操作正是P、V操作。X和Y是分別將資料送入緩衝B和從緩衝B讀出資料的兩個程序,為了讓兩個程序協調工作,狄克斯特拉設計了一種同步機制叫“PV操作”,P操作和V操作是執行時不被打斷的兩個作業系統原語(在執行這兩個語句時不允許系統發生中斷,從而保證語句的原子性執行)。P和V操作都是針對訊號量(此處假設訊號量S=0)進行的。X 程序執行P(S)時訊號量S的值減1,若結果不為負,則X執行完畢,否則X程序暫停以等待Y執行V(S)釋放。Y執行V操作V(S)時,S的值加1,若結果等於0,則釋放一個因執行P(S)而等待的程序。