操作系统 Peterson解决方案

操作系统 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解决方案提供了所有必要的要求,如互斥性、进展性、有界等待和可移植性。

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。进入部分和退出部分如下所示。最初,所关心的变量和轮询变量的值均为0。

最初进程P1到达并且想要进入临界区。它将它的所关心的变量设置为True(指令行3)并且将轮询变量设置为1(行号4)。由于行号5中给出的条件完全满足P1,因此它将进入临界区。

P1 → 1 2 3 4 5 CS 

同时,进程P1被抢占,进程P2获得调度。P2也想进入临界区,并执行入口部分的指令1、2、3和4。在第5条指令处,它被卡住了,因为它不满足条件(其他感兴趣变量的值仍然为true)。因此,它进入了忙等待状态。

P2 → 1 2 3 4 5 

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

P1 → 6 
P2 → 5 CS

任何一个进程都可以多次进入临界区。因此,该过程按循环顺序发生。

互斥

该方法确保了互斥。在进入部分,while条件涉及两个变量的条件,因此一个进程在另一个进程感兴趣并且该进程是最后一个更新turn变量的进程之前,不能进入临界区。

进展

一个不感兴趣的进程永远不会阻止其他感兴趣的进程进入临界区。如果其他进程也感兴趣,则该进程将等待。

有界等待

感兴趣的变量机制失败,因为它不能提供有界等待。然而,在Peterson解决方案中,死锁永远不会发生,因为首先设置turn变量的进程将确保进入临界区。因此,如果进程在执行进入部分的第4行后被抢占,则它下一次机会肯定会进入临界区。

可移植性

这是完整的软件解决方案,因此可以在任何硬件上使用。

操作系统 Peterson解决方案

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程