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

軟考之路--從生活著手,看PV如何操作

               

       PV操作,是軟考當中一個很重要的考點,一聽到這個名詞,頓時趕腳高大上有麼有,在軟考的歷年試題中,也不乏PV操作的身影,老師也對PV操作進行了一次講課,那時年少,聽得稀裡糊塗,也不是很理解,在小編的理解當中,PV操作與訊號量的處理相關,P表示通過的意思,V表示釋放的意思。做過幾套軟考試題,看過軟考視訊,對PV操作有了一點傻傻的理解,PV操作屬於作業系統方面的知識,在前面的博文中,小編介紹過

程序儲存,這篇博文,小編主要和大家來學習一下PV操作的相關知識,小編會循著下面這張圖的脈絡,一一介紹,首先,我們來看一下整體的有關PV操作知識點的框架。

       

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

      概念

      同步

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

       

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


       互斥

        古語中有句話,能很好的表達出互斥的概念--千軍萬馬過獨木橋,很簡單的一句話,把互斥的概念表達的淋漓盡致,就好比有一個大部隊來到獨木橋邊,想要走過獨木橋,首先要做的工作就是排好隊,一個一個來,挨個走過獨木橋。還有一個很好的例子可以說明互斥的概念,比如印表機,印表機這個工具就非常好的體現了互斥的概念,比如,前陣日子,大家自考,各種列印

真題,列印知識點,如果你去列印的時候,已經有人正在使用印表機,那麼你需要做的就是靜靜的等待,這也是生活中一個能很好說明互斥概念的例子。在互斥中,還有兩個重要的概念,臨界資源和臨界區,臨界資源就是我們上文提到過的互斥,各個程序間需要互斥方式對其進行共享資源,如印表機。臨界區就是程序訪問臨界資源的那段程式碼。


        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操作的一個很好的例子典型。這些例子都是我們生活中實實在在存在的,理解起來比較容易,也比較容易接受,軟考之路,未完待續......

           

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow