PV操作(操作系统)
在操作系統(tǒng)中,進(jìn)程之間經(jīng)常會存在互斥(都需要共享獨(dú)占性資源時(shí)) 和同步(完成異步的兩個(gè)進(jìn)程的協(xié)作)兩種關(guān)系.為了有效的處理這兩種情況,狄克斯特拉(W.Dijkstra)在1965年提出信號量 (semaphore)和PV操作.
PV操作是一種實(shí)現(xiàn)進(jìn)程互斥與同步的有效方法。PV操作與信號量的處理相關(guān),P表示通過的意思,V表示釋放的意思。
PV操作是典型的同步機(jī)制之一。用一個(gè)信號量與一個(gè)消息聯(lián)系起來,當(dāng)信號量的值為0時(shí),表示期望的消息尚未產(chǎn)生;當(dāng)信號量的值非0時(shí),表示期望的消息已經(jīng)存在。用PV操作實(shí)現(xiàn)進(jìn)程同步時(shí),調(diào)用P操作測試消息是否到達(dá),調(diào)用V操作發(fā)送消息。
原理
用PV操作來管理共享資源時(shí),首先要確保PV操作自身執(zhí)行的正確性。由于P(S)和V(S)都是在同一個(gè)信號量S上操作,為了使得它們在執(zhí)行時(shí)不發(fā)生因交叉訪問信號量S而可能出現(xiàn)的錯(cuò)誤,約定P(S)和V(S)必須是兩個(gè)不可被中斷的過程,即讓它們在屏蔽中斷下執(zhí)行。把不可被中斷的過程稱為原語。于是,P操作和V操作實(shí)際上應(yīng)該是P操作原語和V操作原語。
P操作的主要?jiǎng)幼魇?#xff1a;
①S減1;
②若S減1后仍大于或等于0,則進(jìn)程繼續(xù)執(zhí)行;
③若S減1后小于0,則該進(jìn)程被阻塞后放入等待該信號量的等待隊(duì)列中,然后轉(zhuǎn)進(jìn)程調(diào)度。
V操作的主要?jiǎng)幼魇?#xff1a;
①S加1;
②若相加后結(jié)果大于0,則進(jìn)程繼續(xù)執(zhí)行;
③若相加后結(jié)果小于或等于0,則從該信號的等待隊(duì)列中釋放一個(gè)等待進(jìn)程,然后再返回原進(jìn)程繼續(xù)執(zhí)行或轉(zhuǎn)進(jìn)程調(diào)度。
PV操作對于每一個(gè)進(jìn)程來說,都只能進(jìn)行一次,而且必須成對使用。在PV原語執(zhí)行期間不允許有中斷發(fā)生。原語不能被中斷執(zhí)行,因?yàn)樵Z對變量的操作過程如果被打斷,可能會去運(yùn)行另一個(gè)對同一變量的操作過程,從而出現(xiàn)臨界段問題。如果能夠找到一種解決臨界段問題的元方法,就可以實(shí)現(xiàn)對共享變量操作的原子性。
應(yīng)用
實(shí)現(xiàn)進(jìn)程的同步
要實(shí)現(xiàn)進(jìn)程的同步就必須提供一種機(jī)制,該機(jī)制能把其他進(jìn)程需要的消息發(fā)送出去,也能測試自己需要的消息是否到達(dá)。把能實(shí)現(xiàn)進(jìn)程同步的機(jī)制稱為同步機(jī)制。不同的同步機(jī)制實(shí)現(xiàn)同步的方法也不同。PV操作和管程是兩種典型的同步機(jī)制。在這里,只介紹怎樣用PV操作實(shí)現(xiàn)進(jìn)程間的同步。
我們已經(jīng)知道怎樣用PV操作來實(shí)現(xiàn)進(jìn)程的互斥。事實(shí)上,PV操作不僅是實(shí)現(xiàn)進(jìn)程互斥的有效工具,而且還是一個(gè)簡單而方便的同步工具。用一個(gè)信號量與一個(gè)消息聯(lián)系起來,信號量的值為0表示期望的消息尚未產(chǎn)生;信號量的值為非0表示期望的消息已經(jīng)存在。假定用信號量S表示某個(gè)消息,現(xiàn)在來看看怎樣用PV操作達(dá)到進(jìn)程同步的目的。
(1)調(diào)用P操作測試消息是否到達(dá)
任何進(jìn)程調(diào)用P操作可測試到自己所期望的消息是否已經(jīng)到達(dá)。若消息尚未產(chǎn)生,則S=0,調(diào)用P(s)后,P(S)一定讓調(diào)用者成為等待信號量S的狀態(tài),即調(diào)用者此時(shí)必定等待直到消息到達(dá);若消息已經(jīng)存在,則S≠0,調(diào)用P(S)后,進(jìn)程不會成為等待狀態(tài)而可繼續(xù)執(zhí)行,即進(jìn)程測試到自己期望的消息已經(jīng)存在。
(2)調(diào)用V操作發(fā)送消息
任何進(jìn)程要向其他進(jìn)程發(fā)送消息時(shí)可調(diào)用V操作。若調(diào)用V操作之前S=0,表示消息尚未產(chǎn)生且無等待消息的進(jìn)程,則調(diào)用V(S)后,V(s)執(zhí)行S:=S+1使S≠0,即意味著消息已存在;若調(diào)用V操作之前S<0,表示消息未產(chǎn)生前已有進(jìn)程在等待消息,則調(diào)用V(S)后將釋放一個(gè)等待消息者,即表示該進(jìn)程等待的消息已經(jīng)到達(dá),可以繼續(xù)執(zhí)行。
在用PV操作實(shí)現(xiàn)同步時(shí),一定要根據(jù)具體的問題來定義信號量和調(diào)用P操作或V操作。一個(gè)信號量與一個(gè)消息聯(lián)系在一起,當(dāng)有多個(gè)消息時(shí)必須定義多個(gè)信號量;測試不同的消息是否到達(dá)或發(fā)送不同的消息時(shí),應(yīng)對不同的信號量調(diào)用P操作或V操作。
實(shí)現(xiàn)進(jìn)程互斥
用PV操作可實(shí)現(xiàn)并發(fā)進(jìn)程的互斥,其步驟如下。
(1)設(shè)立一個(gè)互斥信號量S,表示臨界區(qū),其取值為1,0,-1,…其中,S=1表示無并發(fā)進(jìn)程進(jìn)入S臨界區(qū);S=0表示已有一個(gè)并發(fā)進(jìn)程進(jìn)入了S臨界區(qū);S等于負(fù)數(shù)表示已有一個(gè)并發(fā)進(jìn)程進(jìn)入S臨界區(qū),且有|S|個(gè)進(jìn)程等待進(jìn)入S臨界區(qū),S的初值為1。 [1]
(2)用PV操作表示對S臨界區(qū)的申請和釋放。在進(jìn)入臨界區(qū)之前,通過P操作進(jìn)行申請,在退出臨界區(qū)之后,通過V操作釋放。
進(jìn)程通常分為就緒、運(yùn)行和阻塞三種工作狀態(tài)。
三種狀態(tài)在某些條件下可以轉(zhuǎn)換,具體轉(zhuǎn)換關(guān)系如下:
進(jìn)程三個(gè)狀態(tài)之間的轉(zhuǎn)換是通過PV操作和信號量來控制的,其中信號量起到了很重要的作用。
備注
中國讀者常常不明白這一同步機(jī)制為什么叫PV操作,原來這是狄克斯特拉用荷蘭文定義的,因?yàn)樵诤商m文中,通過叫passeren,釋放叫vrijgeven,PV操作因此得名。這是在計(jì)算機(jī)術(shù)語中不是用英語表達(dá)的極少數(shù)的例子之一。
這篇文章也很好:
https://blog.csdn.net/wuxy720/article/details/78936912
總結(jié)
以上是生活随笔為你收集整理的PV操作(操作系统)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何清理废弃pv和其对应的文件夹
- 下一篇: 2022-2027年中国环保领域集团级s