日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

二、操作系统——用信号量机制实现进程互斥、同步、前驱关系(详解)

發(fā)布時(shí)間:2024/7/5 windows 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二、操作系统——用信号量机制实现进程互斥、同步、前驱关系(详解) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、什么是進(jìn)程同步?

二、什么是進(jìn)程互斥?

臨界資源:一個(gè)時(shí)間段內(nèi)只允許一個(gè)進(jìn)程使用的資源

為了實(shí)現(xiàn)對(duì)臨界資源的互斥訪問,同時(shí)保證系統(tǒng)整體性能,需要遵循以下原則:

  • 空閑讓進(jìn)。臨界區(qū)空閑時(shí),可以允許一個(gè)請(qǐng)求進(jìn)入臨界區(qū)的進(jìn)程立即進(jìn)入臨界區(qū);
  • 忙則等待。當(dāng)已有進(jìn)程進(jìn)入臨界區(qū)時(shí),其他試圖進(jìn)入臨界區(qū)的進(jìn)程必須等待;
  • 有限等待。對(duì)請(qǐng)求訪問的進(jìn)程,應(yīng)保證能在有限時(shí)間內(nèi)進(jìn)入臨界區(qū)(保證不會(huì)饑餓);
  • 讓權(quán)等待。當(dāng)進(jìn)程不能進(jìn)入臨界區(qū)時(shí),應(yīng)立即釋放處理機(jī),防止進(jìn)程忙等待。

  • 注意:
    5. 進(jìn)程同步也可以說是進(jìn)程之間的直接制約(合作)關(guān)系:因?yàn)檫M(jìn)程之間是有直接的合作的,需要進(jìn)程之間進(jìn)行相互配合,各進(jìn)程的工作推進(jìn)需要遵循一定的先后順序
    6. 進(jìn)程互斥也可以說是進(jìn)程之間的互斥制約(合作)關(guān)系:因?yàn)檫M(jìn)程之間并沒有直接的合作關(guān)系,他們之間只是想要互斥的使用某種系統(tǒng)的臨界資源,所以才會(huì)產(chǎn)生這種制約關(guān)系

    三、信號(hào)量機(jī)制


    用戶進(jìn)程可以通過使用操作系統(tǒng)提供的一對(duì)原語來對(duì)信號(hào)量進(jìn)行操作,從而很方便的實(shí)現(xiàn)了進(jìn)程互斥、進(jìn)程同步。

  • 信號(hào)量其實(shí)就是一個(gè)變量(可以是一個(gè)整數(shù),也可以是更復(fù)雜的記錄型變量),可以用一個(gè)信號(hào)量來表示系統(tǒng)中某種資源的數(shù)量,比如:系統(tǒng)中只有一臺(tái)打印機(jī),就可以設(shè)置一個(gè)初值為1的信號(hào)量。
  • 原語是一種特殊的程序段,其執(zhí)行只能一氣呵成,不可被中斷。原語是由關(guān)中斷/開中斷指令實(shí)現(xiàn)的。軟件解決方案的主要問題是由“進(jìn)入?yún)^(qū)的各種操作無法一氣呵成”,因此如果能把進(jìn)入?yún)^(qū)、退出區(qū)的操作都用“原語”實(shí)現(xiàn),使這些操作能“一氣呵成”就能避免問題。
  • 一對(duì)原語wait(S)原語signal(S)原語,可以把原語理解為我們自己寫的函數(shù),函數(shù)名分別為wait和signal,括號(hào)里的信號(hào)量s其實(shí)就是函數(shù)調(diào)用時(shí)傳入的一個(gè)參數(shù)。
    wait、signal原語常簡稱為P、V操作(來自荷蘭語proberen和verhogen)。因此,做題的時(shí)候常把wait(S)、signal(S)兩個(gè)操作分別寫為P(S)、V(S)
  • 1)整型信號(hào)量

    2)記錄型信號(hào)量

    進(jìn)入wait原語時(shí):
    S.value 先進(jìn)行了-1操作,如果S.value的值在經(jīng)過-1操作之后 < 0,則說明原本的S.value的值是<=0的,而S.value的數(shù)值其實(shí)就代表著資源的數(shù)量,所以資源的數(shù)量是 <= 0, 則需要使用block原語來使該進(jìn)程由運(yùn)行態(tài)進(jìn)入阻塞態(tài),并掛到信號(hào)量S的等待(阻塞)隊(duì)列中。

    進(jìn)入signal原語時(shí):
    S.value 先進(jìn)行了+1操作,如果S.value的值在經(jīng)過+1操作之后 <= 0,則說明原本的S.value的值是<= -1的,而此時(shí)的S.value的數(shù)值的絕對(duì)值可以理解為等待隊(duì)列中的進(jìn)程數(shù)量,所以等待隊(duì)列中的進(jìn)程數(shù)量是 >= 1的, 則需要使用wakeup原語喚醒等待隊(duì)列中的一個(gè)進(jìn)程(即位于隊(duì)頭的進(jìn)程)讓該進(jìn)程從阻塞態(tài)變?yōu)榫途w態(tài)。







    四、用信號(hào)量機(jī)制實(shí)現(xiàn)進(jìn)程互斥

  • 為什么要把互斥信號(hào)量mutex的初值設(shè)置為1?
    答:信號(hào)量的初值其實(shí)表示的是系統(tǒng)中某種資源的數(shù)量,而臨界區(qū)在一個(gè)時(shí)間段內(nèi)也只能運(yùn)行一個(gè)進(jìn)程對(duì)它進(jìn)行訪問,所以我們可以把臨界區(qū)也理解成一種特殊的資源,并且這個(gè)資源只有一個(gè),也就是說臨界區(qū)只能被分配給一個(gè)進(jìn)程使用。只有這個(gè)進(jìn)程釋放了這個(gè)臨界區(qū)資源之后,才能被其他進(jìn)程訪問。

  • 在臨界區(qū)之前執(zhí)行P(mutex)

  • 在臨界區(qū)之后執(zhí)行V(mutex)

  • P、V操作必須成對(duì)出現(xiàn)。缺少P(mutex)就不能保證臨界資源的互斥訪問。缺少V(mutex)會(huì)導(dǎo)致資源永不被釋放,等待進(jìn)程永不被喚醒。

  • 五、用信號(hào)量機(jī)制實(shí)現(xiàn)進(jìn)程同步

  • 設(shè)置同步信號(hào)量S,初值為0
  • 在“前操作”之后執(zhí)行V(S)
  • 在“后操作”之前執(zhí)行P(S)
  • 六、用信號(hào)量機(jī)制實(shí)現(xiàn)前驅(qū)關(guān)系

    對(duì)于前驅(qū)圖的理解:只有S1執(zhí)行完之后,才能執(zhí)行S2、S3。而只有S2執(zhí)行完之后,才能執(zhí)行S4、S5。剩下的以此類推。。。

    其實(shí),前驅(qū)關(guān)系可以看作是多層的同步關(guān)系

    記住:

  • 互斥問題,信號(hào)值初值為1(互斥訪問臨界區(qū))
  • 同步問題,信號(hào)值初值為0(進(jìn)程間相互配合工作,遵循一定的先后順序)
  • 總結(jié)

    以上是生活随笔為你收集整理的二、操作系统——用信号量机制实现进程互斥、同步、前驱关系(详解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。