文档介绍:会计学
1
实现临界段的硬件方法概要
实现临界段的硬件方法
利用处理机提供的特殊指令实现临界区加锁
常见硬件指令有:
一、“Test_and_Set”指令
二、“Swap”指令
三、“Dec_and_Test”指令
第1页/共25页
一、“Test_and_Set”指令
其功能描述为:
Function Test_and_Set(Var target:boolean)
:boolean;
begin
Test_and_Set = target;
target = true;
end;
第2页/共25页
设lock为全局布尔变量,利用Test_and_Set指令,即可实现对临界区的加锁与解锁:
Repeat
while Test_and_Set (lock) do skip
critical section
lock = false;
non-critical section
Until false;
第3页/共25页
“Test_and_Set” 读后置1指令实例:
T&S Ri,Aj 解释为将(Aj)地址所指内存单元内容读到Ri寄存器中,同时将1置入Aj所指的内存单元中.
设Lock为临界段锁变量,则安排如下指令,即可实现加锁与解锁:*
第4页/共25页
临界段
非临界段
A1 <= &Lock;(将Lock单元地址送A1寄存器,Lock初值为0)
Loop: T&S R1, A1;
JRN R1, Loop; (If (R1=1)then goto Loop)
A1 <= &Lock;
(A1) <= 0; (置Lock内存单元为0)
第5页/共25页
二、“Swap”指令
其功能描述为:
Procedure Swap(Var a,b:boolean);
Var temp:boolean;
begin
temp = a;
a = b;
b = temp;
end;
第6页/共25页
设lock为全局布尔变量(初值为假),每个进程设一个局部布尔变量Key。利用Swap指令,可实现对临界区的加锁与解锁。
Repeat
key = true;
repeat
Swap (lock, key);
until key = false;
critical section
lock = false;
non-critical section
Until false;
第7页/共25页
设s为全局整形变量(初值为1) ,利用下面的指令序列,可实现对临界区的加锁与解锁吗?
Repeat
while s <= 0 do skip;
s--;
critical section
s++;
non-critical section
Until false;
第8页/共25页
三、“Dec_and_Test”指令
其功能描述为:
Function Dec_and_Test(Var s:int):boolean;
begin
s = s - 1;
Dec_and_Read = (s >= 0);
end;
第9页/共25页