先决条件 – 进程同步 |介绍,临界区,信号量
进程同步是一种用于协调使用共享数据的进程的技术。操作系统中有两种类型的进程:-
- 独立流程 –
在执行过程中不影响或受其他进程影响的进程称为独立进程。 Example 不共享任何共享变量、数据库、文件等的进程。 - 合作流程——
在执行时影响或受其他进程影响的进程称为协作进程。示例 共享文件、变量、数据库等的进程为协作进程。
进程同步主要用于共享资源的协作进程。让我们考虑一个例子
//赛车状态图像
多个进程同时尝试访问资源和修改共享数据,并且进程的结果取决于特定的执行顺序,导致数据不一致,这种情况称为竞争条件。这种情况可以通过使用称为同步或进程同步的技术,其中我们只允许一个进程进入和操作临界区中的共享数据。
//CS的视图图
此设置可以在各种区域中定义,例如:
- 入口部分 –
它是决定特定进程进入临界区的进程的一部分,而不是许多其他进程。 - 临界区 –
它是只允许一个进程进入和修改共享变量的部分。这部分进程确保只有其他进程才能访问共享数据的资源。 - 退出部分 –
该进程允许在 Entry Section 中等待的其他进程进入临界区。它检查在一个进程在临界区完成执行后的进程是否可以通过这个退出部分被删除。 - 剩余部分 –
代码中除入口部分、临界区和出口部分之外的其他部分称为剩余部分。
临界区问题必须满足这三个要求:
- 互斥——
它指出,如果进程在临界区中执行,则不允许其他进程在临界区中执行。 - 进步 –
当临界区中没有进程时,来自该执行请求之外的任何进程都可以毫无延迟地进入临界区。只有那些已经请求并有有限时间进入流程的流程才能进入。 - 有界等待——
进程进入的次数必须存在上限,以便在进程发出进入其临界区的请求之后和批准该请求之前允许其他进程进入其临界区。
进程同步由两种方法处理:
- 软件方法 –
在软件方法中,使用一些特定的算法方法来保持数据的同步。与方法一或方法二一样,对于多个二进程,使用临时变量(如(turn)或布尔变量(flag)值)来存储数据。当条件为真时,进程处于等待状态,称为忙等待状态。这并不能满足所有临界区要求。另一种称为 Peterson 解决方案的软件方法最适合同步。它在 Entry Section 中使用两个变量来保持一致性,如 Flag(布尔变量)和 Turn 变量(存储过程状态)。它满足所有三个临界区要求。
//彼得森算法的图像
- 硬件方法 –
同步的硬件方法可以通过 Lock & Unlock 技术来完成。 锁定部分在 Entry Section 中完成,因此只允许一个进程进入临界区,完成执行后,进程移动到 Exit部分,其中完成解锁操作,以便锁定部分中的另一个进程可以重复执行此过程。此过程的设计方式是满足临界区的所有三个条件。//锁的图像
使用中断 –
这些很容易实现。当中断被禁用时,不允许其他进程执行上下文切换操作,这将只允许一个进程进入临界状态。
//中断图像
Test_and_Set 操作 –
这允许布尔值(真/假)作为硬件同步,它本质上是原子的,即不允许其他中断访问。这主要用于互斥应用程序。通过比较和交换函数可以实现类似类型的操作。在这个过程中,一个变量被允许在临界区访问,同时它的锁操作是ON。直到那时,另一个进程处于忙等待状态。因此达到了关键部分要求。