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)