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

  • 相关阅读:
    JAVA编程规则【转自java编程思想】
    诊断 Java 代码: 轻松掌握 Java 泛型
    Linux开启telnet远程登录服务全攻略
    TCP详解
    UNIX环境高级编程文件描述符浅析
    DHCP与BOOTP有什么区别
    Linux 多播(组播)例程
    你所不知道的传输层
    虚电路方式,数据报方式
    java foreach 使用
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3233874.html
Copyright © 2011-2022 走看看