futex(快速用戶區互斥的簡稱)是一個在Linux上實現鎖定和構建進階抽象鎖如訊號量POSIX互斥的基本工具。它們第一次出現在內核開發的2.5.7版;其語意在2.5.40固定下來,然後在2.6.x系列穩定版內核中出現。

Futex 是由Hubertus FrankeIBM Thomas J. Watson 研究中心), Matthew KirkwoodIngo MolnarRed Hat)和 Rusty RussellIBM 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

外部連結 編輯