解决进程互斥的软硬件方法.pdf
文本预览下载声明
一、利用软件方法解决进程互斥
软件解法 (1)
turn: 1 P1进入临界区
2 P2进入临界区
P1: repeat until turn=1;
‘使用临界区’
turn:=2;
P2: repeat until turn= 2;
‘使用临界区’
turn:=1;
软件解法 (2)
free: 表示临界状态
true: 无进程在临界区(初值)
false:有进程在临界区
L: if free then
begin
free:=false;
‘使用临界区’
end
else goto L;
free:=true
软件解法: (3)
flag[i]=true表示进程Pi要求进入临界区或正在
临界区执行;变量turn用语表示允许进入临界
区的进程编号
Pi: repeat
flag[i]:=true;turn:=j;
while(flag[j]=true and turn=j)do no_op;
‘临界区’ ;
flag[i]:=false;
软件解法的缺点:实现过于复杂,需要高的编程技巧
二、利用硬件方法解决进程互斥
硬件解法 (1)
一、“测试并设置”指令
Function TS
(var lock:boolean):boolean
begin
TS:=lock;
lock:=true
end
二、利用TS实现进程互斥
Var lock:boolean;
repeat
While TS(lock) do skip;
临界区;
lock:=false;
硬件解法 (2)
一、“交换”指令
Procedure Swap(var a,b:boolean)
Var temp:boolean;
begin
temp:=a;
a:=b;
b:=temp
end
二、利用Swap实现进程互斥
每一组共享变量定义一个全局变量
Var lock:boolean;
每个进程定义一个局部变量
Var key:boolean;
key:=true;
repeat
swap(lock,key);
until key=false;
临界区;
lock:=false;
硬件解法 (3)
“开关中断”指令
进入临界区前执行:
执行“关中断”指令
离开临界区后执行:
执行“开中断”指令
硬件解法的缺点:不能满足“让权等待”,很难解决
复杂的进程同步问题,且需要很高的成本(当一个
进程进入临界区,就屏蔽所有中断)
显示全部