利用软件方法解决进程互斥问题-4 算法4( Peterson1981): 该算法组合了算法1和算法4,为了防止三进程进入临界区 而无限期等待,又设置变量turn,表示允许进入临界区的 编号,每个进程在先设置自己标志后再设置tum标志,不 允许另一个进程进入,这时再同时检测另一个进程状态标 志和不允许进入标志,这样可以保证当二个进程同时要求 进入临界区时,只允许一个进程进入临界区。 Pi: repeat flagli]: true; turn: =j; while (flaglj and turn=j) do no op critical section flag[i]: false remainder section until false 2001年9月20日9时1分 计算机操作系统
2001年9月20日9时1分 计算机操作系统 利用软件方法解决进程互斥问题-4 算法4(Peterson 1981): 该算法组合了算法1和算法4,为了防止二进程进入临界区 而无限期等待,又设置变量turn,表示允许进入临界区的 编号,每个进程在先设置自己标志后再设置turn标志,不 允许另一个进程进入,这时再同时检测另一个进程状态标 志和不允许进入标志,这样可以保证当二个进程同时要求 进入临界区时,只允许一个进程进入临界区。 Pi: repeat flag[i]:=true; turn:=j; while (flag[j] and turn=j) do no_op; critical_section; 1 flag[i]:=false; remainder section; until false
利用软件方法解决进程互斥问题4 repeat flaglj: =true; turn:=i while (flagli and turn=i)do no op critical section flag[j]: false remainder section until false 2001年9月20日9时1分 计算机操作系统
2001年9月20日9时1分 计算机操作系统 利用软件方法解决进程互斥问题-4 Pj: repeat flag[j]:=true; turn:=i; while (flag[i] and turn=i) do no_op; critical_section; flag[j]:=false; remainder section; until false
3.1.4利用硬件技术实现互斥 1.提高临界区代码执行中断优先级 这种方法在UNIX和 Windows nt中都使用,它是在单机系 统中有效地实现互斥的一种方法。 因为在传统操作系统中,打断进程对临界区代码的执 行只有中断请求、中断一旦被接受,系统就有可能调用其 它进程进入临界区,并修改此全局数据库。所以用提高临 界区中断优先级方法就可以屏蔽了其它中断,保证了临界 段的执行不被打断,从而实现了互斥。 在多处理机情况下,用提高临界段代码执行的中断优先 级方法是无法保证互斥的,因为在一个处理机上提高中断 优先级并不能阻止其它处理器上的中断,所以必须采用其 它方法。 2001年9月20日9时1分 计算机操作系统
2001年9月20日9时1分 计算机操作系统 3.1.4 利用硬件技术实现互斥 1.提高临界区代码执行中断优先级 这种方法在UNIX和Windows NT中都使用,它是在单机系 统中有效地实现互斥的一种方法。 因为在传统操作系统中,打断进程对临界区代码的执 行只有中断请求、中断一旦被接受,系统就有可能调用其 它进程进入临界区,并修改此全局数据库。所以用提高临 界区中断优先级方法就可以屏蔽了其它中断,保证了临界 段的执行不被打断,从而实现了互斥。 在多处理机情况下,用提高临界段代码执行的中断优先 级方法是无法保证互斥的,因为在一个处理机上提高中断 优先级并不能阻止其它处理器上的中断,所以必须采用其 它方法
2.检测和设置(TS)硬件指令 许多大型机(如IBM370等)和微型机(如 Intel×86等)中 都提供了专用的硬件指令,这些指令全部允许对一个字中的一 内容进行检测和修正,或交换两个字的内容。特别要指出的 是这些操作都是在一个存储周期中完成,或者说由一条指令 来完成,用这些指令就可以解决临界区问题了。 在单机系统中,由于中断的原因,使得一个进程在对一个公 用变量先取来并检测其值,然后修改的这两个动作中,可以 插入其它进程对此公用变量的访问和修改,从而破坏了此公 用变量数据的完整性和正确性。在多机系统中,多处理机共 享主存,因而使得某处理机可插入另一处理机的两个存储访 问周期之间,访问并修改此共享变量。 2001年9月20日9时1分 计算机操作系统
2001年9月20日9时1分 计算机操作系统 2. 检测和设置(TS)硬件指令 许多大型机(如IBM370等)和微型机(如Intel ×86等)中 都提供了专用的硬件指令,这些指令全部允许对一个字中的 内容进行检测和修正,或交换两个字的内容。特别要指出的 是这些操作都是在一个存储周期中完成,或者说由一条指令 来完成,用这些指令就可以解决临界区问题了。 在单机系统中,由于中断的原因,使得一个进程在对一个公 用变量先取来并检测其值,然后修改的这两个动作中,可以 插入其它进程对此公用变量的访问和修改,从而破坏了此公 用变量数据的完整性和正确性。在多机系统中,多处理机共 享主存,因而使得某处理机可插入另一处理机的两个存储访 问周期之间,访问并修改此共享变量
检测和设置(TS)硬件指令-1 对于同一主存块访问要求,即使两个处理机同时提出,存 储控制逻辑也只能让其中之一先访问,但在一个处理机的 两个存储周期间则可以插入另一个处理机的存储周期。现 在用一条指令来完成检测和修改两个功能,这样中断和插 入另一处理机的存储周期均不可能,所以不会影响此公用 变量数据的完整性。 检测和设置(TS)的功能可用 PASCAL语言描述如下: function TS (var lock boolean): boolean egin TS =lock lock: =true end 这条指令在Z800中称为TEST指令,在IBM370中称为TS指令 每次调用TS函数,都把1ock置为true.Lock= false,表示 该资源空闲;Lock=true.表示该资源正在被使用。 2001年9月20日9时1分 计算机操作系统
2001年9月20日9时1分 计算机操作系统 检测和设置(TS)硬件指令-1 对于同一主存块访问要求,即使两个处理机同时提出,存 储控制逻辑也只能让其中之一先访问,但在一个处理机的 两个存储周期间则可以插入另一个处理机的存储周期。现 在用一条指令来完成检测和修改两个功能,这样中断和插 入另一处理机的存储周期均不可能,所以不会影响此公用 变量数据的完整性。 检测和设置(TS)的功能可用PASCAL语言描述如下: function TS (var lock :boolean):boolean begin TS = lock ; lock:=true ; end 这条指令在Z-8000中称为TEST指令,在IBM370中称为TS指令。 每次调用TS函数,都把lock置为true. Lock=false,表示 该资源空闲; Lock=true.表示该资源正在被使用