下面是問題: 每個進程可能處於不同的狀態,不同的事件會導致進程從一個狀態轉移到另一個狀態;這可以用狀態圖表示。使用狀態圖來解釋如何實現暫停隊列信號量。 [10分]如何繪製暫停隊列信號量的狀態圖?
我的圖是否正確,或者我誤解了這個問題?
我的理解是,掛起隊列信號量會保留一個阻塞進程的列表,從當前進程完成其臨界區時(或許隨機)選擇一個進程來解除阻塞。因此狀態圖中的等待狀態。
suspended_queue_semaphore的僞代碼。
struct suspended_queue_semaphore
{
int count;
queueType queue;
};
void up(suspended_queue_semaphore s)
{
if (s.count == 0)
{
/* place this process in s.queue /*
/* block this process */
}
else
{
s.count = s.count - 1;
}
}
void down(suspended_queue_semaphore s)
{
if (s.queue is not empty)
{
/* remove a process from s.queue using FIFO */
/* unblock the process */
}
else
{
s.count = s.count + 1;
}
}
謝謝,請您提供一篇文章的鏈接以供進一步閱讀?我相信這個問題是要求在一個進程中顯示暫停隊列信號量的實現(以及影響),所以從兩種就緒狀態(你的排隊)和運行到三種就緒狀態(你的排隊),運行並等待。 – 2013-05-08 15:32:42
這就是爲什麼我問你指的是哪個信號量。它支持哪些方法(即傳遞哪些消息)。在進程微積分中,信號量將被建模爲兩個進程之間的交互:信號量和它同步的井進程/線程/任務。 AFAIK暫停隊列信號量是暫停進程放入隊列(即先到先服務)的信號量。我不知道你的三狀態信號量的語義,它們是否類似於有兩個隊列的C#監視器(一個用於準備運行,另一個用於等待脈衝?)。 – 2013-05-08 23:38:32
進一步思考這個問題,我認爲信號量可能會干擾從已準備好運行的「已調度」箭頭並將箭頭推向等待狀態。我不知道如何在圖表上顯示 – 2013-05-08 23:38:37