iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0

臨界區間問題(Critical Section Problem)的發生是因為共用變數(shared variable)被更改時可能會中斷,若某些指令我們可以一行完成,就可以避免 race condition 的問題。前面說的 Peterson's Solution 是軟體上的支援,若硬體可以將指令變成像原子一樣,是無法中斷執行的最小單元 atomic instructions ,我們就可以用這些特殊的指令來解決臨界區間問題。
以下提供兩個硬體指令例子。

Atomic TestAndSet()

  • TestAndSet():除了 lock 一開始被宣告為 False 之外,TestAndSet() 都會上鎖(lock = True),並返回 value。

  • 只有第一個行程做完(因為 lock initialize False)才會把 lock 解開給其他行程做,當第一個行程在做的時候,其他行程去執行 TestAndSet(),都會被 lock 住。

  • 不符合 Bounded waiting。
    https://ithelp.ithome.com.tw/upload/images/20241007/20168766DmUpJrVP7U.png
    https://ithelp.ithome.com.tw/upload/images/20241007/20168766Ynnu0PrRpa.png

  • 使用 test_and_set() 製作符合 Bounded waiting 之互斥:任一個進入 CS 的行程都要經過 n-1 次。
    共用變數:
    https://ithelp.ithome.com.tw/upload/images/20241007/20168766OsaAZR1FEb.png
    程式碼:
    https://ithelp.ithome.com.tw/upload/images/20241007/20168766pPCY4Q5Yyw.png

Atomic Swap()

  • Swap():先 call Swap 的取得進入 critical section 的權力,執行完成後將 token 還給 lock(lock = False)。
  • 不符合 Bounded waiting。
    https://ithelp.ithome.com.tw/upload/images/20241007/20168766QmyFyj4ZF6.png
    https://ithelp.ithome.com.tw/upload/images/20241007/20168766mqnbOGKZr7.png

參考:周志遠作業系統 Ch6: Process Synchronization (D): Hardware Support


上一篇
ch6-Peterson's Solution for Two Processes
下一篇
ch6-Mutex, Condition Variables, Semaphore
系列文
十年後重讀作業系統恐龍本30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言