zoukankan      html  css  js  c++  java
  • Operation System

    Person's solution 是用来一种基于软件的解决关键区域问题的算法(critical-section).

    它并不是完美的,有可能不对地工作。并且是限制解决两个进程同步的问题。

    可是它非常easy,非常原始,学习起来也是非常轻松的。

    代码例如以下:

    do {
         flag[i] = true;
         turn = j;
         while (flag[j] && turn == j);
         critical section
         flag[i] = false;
         remainder section
    } while (true);

    flag[]事实上是一个2个变量的数组。这里的i标志一个进程,而j标志还有一个进程。

    critical section代表是须要相互排斥进入的一个区间,比方须要改动一些关键的共享数据,这个时候不能让两个进程同一时候改动,否则就会出现不可预知的结果了。记得好像见过阿里巴巴笔试有这种题目。

    有remainder section并不是关键区域,所做的操作是能够并行操作的,结果互不影响。

    这里基本的目的就是两个进程相互排斥地进入critical section。

    那么为什么这个算法是可行的呢?

    这种算法可行,须要满足三个条件:

    1 Mutual exclusion: 相互排斥进入

    2 Progress : 在非remaider section的进程能在一定时间内进入critical section

    3 Bounded waiting: 保证一个进程的等待时间不会过长


    分析:

    如果1 : 两个进程P1, P2同一时候运行了do语句:语句运行为:P1 flag[i] = true; P2 flag[j] = true; P1 turn = j; P2 turn = i; P1 while(flag[j] && turn == j) ;

    这个时候因为P2已经运行了turn = i语句,所以turn == i,那么P1的语句while(flag[j] && turn == j)的turn ==j就为假了,所以这个时候退出循环,P1进入critical section。

    然后P2 while (flag[i] && turn == i);由于这个时候flag[i] 和turn ==i都为真,那么P2就处于等待状态。由于P1和P2是等同的,所以这个情况下,仅仅能有一个进程能够进入critical section的。条件1成立。

    假设继续运行,那么就能够分析条件2也是成立的:由于P1进入了critical section之后运行完成,退出来,那么flag[i] = false,这个语句运行之后,P2 while(flag[i] && turn == i)的flag[i]就为假了。之歌时候P2就能够进入critical section了。

    那么继续分析条件3,能够知道P2的等待时间仅仅是P1运行critical section的时间。这个等待时间一般不会过长。

    其它情况就更加不会冲突了,能够列举全部语句运行的顺序知道,不管两个进程的语句怎样运行,这个算法都是成立的。


    --參考资料:Operating System Concepts



  • 相关阅读:
    Centos 7 zabbix 实战应用
    Centos7 Zabbix添加主机、图形、触发器
    Centos7 Zabbix监控部署
    Centos7 Ntp 时间服务器
    Linux 150命令之查看文件及内容处理命令 cat tac less head tail cut
    Kickstart 安装centos7
    Centos7与Centos6的区别
    Linux 150命令之 文件和目录操作命令 chattr lsattr find
    Linux 发展史与vm安装linux centos 6.9
    Linux介绍
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3815675.html
Copyright © 2011-2022 走看看