加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 1 信號量
    • 2 PV原語
    • 3 信號量與PV操作的應(yīng)用
    • 4 總結(jié)
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

嵌入式基礎(chǔ)知識-信號量、PV原語與前趨圖

03/04 13:30
4058
閱讀需 7 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

本篇來介紹信號量與PV原語的一些知識,并介紹其在前趨圖上的應(yīng)用分析。本篇的知識屬于操作系統(tǒng)部分的通用知識,在嵌入式軟件開發(fā)中,同樣會用到這些知識。

1 信號量

信號量是最早出現(xiàn)的用來解決進程同步與互斥問題的機制(可以把信號量視為一個加鎖標志位,實現(xiàn)對臨界資源互斥的訪問)。

信號量是一個整數(shù):

    當信號量S>=0時,代表可供并發(fā)使用的資源數(shù)量當信號量S<0時,代表已經(jīng)沒有可用資源,S的絕對值表示當前等待該資源的進程數(shù)

利用信號量可以實現(xiàn)進程的互斥與同步

2 PV原語

2.1 P原語(wait)

P原語(申請資源,相當于wait,阻塞進程)操作的動作是:

sem減1

    • 若sem減1后仍>=0,則執(zhí)行P操作的進程繼續(xù)執(zhí)行

若sem減1后<0,則執(zhí)行P操作的進程被阻塞

    后進入與該信號相對應(yīng)的隊列中,然后轉(zhuǎn)進程調(diào)度

2.2 V原語(signl)

V原語(釋放資源,相當于signal,激活進行)操作的動作是:

sem加1

    • 若sem加1后>0,則執(zhí)行V操作繼續(xù)執(zhí)行若sem加1后仍<=0(表明有進程阻塞在該類資源上),則從該信號的

等待隊列中喚醒一等待進程

    ,然后再返回原進程繼續(xù)執(zhí)行或轉(zhuǎn)進程調(diào)度

注意:PV操作對于每一個進程來說,都只能進行一次,而且必須成對使用。在PV原語執(zhí)行期間不允許有中斷的發(fā)生。

2.3 P、V操作

PV原語的執(zhí)行順序

    執(zhí)行P操作,信號量減一然后進行對共享資源的訪問V操作,信號量加一

PV操作中關(guān)于信號量的計算

某系統(tǒng)有n個進程,共享資源R,R是可用數(shù)為m,其中n>=m。若采用PV操作,則信號量S的取值范圍是多少?

分析:

    信號量的最大值,即可用資源的數(shù)據(jù),即m信號量的最小值,即最多能阻塞的進程數(shù)量,然后取負數(shù),本例中,最大阻塞數(shù)為n-m所以,信號量S的取值范圍是 -(n-m)~m

3 信號量與PV操作的應(yīng)用

3.1 實現(xiàn)進程互斥

為使多個進程互斥的訪問某臨界資源(例如一臺打印機):

    須為該資源設(shè)置一個互斥信號量mutex,并設(shè)其初值為1然后各進程訪問資源的臨界區(qū)CS置于wait(mutx)和signal(mutex)之間即可
semaphore mtuex = 1; //表示打印機(互斥/共享資源)

void process1() //進程1
{
    //...
    wait(mutx); //P操作,信號量-1
    //使用打印機
    signal(mutex); //V操作,信號量+1
    //...
}

void process2() //進程2
{
    //...
    wait(mutx);//P操作,信號量-1
    //使用打印機
    signal(mutex);//V操作,信號量+1
    //...
}

這里簡單分析一下

只有一臺打印機,所以信號量初值是1

wait(mutx),即P操作,信號量減1,例如:

      • 當?shù)谝粋€進程使用打印機時,信號量減為0,沒有進程阻塞當?shù)诙€進程也使用打印機時,信號量再減1變?yōu)?1,小于0了,說明有進程阻塞(就是第二個進程阻塞)當?shù)谌齻€進程也使用打印機時,信號量再減1變?yōu)?2,也小于0了,說明有進程阻塞(就是第三個進程阻塞)

signal(mutex),即V操作,信號量加1,例如:

    • 當?shù)谝粋€進程使用打印機完畢時,信號量加1變?yōu)?1,仍小于0,說明激活一個進程后,仍有進程阻塞(例如第二個進程可以使用打印機了,第三個進程仍在等待)當?shù)诙€進程使用打印機完畢時,信號量加1變?yōu)?,說明激活一個進程后,沒有進程阻塞(第二個進程可以使用打印機了)當?shù)谌齻€進程使用打印機完畢時,信號量加1變?yōu)?

3.2 實現(xiàn)前趨關(guān)系(前趨圖)

這里先簡單介紹下前趨圖:

前趨圖是為了描述一個程序的各部分間的依賴關(guān)系,或者是一個大的計算的各個子任務(wù)間的因果關(guān)系的圖示。

前趨圖中的每個結(jié)點可以表示一條語句、一個程序段或一個進程

結(jié)點間的有向邊表示兩個結(jié)點之間存在的偏序(Partial Order)或前趨關(guān)系

3.2.1 例子1

進程P1~P5的前趨圖如下所示,若用PV操作控制進程P1~P5并發(fā)執(zhí)行的過程,需要設(shè)置5個信號量S1~S5,且信號量的初值都是0。

根據(jù)以上描述,下圖中的a~e處分別該填什么:

分析,根據(jù)文字描述,對照圖中信息,可先將P(S1)和P(S3)在圖中標注出來,進而可推出信號量S1和S3以及V操作V(S1)和V(S3)。

然后假設(shè)P1到P3使用的信號量S3,P3到P5使用的信號量S4,P4到P5使用的信號量S5,即可推導出剩余的PV操作。

3.2.2 例子2

進程P1~P6的前趨圖如下所示,若用PV操作控制進程P1~P6進程同步與互斥的程序如下,則呈現(xiàn)中中的①~⑥處分別該填什么:

分析:根據(jù)程序中的描述,對照圖中信息,可先將程序中已表示的PV操作標注出來,并標注出①~⑥在圖中的位置。

然后假設(shè)P1到P2使用的信號量S1,P4到P6使用的信號量S7,P5到P6使用的信號量S8,即可推導出剩余的PV操作

4 總結(jié)

本篇介紹了信號量與PV原語的基礎(chǔ)知識點,并介紹了PV操作的一些應(yīng)用,實現(xiàn)進程互斥和實現(xiàn)前趨關(guān)系,前趨關(guān)系中使用前趨圖來實例分析PV操作影響信號量變化的具體運行過程。

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
ASEM1-16.000MHZ-LC-T 1 Abracon Corporation MEMS OSC XO 16.0000MHZ CMOS SMD
$1.63 查看
CAT24C04WI-GT3 1 Rochester Electronics LLC 512X8 I2C/2-WIRE SERIAL EEPROM, PDSO8, 0.150 INCH, GREEN, MS-012, SOIC-8
$0.21 查看
LTST-C190CKT 1 Lite-On Semiconductor Corporation Single Color LED, Red, Water Clear, 1.1mm,

ECAD模型

下載ECAD模型
$0.21 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

控制科學與工程碩士,日常分享單片機、嵌入式、C/C++、Linux等學習經(jīng)驗干貨~