PV操作 深入顯出

2022-08-09 01:21:25 字數 2603 閱讀 6662

原文出處:

之前寫過作業系統的文章,然後最近發現少了點什麼,仔細檢查發現,沒寫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)的程序,那麼售票員就程序 開車門、上下客的操作。

那麼這個程序就完成了。

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

深入顯出 理解程式介面

程式介面是作業系統為使用者提供的兩類介面之一,程式設計人員在程式中通過程式介面來請求作業系統提供服務。進行介面的介紹,必須介紹一下程式語言發展的歷史才行,魯迅先生說過 治學先治史 明白了程式語言發展的前世今生,才能知道這麼多語言為什麼會這樣,為什麼會那樣?首先給大家介紹乙個概念 粒度 什麼是粒度?所...

P,V操作理解

程序通常分為就緒 執行和阻塞三個工作狀態。三種狀態在某些條件下可以轉換,三者之間的轉換關係如下 程序三個狀態之間的轉換就是靠pv操作來控制的。pv操作主要就是p操作 v操作和訊號量。其中訊號量起到了至關重要的作用。訊號量 訊號量是最早出現的用來解決程序同步與互斥問題的機制。訊號量 saphore 由...

理解PV操作

程序通常分為就緒 執行和阻塞三個工作狀態。三種狀態在某些條件下可以轉換,三者之間的轉換關係如下 程序三個狀態之間的轉換就是靠pv操作來控制的。pv操作主要就是p操作 v操作和訊號量。其中訊號量起到了至關重要的作用。訊號量 訊號量是最早出現的用來解決程序同步與互斥問題的機制。訊號量 saphore 由...