OS进程同步

什么是进程同步?

进程同步是一种协调进程执行的任务,以使两个进程都无法访问相同的共享数据和资源。

当多个进程一起运行,并且多个进程试图同时访问同一共享资源或数据时,在多进程系统中特别需要它。

这可能会导致共享数据不一致。因此,一个进程所做的更改不一定反映在其他进程访问相同的共享数据时。为了避免这种类型的数据不一致,进程需要彼此同步。

进程同步如何工作?

例如,进程A更改存储位置中的数据,而另一个进程B尝试从同一存储位置读取数据。第二个进程读取的数据很可能会出错。

程序的各个部分

这里是关键部分的四个基本元素:

  • 进入部分:它是确定特定过程进入过程的一部分。
  • 关键部分:该部分允许一个过程输入和修改共享变量。
  • 退出部分:退出部分允许进入部分中正在等待的其他进程进入关键部分。它还检查是否应通过本节删除完成执行的进程。
  • 其余部分: 规范的所有其他部分(不在“关键”,“进入”和“退出”部分中)称为“剩余部分”。

什么是临界区问题?

关键部分是一段代码,可由信号处理在特定时间点进行访问。本节包含其他进程需要访问的共享数据资源。

  • 关键部分的条目由wait()函数处理,并表示为P()。
  • 临界区的出口由signal()函数控制,表示为V()。

在关键部分,只能执行一个过程。等待执行其关键部分的其他进程需要等待,直到当前进程完成其执行。

临界区规则

关键部分必须执行所有三个规则:

  • 互斥:互斥是一种特殊的二进制信号量,用于控制对共享资源的访问。它包括优先级继承机制,以避免扩展优先级反转问题。一次只能在其关键部分执行一个进程。
  • 进度:当没有人在关键部分并且有人想要进入时,将使用此解决方案。然后,不在提醒部分中的那些进程应在限定时间内决定谁应该进入。
  • 绑定等待:当进程请求进入关键部分时,对可以进入其关键部分的进程数量有特定的限制。因此,当达到限制时,系统 必须允许请求处理进入其关键部分。

关键部分的解决方案

在流程同步中,关键部分扮演着主要角色,因此必须解决问题。

这是解决临界截面问题的一些广泛使用的方法。

彼得森解决方案

彼得森的解决方案被广泛用于解决关键截面问题。该算法由计算机科学家彼得森(Peterson)开发,因此被命名为彼得森解决方案。

在此解决方案中,当一个进程在关键状态下执行时,另一个进程仅执行其余代码,相反的情况可能发生。此方法还有助于确保在特定时间在关键部分仅运行单个进程。

PROCESS Pi
FLAG[i] = true
while( (turn != i) AND (CS is !free) ){ wait;
}
CRITICAL SECTION FLAG[i] = false
turn = j; //c //选择另一个进程转到CS
  • 假设有N个进程(P1,P2,… PN),并且每个进程在某个时间点都需要进入关键部分
  • 保留大小为N的FLAG []数组,默认情况下为false。因此,只要进程需要进入关键部分,就必须将其标志设置为true。例如,如果Pi要输入,将设置FLAG [i] = TRUE。
  • 另一个称为TURN的变量表示当前正在等待输入CS的进程号。
  • 退出时进入关键部分的进程会将TURN更改为就绪进程列表中的另一个数字。
  • 示例:匝数为2,然后P2进入关键部分,而退出转弯= 3时,因此P3退出等待循环。

同步硬件

有时,关键部分的问题也可以通过硬件解决。某些操作系统提供了锁定功能,即进程在进入“关键”部分时会获取锁定,并在离开后释放该锁定。

因此,当另一个进程试图进入关键部分时,由于已锁定,它将无法进入。只有通过获取锁本身是免费的,它才能这样做。

互斥锁

同步硬件并不是每个人都可以实现的简单方法,因此还引入了称为Mutex Locks的严格软件方法。

在这种方法中,在代码的输入部分中,在关键部分内部使用的关键资源上获得了LOCK。在出口部分,该锁被释放。

信号量解决方案

信号量只是一个非负变量,在线程之间共享。它是关键部分问题的另一种算法或解决方案。它是一种信号传递机制,并且是一个等待信号量的线程,可以通过另一个线程来发出信号。

它使用两个原子操作:1)等待和2)信号进行过程同步。

示例:

WAIT ( S ):
while ( S <= 0 );
S = S - 1;
SIGNAL ( S ):
S = S + 1;

概要:

  • 进程同步是以一种方式来协调进程的执行:没有两个进程可以访问相同的共享数据和资源。
  • 关键部分的四个元素是:1)进入部分2)关键部分3)退出部分4)提醒部分
  • 关键部分是一段代码,可由信号处理在特定时间点进行访问。
  • 必须由关键部分强制执行的三个必须规则是:1)互斥2)过程解决方案3)绑定等待
  • 互斥是一种特殊的二进制信号量,用于控制对共享资源的访问。
  • 当关键部分中没有人需要有人进来时使用过程解决方案。
  • 在绑定等待解决方案中,一个进程请求进入其关键部分后,有多少个其他进程可以进入其关键部分受到限制。
  • 彼得森的解决方案被广泛用于解决关键截面问题。
  • 关键部分的问题也可以通过硬件同步来解决
  • 同步硬件并不是每个人都可以实现的简单方法,因此还引入了称为Mutex Locks的严格软件方法。
  • 信号量是关键部分问题的另一种算法或解决方案。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁