進程互斥的硬件解決方案

方案一:中斷屏蔽方法

開關中斷指令:

  • 執行關中斷指令
  • 臨界區操作
  • 執行開中斷指令

特點:

  • 簡單高效
  • 代價高,限制CPU併發能力(臨界區大小)
  • 不適用於多處理器
  • 適用於操作系統本身,不適於用戶進程

方案二:測試並加鎖指令

TSL指令:TEST AND SET LOCK

enter_region:
TSL REGISTER, LOCK                    /*複製鎖到寄存器並將鎖置1*/
CMP REGISTER, #0                      /*判斷寄存器內容是否爲0*/
JNE enter_region                      /*若不是0跳轉到enter_region*/
RET                                   /*返回調用者,進入臨界區*/

leave_region:
MOVE LOCK, #0                         /*在鎖中置0*/
RET                                   /*返回調用者*/

方案三:交換指令

XCHG指令:EXCHANGE

enter_region:
MOVE REGISTER, #1                       /*給寄存器中置1*/
XCHG REGISTER, LOCK                     /*交換寄存器與鎖變量的內容*/
CMP REGISTER, #0                        /*判斷寄存器內容是否爲0?*/
JNE enter_region                        /*若不是0跳轉到enter_region*/
RET                                     /*返回調用者,進入臨界區*/
leave_region:
MOVE LOCK, #0                           /*在鎖中置0*/
RET                                     /*返回調用者*/
發佈了29 篇原創文章 · 獲贊 12 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章