操作系統(tǒng)學(xué)習(xí)(四) —— 進(jìn)程控制和一些具體例子

學(xué)習(xí)材料:計算機操作系統(tǒng)(第2版,人民郵電出版社)

一、進(jìn)程控制

概念:是對系統(tǒng)中的所有進(jìn)程實施有效的管理,是處理機管理功能的一部分。為了實現(xiàn)共享,協(xié)調(diào)并發(fā)進(jìn)程的關(guān)系。進(jìn)程管理的功能應(yīng)包括:進(jìn)程控制、進(jìn)程調(diào)度、實現(xiàn)進(jìn)程之間的同步協(xié)調(diào)和通信

1)進(jìn)程創(chuàng)建

  • 系統(tǒng)啟動時,創(chuàng)建并產(chǎn)生一些必須的、承擔(dān)系統(tǒng)資源分配的管理工作的系統(tǒng)進(jìn)程。
  • 用戶進(jìn)程,用戶在程序提交給系統(tǒng)時創(chuàng)建的。
  • 進(jìn)程創(chuàng)建也是進(jìn)程管理的基本功能之一。用戶不能直接創(chuàng)建進(jìn)程,只能通過操作系統(tǒng)提供進(jìn)程創(chuàng)建原語,以系統(tǒng)請求方式向操作系統(tǒng)申請一個進(jìn)程。

2)進(jìn)程撤銷

功能:

撤銷本進(jìn)程,撤銷一個指定標(biāo)識符的進(jìn)程或撤銷一組子進(jìn)程。

過程:
  • 由運行指針得到當(dāng)前進(jìn)程的PCB。
  • 釋放本進(jìn)程所占用的資源給父進(jìn)程。
  • 釋放此PCB結(jié)構(gòu)。
  • 轉(zhuǎn)進(jìn)程調(diào)度。

3)進(jìn)程阻塞與喚醒

進(jìn)程阻塞:進(jìn)程需要等待某一時間完成時,調(diào)用阻塞原語將自己掛起。進(jìn)程一旦被掛起,它只能由另一個進(jìn)程喚醒。也就是,先停止調(diào)用進(jìn)程的執(zhí)行,將CPU現(xiàn)場保留到該進(jìn)程的PCB現(xiàn)場保護(hù)區(qū)(也即完成了多少工作,將其保存),改變其狀態(tài)為等待,并插入等待隊列。最后使控制轉(zhuǎn)向進(jìn)程調(diào)度。
本質(zhì):進(jìn)程需要等待某一資源,指令無法繼續(xù)執(zhí)行,此時將進(jìn)程掛起,調(diào)度其他進(jìn)程。
進(jìn)程喚醒:當(dāng)進(jìn)程等待的事件發(fā)生時,喚醒等待該事件的進(jìn)程。
進(jìn)城喚醒的步驟

  • 將該進(jìn)程移出等待隊列。
  • 置進(jìn)程狀態(tài)為就緒。
  • 將進(jìn)程PCB插入就緒隊列。

4)進(jìn)程約束關(guān)系

分兩種情況:
1.競爭系統(tǒng)資源而引起的間接相互制約關(guān)系。
2.進(jìn)程之間存在共享數(shù)據(jù)而引起的直接相互制約關(guān)系。

重點:進(jìn)程互斥

臨界資源:通常把一次僅允許一個進(jìn)程使用的資源稱為臨界資源。一般輸入機,打印機等都有這種性質(zhì)。
臨界區(qū):每個進(jìn)程中,訪問該臨界資源的那段程序稱為臨界區(qū)。是進(jìn)程對公共變量或存儲區(qū)進(jìn)行訪問與修改的程序段。

上面那些滿足條件的進(jìn)程進(jìn)入臨界區(qū)必須互斥!

互斥:多進(jìn)程對公共存儲區(qū)這樣的臨界資源有這樣的恩特店,共享的各方不能同時讀寫同一數(shù)據(jù)區(qū),只有當(dāng)一方讀寫完畢后,另一方才可以讀寫。這種進(jìn)程的制約關(guān)系稱之為互斥。

重點:進(jìn)程同步

概念:相互合作的一組并發(fā)進(jìn)程。在一些關(guān)鍵點上可能需要互相等待與互通消息,這種相互制約的等待與互通消息稱為進(jìn)程同步。

重點:同步機構(gòu)
  • 首先,鎖。包含上鎖和開鎖兩種操作。鎖就是一個物理實體,采用一個標(biāo)志(上鎖開鎖標(biāo)志)代表某種資源的狀態(tài)或并發(fā)程序當(dāng)前的狀態(tài)。
    鎖同步機構(gòu)中,每一個共享的臨界資源都要有一個單獨的鎖位。“0”表示資源可用,“1”表示資源被占用。
    進(jìn)程使用共享資源之前必須完成如下操作:
    1)檢測鎖位的值。 2)如果原來的值為0,將鎖位置置1 。 3)如果原來為1,返回1再考察(有一定時間間隔),不是立即。
    使用完資源后,將鎖置0,稱為開鎖。

  • PV操作。S為可用資源。
    P操作:1)S--,相當(dāng)于占用了一個資源。2)減完大于等于0,進(jìn)程繼續(xù)執(zhí)行(相當(dāng)于還有資源或資源剛好夠用)。3)小于0(缺少資源,等待),該進(jìn)程被封鎖,并將它插入到該信號燈的等待隊列中,轉(zhuǎn)入調(diào)度。
    V操作:1)s++,提供一個資源。 2)相加結(jié)果大于0,進(jìn)程繼續(xù)執(zhí)行。 3)相加結(jié)果小于或等于0,等待隊列移出一個進(jìn)程(它獲得了剛釋放出來的資源)。然后返回本進(jìn)程繼續(xù)執(zhí)行。

進(jìn)程同步的兩個例子:

一、病員就診:
  • 分為看病進(jìn)程,化驗進(jìn)程。
  • 首先看病進(jìn)程執(zhí)行一部分,開出化驗單,轉(zhuǎn)入化驗進(jìn)程。
  • 化驗進(jìn)程化驗完畢得到化驗結(jié)果,并發(fā)送給看病進(jìn)程轉(zhuǎn)入,否則必須等待。

我們用PV操作來實現(xiàn),首先先要理解的是,下面的程序是需要來回轉(zhuǎn)入轉(zhuǎn)出的,不是一個程序執(zhí)行到底,這也體現(xiàn)了進(jìn)程同步的概念。
下面是偽代碼:

main()
{
    int s1=0;//信號燈1,表示看病進(jìn)程,也可以理解為有無化驗單
    int s2=0;//信號燈2,表示化驗進(jìn)程,也可以理解為有無化驗結(jié)果
    cobegin
        labora();
        diagnosis();
    coend
}
labora()
{
    while(化驗工作未完成)
    {
        p(s1);
        化驗工作;
        v(s2);
    }
}
diagnosis()
{
    while(看病工作未完成)
    {
         看病;
         v(s1); //看完病才會提供化驗單
         p(s2);
         diagnosis;
     }
} 

解讀:

  • 首先執(zhí)行l(wèi)abora(),缺少s1,掛起。
  • 進(jìn)入diagnosis(),執(zhí)行看病,看完病v(s1)提供化驗所需要的資源(可以理解為提供了化驗單,化驗工作才能進(jìn)行)。
  • p(s2),s2是化驗進(jìn)程,可以理解為缺少化驗進(jìn)程完的結(jié)果,所以掛起,執(zhí)行l(wèi)abora()。
  • 執(zhí)行化驗工作,然后提供化驗結(jié)果(即提供了v(s2))。
  • 化驗進(jìn)程結(jié)束,轉(zhuǎn)入診斷進(jìn)程,執(zhí)行p(s2),可以理解為獲得了化驗進(jìn)程的結(jié)果才能診斷,最后進(jìn)程完成。
生產(chǎn)者——消費者問題

概念:簡單地來說,就是有一塊公用緩沖區(qū),生產(chǎn)者生產(chǎn)資源,將資源放置到緩沖區(qū)去,而消費者讀消息進(jìn)程, 從緩沖區(qū)提取資源。
設(shè)置:公用緩沖區(qū)是臨界資源,因此設(shè)置三個信號燈empty,full,mutex,分別表示空緩沖區(qū)(默認(rèn)為緩沖區(qū)大小n),滿緩沖區(qū)(初始為0),以及互斥信號燈,占用時為1,占用后為0。

//生產(chǎn)者和消費者操作過程中的偽代碼:
producer()
{
    while(生產(chǎn)未完成)
    {
         ……
         生產(chǎn)一個產(chǎn)品;
         p(empty);
         p(mutex);
         送到有界緩沖區(qū);
         v(mutex);
         v(full);
    }
}
consumer()
{
    while(還要繼續(xù)消費)
    {
        p(full);
        p(mutex);
        從有界緩沖區(qū)取產(chǎn)品;
        v(mutex);
        v(empty);
        ……
        消費一個產(chǎn)品;
    }
}

試想:如果把生產(chǎn)者前兩行申請占用資源的代碼換一下,會發(fā)生什么情況?
提示:死鎖

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 進(jìn)程的描述與控制 1.前趨圖與程序執(zhí)行1.1 前趨圖介紹:描述程序先后執(zhí)行順序,又稱為有向無循環(huán)圖,可記為DAG(...
    孫夢翔閱讀 724評論 0 1
  • ** 本文摘自湯小丹主編《計算機操作系統(tǒng)》(第三版)2.3 進(jìn)程同步 ** 在 OS 中引入進(jìn)程后,雖然提高了資源...
    劉帥_閱讀 3,128評論 0 0
  • 職場日記。 今天 又學(xué)到了一個道理,要想在工作上提升自己首先得學(xué)會溝通。不管是和上司還是同事,好的溝通可以帶來好的...
    不想結(jié)婚的女人閱讀 145評論 0 0
  • 這個世界上 有比男人與女人 更完美的物體 在我視線里 這個世界上 有比人類 更美好的詞語 誕生空氣里 2017年6...
    龍青閱讀 171評論 0 1
  • 溫哥華,有沒有秋天 2015-11-02 【文】令狐小聰 你走的時候是個秋天 庭院里銀杏葉子落下最后一片 ...
    令狐小聰閱讀 426評論 0 0