臨界區互斥的硬體解決
基本硬體機制包括禁止中斷、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 禁止中斷 這是最簡單的方法,程序一旦進入臨界區就禁止一切中斷,在離開臨界區前放開中斷,但是該方案有如下致命的弱點 將禁止一切中斷的權利賦予普通使用者,若使用者沒有開放中斷,系統的正常執行將受到影響。不適合...
臨界區互斥
在考慮寫 之前應該先考慮我們要用什麼資料結構?以及該資料有什麼意義。p0 p1 在這裡,為了實現互斥使用了乙個共享變數turn。為什麼有效?在任意時刻turn的取值只能為0或1.因此條件while turn x 有且僅有乙個會被滿足,因而使得乙個程序得以訪問臨界區。至於turn被誰修改,什麼時候修改...
14臨界區互斥的硬體實現方法
1 臨界區互斥的硬體實現方法 提供了特殊的硬體指令,允許對乙個字中的內容進行檢測和修正,或者是對兩個字的內容進行交換等。2 中斷遮蔽方法 當乙個程序正在使用處理機執行它的臨界區 時,要防止其他程序再進入其臨界區訪問的最簡單方法是禁止一切中斷的發生。典型模式為 關中斷 臨界區 開中斷 這種方法限制了處...