1. 程式人生 > >軟考之路--從生活著手,看PV怎樣操作

軟考之路--從生活著手,看PV怎樣操作

是我 信號 技術 生活 復雜 問題 工具 否則 是否

PV操作。是軟考其中一個非常重要的考點,一聽到這個名詞,頓時趕腳高大上有麽有,在軟考的歷年試題中,也不乏PV操作的身影,老師也對PV操作進行了一次講課,那時年少。聽得稀裏糊塗,也不是非常理解,在小編的理解其中,PV操作與信號量的處理相關。P表示通過的意思,V表示釋放的意思。做過幾套軟考試題,看過軟考視頻,對PV操作有了一點傻傻的理解,PV操作屬於操作系統方面的知識,在前面的博文中,小編介紹過進程和存儲,這篇博文。小編主要和大家來學習一下PV操作的相關知識,小編會循著以下這張圖的脈絡,一一介紹,首先,我們來看一下總體的有關PV操作知識點的框架。

技術分享

接下來。小編就沿著上圖的痕跡,對PV操作進行一一解剖,有不允許見的小夥伴歡迎討論交流。

概念

同步

關於同步,小編理解的意思是“協同合作。齊心協力”。換句話說就是我們的目標僅僅有一個。大家的目標都一致,就是在大家的努力下共同完畢某一件事情。看以下一張圖:

技術分享

我們來簡單分析一下這張圖,A倉庫有一些貨物,然後我們須要把A倉庫的貨物搬運到B倉庫,由搬運工甲和搬運工乙來完畢這個任務;那麽他們的目標就僅僅有一個。就是把貨物從A倉庫搬到B倉庫去,共同奔著這個方向去努力,這是一個典型的同步問題。


相互排斥

古語中有句話,能非常好的表達出相互排斥的概念--千軍萬馬過獨木橋。非常easy的一句話,把相互排斥的概念表達的淋漓盡致,就好比有一個大部隊來到獨木橋邊,想要走過獨木橋。首先要做的工作就是排好隊。一個一個來。挨個走過獨木橋。另一個非常好的樣例能夠說明相互排斥的概念,比方打印機,打印機這個工具就非常好的體現了相互排斥的概念,比方,前陣日子,大家自考。各種打印真題。打印知識點。假設你去打印的時候,已經有人正在使用打印機,那麽你須要做的就是靜靜的等待,這也是生活中一個能非常好說明相互排斥概念的樣例。在相互排斥中,還有兩個重要的概念,臨界資源和臨界區,臨界資源就是我們上文提到過的相互排斥,各個進程間須要相互排斥方式對其進行共享資源,如打印機。臨界區就是進程訪問臨界資源的那段代碼。


P?

V? PV?

P操作:使S=S-1。若S>=0,則該進程繼續運行,否則該進程排入等待隊列。
V操作:使S=S+1,若S>0,喚醒等待隊列中的一個進程。
PV操作:解決相互排斥和同步的問題。這樣理解起來,非常費解。也不知道是怎麽個意思。我們還是從生活著手,看看PV是怎樣操作。

生活中的PV操作

生產者--消費者問題

首先我們來看以下一張圖

技術分享

這是一個著名的同步問題。盡管生產者進程和消費者進程都是異步方式執行的,但它們之間必須保持同步,即不同意消費者進程到一個空緩沖區去取產品。也不同意生產者進程向一個已裝滿產品且尚未被取走的緩沖區中投放產品。這是一個單緩沖區情況。那麽這個單緩沖區的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)。那麽消費者就能取出一個產品。
3、消費產品:消費產品之前。另一個V(S1),就激活了P(S1),讓生產者繼續投放產品到緩沖區。這是單緩沖區分析。

我們接下來看一個相對來說,有點復雜一點點的--多緩沖區的PV操作,對照我們的單緩沖區的PV操作,我們還是來分析生產者和消費者的問題:
技術分享

相應的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操作進行相關闡述,首先是概念。包含同步和相互排斥的概念,其次是什麽是PV操作。最後。從生活入手,解說了兩個PV操作的樣例,生產者消費者問題和公交車司機和售票員的問題。另一個樣例就是上次米老師上課提到的12306售票系統和顧客之間的關系。也是PV操作的一個非常好的樣例典型。

這些樣例都是我們生活中實實在在存在的。理解起來比較easy。也比較easy接受,軟考之路,未完待續......

軟考之路--從生活著手,看PV怎樣操作