下面是问题: 每个进程可能处于不同的状态,不同的事件会导致进程从一个状态转移到另一个状态;这可以用状态图表示。使用状态图来解释如何实现暂停队列信号量。 [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