进程的同步和互斥

进程的同步和互斥是操作系统中用于协调多个进程并发执行的重要概念,以下为结合图片内容的详细介绍:

进程同步

  • 概念:并发性带来了异步性,有时需要通过进程同步解决这种异步问题。有的进程之间需要相互配合地完成工作,各进程的工作推进需要遵循一定的先后顺序,以确保系统的正确性和稳定性。
  • 实现方式
    • 信号量
      • 原理:信号量是一个整型变量,它的值只能由P操作(wait操作)和V操作(signal操作)原子性地改变。P操作和V操作是两个不可分割的原语操作,用于实现对信号量的操作。
      • 工作流程:当进程需要使用某一资源时,先执行P操作。如果信号量的值大于0,说明资源可用,P操作将信号量的值减1,进程可以继续执行;如果信号量的值等于0,说明资源已被占用,进程会被阻塞,放入与该信号量相关的等待队列中,直到其他进程执行V操作释放资源。当进程使用完资源后,执行V操作,将信号量的值加1。如果此时有进程在等待该资源,系统会从等待队列中唤醒一个进程,使其能够获得资源并继续执行。
    • 管程
      • 原理:管程是一种抽象数据类型,它将共享资源的操作集中在一个模块中,提供了一组过程来对共享资源进行访问和管理。管程内包含了共享变量、对这些共享变量进行操作的过程以及一个等待队列。
      • 工作流程:进程通过调用管程中的过程来访问共享资源。当一个进程调用管程的过程时,管程会自动检查是否有其他进程正在访问共享资源。如果没有,该进程可以进入管程执行相应的操作;如果有其他进程正在访问,那么调用进程会被阻塞,放入管程的等待队列中,直到共享资源可用。管程保证了在同一时刻只有一个进程能够访问共享资源,从而实现了进程之间的同步。

进程互斥

  • 概念:多个进程在同时访问临界资源时,需要保证在任何时刻都只有一个进程能够进入临界区访问临界资源,其他进程必须等待,直到该进程离开临界区。
  • 组成部分
    • 进入区:检查是否可进入临界区,若可进入,需要“上锁”,以阻止其他进程进入。
    • 临界区:访问临界资源的那段代码,是进程中对临界资源进行操作的关键部分。
    • 退出区:负责“解锁”,即当进程完成对临界资源的访问后,在此区域释放锁,允许其他进程进入临界区。
    • 剩余区:其余代码部分,即进程中除了进入区、临界区和退出区之外的代码。
  • 需要遵循的原则
    • 空闲让进:当临界区空闲时,应允许一个等待进入临界区的进程立即进入,以充分利用资源。
    • 忙则等待:如果临界区正在被访问,其他试图访问临界区的进程需要等待,不能强行进入,确保互斥访问。
    • 有限等待:进程应在有限时间内进入临界区,保证不会因长期等待而饥饿,即每个进程都有机会在合理的时间内进入临界区。
    • 让权等待:当进程不能进入临界区时,要释放处理机,防止忙等,避免浪费CPU资源,使其他进程有机会执行。
  • 实现方式
    • 硬件方法
      • 测试并设置指令(TSL):许多计算机系统提供了特殊的硬件指令来实现进程互斥。TSL指令可以在一条指令中完成对一个内存单元(通常用作锁变量)的测试和设置操作。例如,当一个进程要进入临界区时,它会执行TSL指令,该指令会检查锁变量的值。如果锁变量为0,表示临界区空闲,进程可以进入临界区,并将锁变量设置为1;如果锁变量为1,表示临界区已被占用,进程则需要循环执行TSL指令,不断测试锁变量的值,直到其变为0。
      • 交换指令(SWAP):交换指令也可以用于实现进程互斥。它用于交换两个内存单元的值。进程在进入临界区之前,先将一个表示锁状态的变量与一个初始值为0的变量进行交换。如果交换后锁状态变量的值为0,说明临界区空闲,进程可以进入;否则,进程需要等待一段时间后再次执行交换指令进行测试,直到锁状态变量的值为0。
    • 软件方法
      • Peterson算法:Peterson算法是一种经典的用于解决两个进程互斥问题的软件方法。该算法使用了两个标志位flag[0]flag[1],分别表示两个进程是否想要进入临界区,以及一个变量turn来表示轮到哪个进程进入临界区。当进程Pi想要进入临界区时,它先将flag[i]设置为true,表示自己想要进入,然后将turn设置为j,表示愿意将进入临界区的机会让给进程Pj。接着,进程Pi会检查flag[j]turn的值,如果flag[j]trueturnj,说明进程Pj也想要进入临界区且轮到它进入,那么进程Pi就会等待;否则,进程Pi可以进入临界区。当进程Pi离开临界区时,它将flag[i]设置为false,表示自己已经离开临界区,允许其他进程进入。
    • 信号量:用于进程互斥时,信号量的初始值通常设为1。当进程要进入临界区时,执行P操作。如果信号量的值为1,说明临界区空闲,P操作将信号量的值减为0,进程可以进入临界区;如果信号量的值为0,说明临界区已被占用,进程会被阻塞,直到其他进程执行V操作释放临界区。当进程离开临界区时,执行V操作,将信号量的值加1,以便其他进程能够进入临界区。

进程同步和互斥是保证多进程系统正确运行的重要机制,它们通过不同的方法实现了对共享资源的有序访问,避免了并发访问带来的各种问题,确保了系统的稳定性和数据的一致性。

#牛客创作赏金赛##诺瓦星云求职进展汇总##打工人的工作餐日常##软开人,说说你的烦心事##你想吐槽公司的哪些规定#
操作系统I 文章被收录于专栏

操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的核心程序,是用户与硬件之间的桥梁,也是计算机系统的核心组成部分。

全部评论

相关推荐

03-21 20:39
四川大学 Java
b溃了匿个名先:第二题有毒吧 死活过不去干破防了
投递饿了么等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务