999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

計算機操作系統哲學家進餐問題的教學探討

2009-08-28 09:09:14竇金鳳曹家寶郭忠文劉穎健
計算機教育 2009年14期

竇金鳳 曹家寶 郭忠文 劉穎健

摘要:本文根據多年的教學經驗,利用信號量機制、管程機制等思想對哲學家進餐問題進行研究,提出了解決思路,并在教學實驗過程中進行了驗證。希望與其他相關領域的學習者共享,方便“操作系統”的教學、學習和應用。

關鍵詞:進程同步;哲學家進餐問題;信號量;死鎖;管程

中圖分類號:G642 文獻標識碼:B

1引言

由荷蘭學者Dijkstra提出的哲學家進餐問題(The Dinning Philosophers Problem)是經典的同步問題之一。哲學家進餐問題是一大類并發控制問題的典型例子,涉及信號量機制、管程機制以及死鎖等操作系統中關鍵問題的應用,在操作系統文化史上具有非常重要的地位。對該問題的剖析有助于學生深刻地理解計算機系統中的資源共享、進程同步機制、死鎖等問題,并能熟練地將該問題的解決思想應用于生活中的控制流程。

2問題描述

有五個哲學家,共用一張圓桌,分別坐在周圍的五把椅子上,圓桌上有五個碗和五只筷子,每人兩邊各放一只筷子,如圖1所示。哲學家們是交替思考和進餐,饑餓時便試圖取其左右最靠近他的筷子。

哲學家進餐問題可看作是并發進程并發執行時,處理共享資源的一個有代表性的問題。分析其約束條件:

(1) 只有拿到兩只筷子時,哲學家才能吃飯。

(2) 如果筷子已被別人拿走,則必須等別人吃完之后才能拿到筷子。

(3) 任一哲學家在自己未拿到兩只筷子吃飯前,不會放下手中拿到的筷子。

3用信號量機制解決問題

3.1記錄型信號量

筷子是臨界資源,一段時間只允許一位哲學家使用。為了表示互斥,用一個信號量表示一只筷子,五個信號量構成信號量數組。由于計算機專業本科生先行課開設C語言,所以本文中算法用類C語言描述偽碼算法。算法描述如下:

Semaphore chopstick[5]={1,1,1,1,1};/*分別表示5支筷子*/

Main()

{

cobegin

philosopher(0);

philosopher(1);

philosopher(2);

philosopher(3);

philosopher(4);

coend

}

第I位哲學家的活動描述為:

philosopher (int I)

{

while (true)

{

思考;

wait (chopstick [ I ]);

wait (chopstick [(I+1)%5]);

進餐;

signal (chopstick [I]);

signal (chopstick [(I+1)%5]);

}

}

當哲學家饑餓時,總是先去拿他左邊的筷子,執行wait (chopstick [I]),成功后,再去拿他右邊的筷子,執行wait (chopstick [I+1] %5);成功后便可進餐。進餐畢,先放下他左邊的筷子,然后再放下右邊的筷子。

當五個哲學家同時去取他左邊的筷子,每人拿到一只筷子且不釋放,即五個哲學家只得無限等待下去,引起死鎖。

3.2死鎖問題的解決

預防死鎖即是破壞死鎖的必要條件之一。通常用下列方法解決死鎖問題。

3.2.1破壞請求保持條件

利用原子思想完成。即只有拿起兩支筷子的哲學家才可以進餐,否則,一支筷子也不拿。

解法一:利用AND機制實現第I位哲學家的活動描述為:

philosopher (int I)

{

while (true)

{

思考;

swait(chopstick[(I+1)] % 5,chopstick[I]);

進餐;

ssignal(chopstick[I], chopstick[(I+1)% 5]);

}

}

解法二:利用記錄型信號量機制實現在初始化中增加一個信號量定義:semaphore mutex = 1;

第I位哲學家的活動描述:

philosopher (int I)

{

while (true)

{

思考;

wait(mutex);

wait (stick [ I ]);

wait (stick [(I+1)%5]);

signal (mutex);

進餐;

signal (stick [I]);

signal (stick [(I+1)%5]);

}

}

該方法將拿兩只筷子的過程作為臨界資源,一次只允許一個哲學家進入。

3.2.2破壞環路等待條件

在上述死鎖問題中,哲學家對筷子資源的申請構成了有向環路,如圖2所示。

解法一:奇數號哲學家先拿他左邊的筷子,偶數號哲學家先拿他右邊的筷子。這樣破壞了同方向環路,一個哲學家拿到一只筷子后,就阻止了他鄰座的一個哲學家吃飯。按此規定,將是1、2號哲學家競爭1號筷子;3、4號哲學家競爭4號筷子。兩種算法描述如下:

(1) 第I個哲學家的活動:

philosopher (int I)

{

while (true)

{

思考;

IfI % 2 == 1 then

wait (stick [ I ]);

wait (stick [(I+1)%5]);

進餐;

signal (stick [I]);

signal (stick [(I+1)%5]);

else

wait (stick [(I+1)%5]);

wait (stick [ I ]);

進餐;

signal (stick [(I+1)%5]);

signal (stick [I]);

}

}

(2) 第I個哲學家的活動:

philosopher (int I)

{

while (true)

{

思考;

wait (chopstick[I +(I % 2)];

wait (chopstick[(I+ (I+1) % 2) % 5] )

進餐;

signal (chopstick[I +(I % 2)]);

signal (chopstick[(I+ (I+1) % 2) % 5] );

}

}

解法二:至多允許四位哲學家進餐,將最后一個哲學家停止申請資源,斷開環路。最終能保證有一位哲學家能進餐,用完釋放兩只筷子,從而使更多的哲學家能夠進餐。增加一個信號量定義semaphorecount = 4;算法描述第I個哲學家的活動:

philosopher (int I)

{

while (true)

{

思考;

wait (count);

wait(chopstick[I ]);

wait(chopstick[I+1]mod 5);

進餐;

signal(chopstick[I]);

signal(chopstick[I+1]mod 5)

signal(count)

}

}

解法三:哲學家申請資源總是按照資源序號先大后小的順序,這樣0-3號哲學家先右后左,但是4號哲學家先左后右,改變方向,破壞了環路。算法描述第I個哲學家的活動:

philosopher (int I)

{

while (true)

{

思考;

if I >(I+1) % 5 then

wait (chopstick [I ]);

wait (chopstick [I+1]mod 5);

else

wait (chopstick [I+1]mod 5);

wait (chopstick [I ]);/*哲學家總是先取最 大序號的筷子*/

進餐;

signal (chopstick [I ]);

signal (chopstick [I+1]mod5);

}

}

3.2.3破壞非剝奪條件

打破約束條件(3),設立優先權。比如,根據哲學家等待筷子的時間設定,時間越大優先權越高,優先權高的可以搶奪優先權低的筷子。

4用管程機制解決哲學家進餐問題

在用信號量機制解決同步問題時,往往比較繁瑣,采用面向對象的思想,將資源及資源的共享操作封裝起來,用管程來管理,實現哲學家進餐問題,使用起來更加方便。

算法實現描述如下:

4.1建立管程

monitor PC/*建立管程*/

{

semaphore chopstick [5] = {1,1,1,1,1};

X: condition; /*定義條件變量*/

void Get (int I) /*定義取筷子過程*/

{

If chopstick[I]=1 and chopstick [ ( i+1 )% 5] =1 then

get the chopstick [I] and chopstick [ ( i+1 ) % 5];

else X.wait;/*左右筷子沒有,則等待*/

}

void Put (int i) /*定義放下筷子過程*/

{

put the chopstick [I ] and chopstick ( i+1 ) % 5];

If X.quene then X.signal;/*喚醒等待筷子 的哲學家*/

}

}

4.2使用管程

第I個哲學家的活動:

void philosopher(int I)

{

while(true)

{

思考;

get (I);

進餐;

put (I);

}

}

5結束語

哲學家進餐問題是操作系統中一個常見且復雜的同步問題,它可為多個競爭進程或者線程互斥地訪問有限資源這一類問題的解決提供思路。本文根據多年的教學所得,利用不同的機制探討并提出了這一問題的解決思路。然后提出了解決死鎖問題的相關思路,將其應用到教學實驗中。提出的解決策略可有效地實現,并且避免饑餓和死鎖現象的產生。希望與其他相關領域的學習者共享,方便操作系統的教學、學習和應用。

參考文獻:

[1] Andrew S. Tanenbaum, Modern Operating System[M]. 2nd ed. Englewood Cliffs, New Jersey:Prentice Hall, 2001.

[2] Abraham S. 操作系統概念(影印版)[M].6版. 北京: 高等教育出版社,2002.

[3] 湯子瀛,哲鳳屏,湯小丹.計算機操作系統(修訂版)[M].西安:西安電子科技大學出版社,2002.

[4] 周蘇,金海溶,李潔. 操作系統原理實驗[M]. 北京:科學出版社,2003.

主站蜘蛛池模板: 日韩欧美中文在线| 国产微拍一区二区三区四区| 国产激情在线视频| 中文字幕av无码不卡免费 | 国产成年女人特黄特色毛片免 | 国产综合在线观看视频| 日本成人一区| 伊人久久久久久久| 呦系列视频一区二区三区| 国产成人亚洲毛片| 黄片一区二区三区| 91最新精品视频发布页| 香蕉视频在线观看www| 理论片一区| 亚洲欧美日本国产综合在线 | 国产精品欧美日本韩免费一区二区三区不卡 | jizz国产在线| 中文字幕有乳无码| 色综合a怡红院怡红院首页| 青草免费在线观看| 国产福利一区在线| 欧美在线精品怡红院| 国产精品视频系列专区| 嫩草国产在线| 99热这里只有精品久久免费| 国产精品无码AV中文| 亚洲国产成人久久77| 欧洲日本亚洲中文字幕| 国产一区二区网站| 欧美精品一区二区三区中文字幕| 国产亚洲精品97AA片在线播放| 亚洲美女久久| 国产乱人伦偷精品视频AAA| 2020亚洲精品无码| 亚洲天堂视频在线观看免费| 91精品专区| 无遮挡国产高潮视频免费观看 | 国产视频自拍一区| 91精品国产自产91精品资源| 欧美人与动牲交a欧美精品| 精品国产福利在线| 波多野结衣亚洲一区| 亚洲av日韩综合一区尤物| 久久综合色视频| 69综合网| 免费中文字幕一级毛片| 国产亚洲视频免费播放| 毛片一级在线| 欧美视频在线第一页| 国产主播福利在线观看| 国产视频一二三区| 91精品福利自产拍在线观看| 亚洲AⅤ综合在线欧美一区| 亚洲色图欧美| 亚洲日本中文字幕天堂网| 91丝袜在线观看| 久久久无码人妻精品无码| 亚洲精品高清视频| 亚洲成A人V欧美综合| 日本高清在线看免费观看| 在线a网站| 1级黄色毛片| 国产精品亚洲αv天堂无码| 国产尤物视频在线| 国产毛片不卡| 激情综合五月网| 91精品伊人久久大香线蕉| 国产日韩欧美精品区性色| 国产丝袜无码一区二区视频| 全免费a级毛片免费看不卡| 91无码网站| 日a本亚洲中文在线观看| 国产真实乱子伦视频播放| 亚洲一区二区三区麻豆| 一区二区三区国产| 日韩欧美国产成人| 久久特级毛片| 啪啪啪亚洲无码| 看你懂的巨臀中文字幕一区二区| 欧美亚洲另类在线观看| 免费一级毛片不卡在线播放| 精品视频一区二区观看|