操作系統之QQ作業-10

  1. 管程由幾個部分組成?
    管程是一種高級同步工具,是一種特殊的軟件模塊,有這些部分組成:
    a.局部於管程的共享數據結構說明
    b.對該數據結構進行操作的一組過程
    c.對局部於管程的共享數據結構設置初始值的語句
    簡單可以這樣說明:管程=數據結構+操作+對數據結構中的初始值設置

  2. 條件變量的作用是什麼?
    管程必須使用條件變量提供對同步的支持,這些條件變量包含在管程中,並且只有在管程中才能被訪問。以下兩個函數可以操作條件變量:
    a.cwait(c):調用進程的執行在條件c上掛起,管程現在可被另一個進程使用
    b.csignal(c):恢復在cwait上因爲某些條件而掛起的進程的執行。如果有多種這樣的進程,選擇其中一個。
    此外,管程中的條件變量只能訪問定義在管程裏的條件變量。

附送課堂七問。我是懵了,操作系統磨人

問題1 如果某個管程中存在A和B兩個操作過程,線程P1正在執行A,請問,線程P2可以同時執行A或者B嗎?

//不能,兩個都不能,任何時候只能有一個進程在管程中執行,即線程P1執行A

問題2 如果線程P1執行A的時候阻塞,一定是因爲檢測條件變量嗎?

這是回答是的。這裏可以體現一個空閒讓進的原則,執行A的時候堵塞,但沒有其他進程繼續執行操作,那麼就是條件變量發生變化,導致相關條件隊列的條件發生改變。

問題3 條件變量只能被在管程中定義的過程訪問嗎?

是的,只能在定義的過程中被訪問。條件變量的作用就是爲了實現同步控制,在管程中定義條件變量即可,管程中的條件變量只能訪問定義在管程裏的條件變量。

問題4 如何訪問條件變量?

兩個函數操作條件變量。
cwait(c):調用進程的執行在條件c上掛起,管程現在可被另一個進程使用
csignal(c):恢復在cwait上因爲某些條件而掛起的進程的執行。如果有多種這樣的進程,選擇其中一個。

問題5 條件變量和信號量在控制同步時有什麼區別

條件變量不需要積累信號,wait操作必須在signal操作之前。

問題6 如果父母姐弟在一個盤子裏傳遞橘子和蘋果,用管程控制他們的行爲過程,需要如何定義管程?

不區分拿取操作,設置條件變量來區分橘子和蘋果。滿足橘子的話,就讓兒子拿。滿足蘋果就讓女兒拿。

問題7 定義幾個條件變量控制前驅關係?

put(){
wait(plate);
<把水果放在盤子裏>
if(盤裏是橘子)
     signal(orange);
else
     signal(apple);

}

get(){
<把水果拿出盤子>
if(兒子拿了水果)
     wait(orange);
else
     wait(apple);

signal(plate)}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章