OS 基础教程

进程管理

同步

死锁

内存管理

文件管理

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/os-interested-variable-mechanism.html

感兴趣变量机制


必须确保进度必须由我们的同步机制提供。 在转向变量机制中,由于不想进入临界区的进程并没有考虑其他感兴趣的进程,所以没有提供进展。

另一个进程也将不得不等待,而不管临界区内部没有进程。 如果操作系统可以利用额外的变量以及转向变量,那么这个问题就可以解决,而且我们的问题可以在大部分范围内提供进展。

感兴趣的变量机制利用额外的布尔变量来确保提供进度。

对于进程Pi

Non CS   
Int[i] = T ;  
while ( Int[j] == T ) ;   
Critical Section  
Int[i] = F ;

对于进程Pj

Non CS  
Int [1] = T ;  
while ( Int[i] == T ) ;   
Critical Section   
Int[j]=F ;

在这个机制中,使用了一个额外的变量。 这是一个布尔变量,用于存储在临界区中的兴趣进程。

想要进入临界区的进程首先在入口区检查其他过程是否有兴趣进入内部。 该进程将等待直到另一个进程感兴趣的时间。

在退出部分,该进程使其感兴趣变量的值为false,以便其他进程可以进入临界区。

该表格显示了在场景中获得机会的进程和进程的利益变量的可能值。

Interest [Pi] Interest [Pj] 获得机会的过程
True True 首先表现出兴趣的进程。
True False Pi
False True Pj
False False X

让我们根据需求分析机制。

相互排斥
在感兴趣的变量机制中,如果一个进程有兴趣进入CPU,那么另一个进程将等待,直到它变得不感兴趣。 因此,临界区不能同时存在多个进程,因此该机制保证互斥。

进展

在这种机制中,如果一个进程不想进入临界区,那么它不会阻止另一进程进入临界区。 因此,这种方法肯定会提供进展。

有界等待

为了分析有界等待,让我们考虑两个过程Pi和Pj,合作过程是否希望在关键部分执行。 下面以相对方式显示过程执行的指令。

最初,这两个过程的利益变量是错误的。 进程Pi显示了进入临界区的兴趣。

它将其Interest变量设置为true,并检查Pj是否也有兴趣。 由于其他进程的兴趣变量是错误的,因此Pi将进入临界区。

同时,过程Pi被抢占并且Pj被调度。 Pj是一个合作过程,因此它也想进入关键部分。 它通过将兴趣变量设置为true来显示其兴趣。

它还检查其他流程是否也有兴趣。 我们应该注意到Pi被抢占了,但其感兴趣的变量是真实的,这意味着它需要在临界区进一步执行。 因此Pj不会有机会陷入while循环。

同时,CPU将Pi的状态从阻塞状态变为运行状态。 Pi尚未完成临界区,因此它完成临界区并通过将interest变量设置为False而退出。

现在,当Pi再次想要进入临界区并将其感兴趣的变量设置为true并且检查Pj的感兴趣变量是否为真时,情况是可能的。 在这里,Pj的兴趣变量是True,因此Pi将陷入while循环并等待Pj变得不感兴趣。

因为,Pj仍然停留在while循环中,等待Pi感兴趣的变量变为false。 因此,这两个进程都在等待对方,他们都没有进入临界区。

这是死锁的情况,在死锁的情况下永远不能提供有界的等待。

因此,我们可以说感兴趣的变量机制并不能保证死锁。

架构中立

该机制是在用户模式下执行的完整软件机制,因此它保证了可移植性或架构中立性。