工艺应用 Synchronization:操作系统中的关键部分问题

什么是流程 Sync讴歌?
工艺应用 Sync汉化 是以任何两个进程都无法访问相同的共享数据和资源的方式协调进程执行的任务。
在多进程系统中,当多个进程同时运行时,多个进程试图同时访问同一共享资源或数据时,就特别需要这种机制。
这会导致共享数据不一致。因此,一个进程所做的更改不一定能反映在其他进程访问相同共享数据时。为了避免这种数据不一致,各个进程需要彼此同步。
如何处理 Synchronization 有效吗?
例如,进程 A 正在修改内存位置中的数据,而另一个进程 B 则试图从该内存位置读取数据。 同 内存位置。第二个进程读取的数据很有可能是错误的。
程序的各部分
以下是关键部分的四个基本要素:
- 参赛部分: 它是决定特定进程的进入的进程的一部分。
- 关键部分: 这部分允许一个进程进入和修改共享变量。
- 退出部分: 退出段允许在入口段等待的其他进程进入临界段。它还会检查已执行完毕的进程是否应该通过此段被移除。
- 剩余部分: 所有其他部分 Code不在关键部分、入口部分和出口部分的内容,被称为剩余部分。
什么是临界区问题?
关键代码段是指在特定时间点只能由单个进程访问的代码段。该代码段包含其他进程必须访问的共享数据资源。
- 进入临界区由wait()函数处理,用P()表示。
- 临界区的退出由 signal()函数控制,表示为 V()。
在临界区中,只能执行一个进程。其他进程在等待执行其临界区时,需要等到当前进程执行完毕。
临界区规则
关键部分必须遵守所有三条规则:
- 互斥: 互斥是一种特殊类型的二进制信号量,用于控制对共享资源的访问。它包含优先级继承机制,以避免扩展优先级反转问题。一次只能有一个进程在其临界区中执行。
- 进展情况: 当临界区内没有进程,而有进程想要进入临界区时,可以使用这种解决方案。此时,其余进程(不在各自的剩余区)需要在有限的时间内决定哪个进程应该进入临界区。
- 等待限制: 当一个进程请求进入临界区时,系统对能够进入临界区的进程数量存在限制。因此,当达到限制时,系统必须允许该进程的请求进入其临界区。
关键部分的解决方案
进行中 Sync时间化,临界区起着主要作用,因此必须解决这个问题。
以下是一些广泛使用的解决临界区问题的方法。
彼得森解决方案
彼得森解法是解决临界区问题的常用方法。该算法由一位名叫彼得森的计算机科学家开发,因此得名彼得森解法。
在此解决方案中,当一个进程处于临界状态时,另一个进程将只执行其余代码,反之亦然。此方法还有助于确保在特定时间只有一个进程在临界区运行。
例如:
PROCESS Pi
FLAG[i] = true
while( (turn != i) AND (CS is !free) ){ wait;
}
CRITICAL SECTION FLAG[i] = false
turn = j; //choose another process to go to CS
- 假设有 N 个进程(P1、P2、…PN),并且每个进程在某个时刻都需要进入临界区。
- 系统维护一个大小为 N 的 FLAG[] 数组,其默认值为 false。因此,当进程需要进入临界区时,必须将该标志位设置为 true。例如,如果进程 Pi 想要进入临界区,它会将 FLAG[i] 设置为 TRUE。
- 另一个名为 TURN 的变量表示当前等待进入 CS 的进程编号。
- 在退出时进入临界区的进程会将TURN更改为就绪进程列表中的另一个数字。
- 例如:回合数为 2,则 P2 进入临界区,退出时回合数为 3,因此 P3 跳出等待循环。
Sync认证硬件
有时,临界区的问题也可以通过硬件来解决。一些操作系统提供了一种锁定功能,进程在进入临界区时会获取一个锁,并在离开临界区后释放该锁。
因此,当另一个进程试图进入临界区时,由于临界区已被锁定,因此无法进入。只有当它自己获得锁并空闲时,它才能进入临界区。
互斥锁
Sync对于每个人来说,硬件同步并非一个简单的实现方法,因此也引入了一种称为互斥锁的严格软件方法。
在这种方法中,在代码的入口部分,获取对临界区内使用的关键资源的锁定。在出口部分,释放该锁定。
Semaphore 解决方案
Semaphore 信号量是一个非负的、线程间共享的变量。它是解决临界区问题的另一种算法或方案。它是一种信号机制,等待信号量的线程可以被另一个线程发出信号。
它使用两个原子操作:1)等待,以及 2)发出进程同步信号。
例如:
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;


