先决条件—— 进程同步|介绍 , 临界截面 , 信号灯 进程同步 是一种用于协调使用共享数据的过程的技术。操作系统中有两种类型的进程:-
null
- 独立过程– 在执行过程中不影响或受另一进程影响的进程称为独立进程。示例:不共享任何共享变量、数据库、文件等的进程。
- 合作过程—— 在执行过程中影响或受另一进程影响的进程称为协作进程。例如,共享文件、变量、数据库等的过程就是协作过程。
进程同步主要用于共享资源的协作进程。让我们考虑一个例子 //赛况图像
这种情况下,多个进程试图同时访问资源和修改共享数据,而进程的结果取决于特定的执行顺序,从而导致数据不一致,这种情况称为 竞赛条件 .使用称为同步或进程同步的技术可以避免这种情况,在这种技术中,我们只允许一个进程进入并操作关键部分的共享数据。 //CS视图示意图
可以在不同的区域定义此设置,例如:
- 进入部分—— 它是流程的一部分,决定了在许多其他流程中,一个特定流程是否进入关键部分。
- 关键部分—— 它是只允许一个进程输入和修改共享变量的部分。流程的这一部分确保只有其他流程才能访问共享数据的资源。
- 出口部分—— 该流程允许在进入区等待的另一个流程进入关键区。它检查在关键部分中的流程完成执行后,是否可以通过该退出部分删除该流程。
- 剩余部分- 除入口段、临界段和出口段外,代码的其他部分称为剩余段。
关键截面问题必须满足以下三个要求:
- 互斥—— 它规定,如果一个进程在关键部分执行,则不允许在关键部分执行其他进程。
- 进展—— 当关键部分中没有流程时,来自该执行请求外部的任何流程都可以毫不延迟地进入关键部分。只有那些已请求并有有限时间进入流程的流程才能进入。
- 有界等待—— 一个进程的进入次数必须有一个上限,以便在一个进程提出进入其关键部分的请求后,在该请求被批准之前,允许其他进程进入其关键部分。
进程同步通过两种方法处理:
- 软件方法—— 在软件方法中,使用一些特定的算法方法来保持数据的同步。与方法1或方法2类似,对于多个过程,使用临时变量(如turn)或布尔变量(flag)值来存储数据。当条件为真时,进程将处于等待状态,称为忙等待状态。这并不能满足所有关键部分的要求。
另一种被称为彼得森解决方案的软件方法最适合同步。它在条目部分使用两个变量来保持一致性,比如Flag(布尔变量)和Turn变量(存储流程状态)。它满足所有三个关键部分的要求。
//彼得森算法的图像
- 硬件方法—— 同步的硬件方法可以通过锁定和解锁技术来实现。锁定部分在进入段完成,因此只允许一个进程进入关键段,在其完成执行后,该进程被移动到出口段,在出口段完成解锁操作,以便锁定段中的另一个进程可以重复该执行过程。该工艺的设计应确保临界截面的所有三个条件均得到满足。
//锁的图像
使用中断—— 这些都很容易实现。当中断被禁用时,不允许其他进程执行上下文切换操作,该操作只允许一个进程进入临界状态。
//中断图像
测试和设置操作- 这允许布尔值(真/假)作为硬件同步,这在本质上是原子的,即不允许其他中断访问。这主要用于互斥应用。通过比较和交换功能可以实现类似类型的操作。在这个过程中,当一个变量的锁操作开启时,它被允许在临界区访问。在此之前,另一个进程处于忙碌等待状态。因此,达到了关键截面要求。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END