交大102計算機系統#14 Hoare Monitor
Monitor 中的Process Q被Blocked,進入Monitor的Waiting Queue等待,此時可以讓另一個Process P使用monitor。
若執行的Process P喚醒process Q,Monitor將存在兩個執行中的Process,違反Mutual Exclusive。
Hoare Monitor就是用來解決這個問題。
普通情況下,一個Process進入Monitor中使Procedure,為了確保只有一個Process使用,首先會wait(mutex),封鎖其他Process進入的可能。
執行完畢,離開Procedure,若有的話會優先招喚救命恩人,使救命恩人們優先使用procedure。
若沒有的話,讓出mutex,離開procedure。
假若目前在procedure中的Process Q不幸得進入waiting Queue,他將會執行x.wait:x_cnt++,Waiting Queue中多一個Process。因為被blocked,空出procedure,做其他離開的人都要做的事:招喚救命恩人或直接空出mutex。
接著,使用 semaphor wait(x-sem),將自己正式block起來,停在x.wait中,等待救命恩人的救援。
而此時Procedure被另一個Process P拿去用,Process P還沒做完,但是Process P想當救命恩人,想去看看Waiting Queue中有沒有process需要被救援,使用X.signal,先確認有沒有受難者(x-cnt>0)。
有的話,先去救命恩人表上填上自己的名字next-cnt++,用signal(x-sem)救出卡在wait(x-sem)的Process Q,自己先讓出procedure,將自己block起來(wait(next))。
被救出的Process Q終於能從 x.wait中脫困,執行x.wait最後的 x-cnt--,離開waiting Queue,也完全脫離x.wait,可以繼續執行procedure。
無論下一次Procedure中的Process Q執行完畢或再度進到waiting Queue,只要離開procedure,就會先檢查有沒有救命恩人們待救
或直接空出Mutex,讓其他人可以使用procedure。
若執行的Process P喚醒process Q,Monitor將存在兩個執行中的Process,違反Mutual Exclusive。
Hoare Monitor就是用來解決這個問題。
普通情況下,一個Process進入Monitor中使Procedure,為了確保只有一個Process使用,首先會wait(mutex),封鎖其他Process進入的可能。
執行完畢,離開Procedure,若有的話會優先招喚救命恩人,使救命恩人們優先使用procedure。
若沒有的話,讓出mutex,離開procedure。
假若目前在procedure中的Process Q不幸得進入waiting Queue,他將會執行x.wait:x_cnt++,Waiting Queue中多一個Process。因為被blocked,空出procedure,做其他離開的人都要做的事:招喚救命恩人或直接空出mutex。
接著,使用 semaphor wait(x-sem),將自己正式block起來,停在x.wait中,等待救命恩人的救援。
而此時Procedure被另一個Process P拿去用,Process P還沒做完,但是Process P想當救命恩人,想去看看Waiting Queue中有沒有process需要被救援,使用X.signal,先確認有沒有受難者(x-cnt>0)。
有的話,先去救命恩人表上填上自己的名字next-cnt++,用signal(x-sem)救出卡在wait(x-sem)的Process Q,自己先讓出procedure,將自己block起來(wait(next))。
被救出的Process Q終於能從 x.wait中脫困,執行x.wait最後的 x-cnt--,離開waiting Queue,也完全脫離x.wait,可以繼續執行procedure。
無論下一次Procedure中的Process Q執行完畢或再度進到waiting Queue,只要離開procedure,就會先檢查有沒有救命恩人們待救
或直接空出Mutex,讓其他人可以使用procedure。
謝謝
回覆刪除