zoukankan      html  css  js  c++  java
  • 临界区的硬件互斥方案

    临界区互斥的硬件解决

    基本硬件机制包括禁止中断、Test-and-Set指令、Swap指令

    1、禁止中断

       这是最简单的方法,进程一旦进入临界区就禁止一切中断,在离开临界区前放开中断,但是该方案有如下致命的弱点:


    将禁止一切中断的权利赋予普通用户,若用户没有开放中断,系统的正常运行将受到影响。

    不适合于多处理机系统,因为一个进程只能禁止本CPU的中断,其它CPU上的进程仍然会使用互斥资源。

    2、Test-and-Set指令

       (读和写在一条指令内完成)在许多计算机中都提供了专门的硬件指令Test-and-Set,简称TS,不同的机器TS略有不同,在IBM370中称为TS指令,在Intel 8086中称为XCHG指令,但是它们的基本功能是相同的。


    test_and_set指令语义:
    function test_and_set (var target :boolean):boolean;
    begin 
      boolean test_and_set:=target;

      target:=true;

      return test_and_set;

    end;

    其中: target有两种状态,当target为False时表示资源未用,若为True时表示资源正在使用。

    用test_and_set指令实现互斥: 可以为每个临界资源设置一个布尔变量lock并赋予初值False,用TS指令将变量lock状态记录于变量TS中,并将True赋予lock,这等效于关闭了临界区,使得任何进程不能进入

    repeat
      while test_and_set (lock) do no_op;
      临界区;
      lock:=false;
      剩余区;
    until false; 

    上段程序检查TS指令执行后TS状态,若为false表示进程可以进入临界区,否则不断测试执行TS指令后的TS变量值直到为假。

    3、Swap指令

       交换两个字的内容(在一条指令内,不可分割)


    swap指令语义:
    procedure swap(var a,b:boolean);
      var temp:boolean;
      begin 
        temp:=a; 
        a:=b;
        b:=temp;
      end;

    用swap实现互斥:

    repeat
      key := true;
      repeat
        swap(lock,key);  //初始lock为false,表示未使用
      until key = false;
      进程的临界区代码CS;
      lock := false;
      进程的其它代码;
    end

  • 相关阅读:
    1144 The Missing Number (20分)
    1145 Hashing
    1146 Topological Order (25分)
    1147 Heaps (30分)
    1148 Werewolf
    1149 Dangerous Goods Packaging (25分)
    TypeReference
    Supervisor安装与配置()二
    谷粒商城ES调用(十九)
    Found interface org.elasticsearch.common.bytes.BytesReference, but class was expected
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3233874.html
Copyright © 2011-2022 走看看