个性化阅读
专注于IT技术分析

系统Peterson解决方案

这是在用户模式下实现的软件机制。这是一个繁忙的等待解决方案, 只能针对两个进程实施。它使用两个变量, 即转变量和关注变量。

解决方案的代码如下

# define N 2 
# define TRUE 1
# define FALSE 0 
int interested[N] = FALSE;
int turn; 
voidEntry_Section (int process) 
{
	int other; 
	other = 1-process;
	interested[process] = TRUE;
	turn = process; 
	while (interested [other] =True && TURN=process);
}
voidExit_Section (int process)
{
	interested [process] = FALSE;
}

到目前为止, 我们的每个解决方案都受到一个或另一个问题的影响。但是, Peterson解决方案为你提供了所有必要的要求, 例如互斥, 进度, 有限的等待时间和可移植性。

彼得森解决方案的分析

voidEntry_Section (int process) 
{
	1. int other; 
	2. other = 1-process;
	3. interested[process] = TRUE;
	4. turn = process; 
	5. while (interested [other] =True && TURN=process);
}

Critical Section 

voidExit_Section (int process)
{
	6. interested [process] = FALSE;
}

这是两个线程的解决方案。让我们考虑两个协作线程P1和P2。入口部分和出口部分如下所示。最初, 感兴趣的变量和turn变量的值为0。

最初, 线程P1到达并想要进入关键部分。它将感兴趣的变量设置为True(指令行3), 还将turn设置为1(行号4)。由于P1完全满足第5行中给出的条件, 因此它将进入临界区。

P1 → 1 2 3 4 5 CS

同时, 进程P1被抢占, 进程P2被调度。 P2还希望输入关键部分并执行输入部分的指令1、2、3和4。在指令5上, 由于不满足条件(其他相关变量的值仍为true), 它被卡住。因此, 它进入了繁忙的等待。

P2 → 1 2 3 4 5

再次安排P1并通过执行指令no来完成关键部分。 6(将关注变量设置为false)。现在, 如果P2检查, 则它将满足条件, 因为其他进程的关注变量变为false。 P2也将进入关键部分。

P1 → 6 
P2 → 5 CS

任何线程都可能多次进入关键部分。因此, 该线程以循环顺序发生。

互斥

该方法可以确保互斥。在进入部分中, while条件涉及两个变量的标准, 因此一个线程不能进入关键部分, 直到另一个线程感兴趣并且该线程是最后一个更新转向变量的线程。

进展

不感兴趣的进程将永远不会阻止其他感兴趣的进程进入关键部分。如果另一个进程也感兴趣, 则该进程将等待。

有限的等待

感兴趣的变量机制失败, 因为它没有提供有限的等待时间。但是, 在Peterson解决方案中, 永远不会发生死锁, 因为首先确定转弯变量的线程肯定会进入关键部分。因此, 如果在执行入口部分的第4行之后抢占了一个进程, 则它肯定会在下一次机会进入关键部分。

可移植性

这是完整的软件解决方案, 因此可以在每种硬件上移植。

os Paterson解决方案
赞(0)
未经允许不得转载:srcmini » 系统Peterson解决方案

评论 抢沙发

评论前必须登录!