临界区的硬件互斥方案
2013-08-02 11:31
127 查看
临界区互斥的硬件解决
基本硬件机制包括禁止中断、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
基本硬件机制包括禁止中断、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
相关文章推荐
- 临界区的硬件互斥方案
- Operating System-进程间互斥的方案-保证同一时间只有一个进程进入临界区(3)- TSL指令
- Operating System-进程间互斥的方案-保证同一时间只有一个进程进入临界区(1)- 屏蔽中断,锁变量,严格轮换法
- Operating System-进程间互斥的方案-保证同一时间只有一个进程进入临界区(2)- Peterson解法
- Linux增加外置硬件看门狗方案
- VC下线程同步的三种方法(互斥、事件、临界区)
- (转)互斥对象锁和临界区锁性能比较 .
- 临界区互斥锁
- Linux常见锁比较--自旋锁、互斥锁、信号量、临界区
- 量子化学计算(Gausssian)图形工作站硬件方案
- Qt中QThread 互斥,事件,临界区,信号量
- 磁盘设备硬件出现致命错误,导致请求失败的数据寻回方案
- 互斥同步-临界区,互斥量,信号量,事件的区别
- 高校科研单位全能超算平台(结构流体电磁仿真/分子动力模拟/多GPU深度学习)最新硬件配置方案
- VC下线程同步的三种方法(互斥、事件、临界区)
- 临界区互斥的实现
- 进程互斥的硬件解决方案
- 全志A23方案硬件去掉电池后软件如何修改?
- 华硕服务器 电子支付行业的安全保护之神----华硕服务器IT硬件平台搭建大赛参赛方案 推荐
- EtherCAT伺服驱动器-如何选择硬件开发方案