临界区域问题

问题:

教材:operating system concepts [sixth edition]的汉化版,高等教育出版社

原著:Abraham Silberschatz
问题:临界区域问题(7章2小节)
描述:书中对解决两个进程的临界区域问题提出以下这样1个解决方案,并给出
         评述,在下关键对评述不理解。
         解决方案:让两个进程共享一个 普通变量turn,其初值为0或1。如果  
              turn == i,那么进程Pi(i为0或1)允许在其临界区内执行。进程Pi的
              结构如下:

           do{
               while (turn != i);
               临界区
               turn = j;
               剩余区
           }while(1)
        
         评注说这一方案确保了每一个时刻只有一个进程处于临界区域。然而,它
      不满足前进要求(按书就是有空让进的意思),因为它要求进程在临界区中
      执行时要严格交替。例如,如果turn == 0且P1就绪要进入其临界区,那么
      尽管P0可能在其 剩余区段 ,P1并不能这样做 。  (哪样做啊,是指P1不能
      进入自己的 临界区吗?这又怎么可能,不是有turn = j 吗 ,另一个进程肯
      定可以检测到这一改变,马上进入相应临界区,根本不会管这个进程在不在

     剩余区,又怎么会不能呢?)

解答:

这个关键是要理解文中所说的:
"执行时要严格交替",
也就是说P1不能连续执行两次临界区,
比如,对于P1而言:
               while (turn != 1);
               临界区
               turn = 0; //turn被赋了0后,P0还在长期执行于其剩余区中,可是P1要继续下走
               剩余区
               while (turn != 1);  //这个时刻就是所谓的"P1并不能这样做"的状态
               临界区
               turn = 0;
               剩余区


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解决死锁问题可以使用多个方法之一是“dump死锁临界区”。当发生死锁时,系统中的资源被互相锁定,无法继续进展。为了解除死锁,我们可以借助“dump死锁临界区”的方式来分析和识别问题。 首先,我们需要定位到发生死锁的临界区。这个临界区是指导致死锁发生的关键资源等待和竞争的区域。我们可以使用各种调试工具和技术,如追踪系统日志、分析程序源代码、基于日志的调试等,来找到可能引发死锁的代码段。 在定位到临界区后,我们可以通过“dump死锁临界区”的方式来进一步分析问题。这一步通常需要使用专门的调试工具,如调试器、性能分析器等。我们可以在死锁发生时,通过工具从临界区中获取当前的资源锁定情况、线程状态、调用栈等信息,并将其“dump”(转储)到一个文件或者内存中进行后续分析。 通过获取临界区的“dump”,我们可以获得关键数据进行死锁分析和定位。我们可以从中获得发生死锁的原因、引发死锁的具体条件,以及参与死锁的线程和资源等信息。这样有助于我们深入分析和识别问题,并采取相应的解决措施。 综上所述,“dump死锁临界区”是一种常用的解决死锁问题的方法。它通过获取临界区的关键信息,帮助我们分析和识别死锁的发生原因,并采取相应的解决措施。此方法需要借助专门的调试工具来实现,并能够提供有价值的信息用于后续的死锁分析和解决工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值