Futex
futex(快速用戶區互斥的簡稱)是一個在Linux上實現鎖定和構建進階抽象鎖如訊號量和POSIX互斥的基本工具。它們第一次出現在內核開發的2.5.7版;其語意在2.5.40固定下來,然後在2.6.x系列穩定版內核中出現。
Futex 是由Hubertus Franke(IBM Thomas J. Watson 研究中心), Matthew Kirkwood,Ingo Molnar(Red Hat)和 Rusty Russell(IBM Linux 技術中心)等人建立的。
Futex 由一塊能夠被多個行程共用的主記憶體空間(一個對齊後的整型變數)組成;這個整型變數的值能夠通過匯編語言呼叫CPU提供的原子操作指令來增加或減少,並且一個行程可以等待直到那個值變成正數。Futex 的操作幾乎全部在用戶空間完成;只有當操作結果不一致從而需要仲裁時,才需要進入作業系統內核空間執行。這種機制允許使用 futex 的鎖定原語有非常高的執行效率:由於絕大多數的操作並不需要在多個行程之間進行仲裁,所以絕大多數操作都可以在應用程式空間執行,而不需要使用(相對高代價的)內核系統呼叫。
參考資料
- Hubertus Franke, Rusty Russell, Matthew Kirkwood, fuss, futexes and furwocks: Fast Userlevel Locking in Linux, Ottawa Linux Symposium 2002, online
外部連結
- Futex manpages(頁面存檔備份,存於互聯網檔案館)
- Futexes Are Tricky(頁面存檔備份,存於互聯網檔案館) (PDF,11 pages), a paper explaining futexes and how to use them(Ulrich Drepper of Red Hat)