原則:程序進入臨界區時關中斷,退出臨界區時開中斷。
為什麼要採用關中斷?關中斷是指在此中斷處理完成前,不處理其它中斷,這樣就可以保證程序不被中斷,從而保證了互斥性(不允許兩個以上的共享該資源的併發程序同時進入臨界區稱為互斥),因此採用關中斷。
缺點?①將禁止一切中斷的權利賦予普通使用者,若使用者沒有開放中斷,系統的正常執行將受到影響。
②不適合於多處理機系統,因為乙個程序只能禁止本cpu的中斷,其它cpu上的程序仍然會使用互斥資源。
乙個程序使用某個臨界資源之前必須完成下列操作:
1.考察鎖位的值
2.若原來的值是為「0」,將鎖位置為「1」(占用該資源)
若原來值是為「1」,該資源已被別人占用,則轉到第1步
3.當程序使用完資源後,將鎖位置為「0 」 ,稱為開鎖操作
bool ts
(bool &x)
else
}
bool s = true;
process pi()
void
swap
(bool &a,bool &b)
bool lock false;
//false表示當前資源可用
process pi()
while
(keyi)
;swap
(keyi,lock)
;//開鎖
}
作業系統(二十)程序互斥的硬體實現方法
目錄 2.3.3程序互斥的硬體實現方法 2.3.3.1 中斷遮蔽 2.3.3.2 testandset指令 tsl指令 2.3.3.3 swap指令 在本系列的第五節曾經提到過中斷的概念,並說中斷是作業系統奪回cpu的唯一方式,在這裡中斷遮蔽的想法與原語原子性保證的想法是一致的,即將臨界區放在開中斷...
作業系統互斥程序問題
假設有n個程序,共享乙個空間 1 當共享區只允許乙個程序占用時候,則訊號量 mutex 的取值範圍 2共享區允許m個程序占用,訊號量取值範圍 1,互斥訊號量初值為 1 變化範圍為 n l 1 當沒有程序進入互斥段時,訊號量值為 1 當有 1 個程序進入互斥段但沒有程序等待進入互斥段時,訊號量值為 0...
作業系統程序互斥演算法
程序互斥原則模板 1 互斥性 列舉所有情況,乙個程序進入臨界區後,另乙個程序不能進入臨界區 2 進展性 列舉乙個程序要求進入臨界區後,能夠進入臨界區和多個程序要求進入臨界區後,能有乙個進入臨界區 3 有限等待性 乙個程序離開臨界區後,不會讓該程序再度進入臨界區,而是讓其他程序也能夠進入臨界區 int...