學 生活中的PV操作

2022-08-13 19:36:10 字數 2699 閱讀 2514

之前寫過作業系統的文章,然後最近發現少了點什麼,仔細檢查發現,沒寫pv操作,那麼我們接下來就單獨為pv操作寫一篇部落格,讓大家不再懼怕pv操作, 我們深入淺出的分析,讓大家輕鬆學習pv操作。

學習pv操作之前,我們首先來了解兩個很基礎的概念:

同步、互斥:

同步:其實說同步還不如說」協作「,就是我們的目標只有乙個,我們奔著同乙個目標去的,都是在大家的努力下共同完成這麼一件事情。還是比較容易理解的吧。不見得太難。

互斥:借用別人的一句話「千軍萬馬過獨木橋」,很通俗的一句話,就把咱們這個概念表達的淋漓盡致,就好比有乙個大部隊來到獨木橋這,但是必須排好隊,乙個乙個來;其實現實生活中,還有乙個很好的例子可以說明這個互斥的概念,比如印表機,印表機這個工具就非常好的體現了互斥的概念,印表機一旦被別人占用了,那無亂你有多著急,都只能等著,對吧。

其實借用別人的話或者資料或者工具來讓咱們的學習更加輕鬆,為咱們的學習加把油,何樂而不為呢?這就是我要說的「站在巨人的肩膀上」來看問題,許多問題就變得輕鬆起來;這是一種思想,旨在為咱們的學習加把油~這是題外話,但是更重要的是一種思想,很值得學習。

我們接下來還繼續看一下一張同步的圖:

這張圖也特別的形象具體,我們具體來看看這張圖,a倉庫有貨物,然後我們需要把貨物搬運到b倉庫,由搬運工甲和搬運工乙來完成這個過程;那麼他們的目標就只有乙個,就是把貨物從a搬到b去,共同奔著這個方向去發展,所以我們說這是乙個同步的問題。

臨界資源:就是咱們剛剛說的互斥,諸程序間需要互斥方式對其進行共享資源,如印表機、光碟機等。

臨界區:就是程序訪問臨界資源的那段**。

講了那麼久,我們才引入了pv操作,看來這個pv操作還是挺有意思的。

pv操作:解決互斥和同步的問題。pv操作是分開來看的:

p操作:使s=s-1,若s>=0,則該程序繼續執行,否則該程序排入等待佇列。

v操作:使s=s+1,若s>0,喚醒等待佇列中的乙個程序。

這樣理解不太好理解,咱們還是來看例子吧:

接下來,我們來看乙個與咱們生活很貼切的問題:生產者——消費者問題:

我們還是一樣,通過來分析問題:

這是乙個著名的同步問題,雖然生產者程序和消費者程序都是非同步方式執行的,但它們之間必須保持同步,即不允許消費者程序到乙個空緩衝區去取產品,也不允許生產者程序向乙個已裝滿產品且尚未被取走的緩衝區中投放產品。這是乙個單緩衝區情況。那麼這個單緩衝區的pv操作,應該是怎樣的呢?我們來看看:

我們分析分析,很容易的發現這個流程,前提是s1初值為1,s2初值為0。我們需要記住p操作減1,v操作加1,然後這個分析就變得易如反掌了,我們先對初值進行一下說明:

a、我們把s1的初值設為1:是說明緩衝區還有乙個空間可以使用,對於生產者而言,每乙個緩衝區的乙個空間就是乙個資源,也就是說,一開始執行的時候,就允許生產者投放乙個產品到緩衝區,

b、然後投放到緩衝區之後,我們來看消費者程序,p(s2):首先我們要程序乙個判斷,判斷緩衝區中是否有產品,對消費者而言,緩衝區中有產品,就代表有乙個資源可以使用,但是最初狀態那個緩衝區中是沒有資源的,所以s2的初值應該是為0的。

我們剛才都提到了資源的問題,就是訊號量的乙個值應該是表示資源的數量,但是就消費者和生產者而言,對於他們的資源是不同的,概念是不同的,生產者:緩衝區有多少個空格,就有多少個資源;而對消費者來說,緩衝區有多少個滿的格,就有多少個資源,是剛好是相反,所以說,就是這麼相反,所以當消費者從緩衝區取出乙個產品之後,對於生產者而已,就多了乙個資源。

其實這個過程就是這樣的。

1、生產者:p(s1),那麼p(s1),s1=s1-1,得到p(s1=0)這個程序還能進行,那麼生產者把乙個產品投放到緩衝區。

2、v(s2),s2=s2+1,s2初值為0,所以s2=s2+1>0,那麼就啟用了p(s2),那麼消費者就能取出乙個產品。

4、消費產品:消費產品之前,還有乙個v(s1),就啟用了p(s1),讓生產者繼續投放產品到緩衝區。

特別簡單吧,這是單緩衝區分析。

我們接下來看乙個相對來說,有點複雜一點點的,多緩衝區的,其實也一樣一樣的,繼續:

我們還是分析一樣的問題,生產者、消費者問題:

對應的pv操作應該是這樣的:

有一點區別,就是要引用互斥的概念,因為緩衝區是乙個臨界資源,它始終只能有乙個程序對其進行操作,所以我們就可以用乙個互斥訊號量來完成這一點,所以當某乙個程序要使用到緩衝區之前,我們就進行以下判斷,判斷這個緩衝區現在是不是空閒呢?是不是有生產者或者消費者的程序在使用這個這個緩衝區呢?如果有,mute的初值為1,當有人使用這個緩衝區的時候,這個mute的值就由1變為0,這時,第二個程序向再來操作這個緩衝區,就不可能了,就會被阻塞,當第乙個程序使用完緩衝區

公交車司機與售票員的問題:

我們來分析這個過程,我們把s1和s2的初值都設為0。我們來分析分析:

1、p(s1):s1=s1-1=-1,那麼司機程序就被暫停,等會售票員程序,售票員關車門。

2、v(s1):s1=s1+1=0,啟用了司機程序,那麼司機就開始啟動車輛、正常行駛、到站停車,當然售票員也有可能同時在售票。

3、p(s2):s2=s2-1,售票員在售票之後的程序就被暫停,等待司機程序。這樣就避免了售票員售票之後就開車門了。因為這是不允許的。

4、v(s2):s2=s2+1,司機到站停車之後,就啟用了售票員p(s2)的程序,那麼售票員就程序 開車門、上下客的操作。

那麼這個程序就完成了。

其實這些例子都是我們生活中實實在在的例子,所以這樣講起來大家就比較容易接受。學習本來就是乙個很輕鬆的事情。

作業系統中的PV操作

pv操作由p操作原語和v操作原語組成 原語是不可中斷的過程 對訊號量進行操作,具體定義如下 p s 將訊號量s的值減1,即s s 1 如果s 0,則該程序繼續執行 否則該程序置為等待狀態,排入等待佇列。v s 將訊號量s的值加1,即s s 1 如果s 0,則該程序繼續執行 否則釋放佇列中第乙個等待訊...

訊號量中的PV操作

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

在JS中實現PV操作

pv操作原理 新增鏈結描述 前言 在參加 中國計算機技術職業資格考試複習的時候,看到書中有一種對互斥與同步問題的解決方法,稱為pv操作,具體的pv操作原理就不在這裡贅述,不了解的小夥伴可以到置頂的鏈結中,看別的大佬的講解,下面就是我在js中進行的pv操作相關原理的實現 塊,如有需要的小夥伴可以進行參...