Futex
Ein Futex (englisch fast userspace mutual exclusion etwa „schneller gegenseitiger Ausschluss im Userspace“) ist ein Mutex-Lockingmechanismus, der vom Betrie…
Ein Futex (englisch fast userspace mutual exclusion etwa „schneller gegenseitiger Ausschluss im Userspace“) ist ein Mutex-Lockingmechanismus, der vom Betriebssystem Linux unterstützt wird. Die Besonderheit der Futex-Implementierung liegt darin, dass ein Großteil der Operationen im Userspace ausgeführt wird, und dadurch teure Aufrufe des Kernels vermieden werden. Im Gegensatz zum Mutex dient ein Futex deshalb zur Synchronisation von zu einem Prozess gehörenden Threads.
Die Implementierung stammt von Hubertus Franke (IBM Thomas J. Watson Research Center), Matthew Kirkwood, Ingo Molnár (Red Hat) und Rusty Russell (IBM Linux Technology Center), und wurde ab Version 2.5.7 Teil des Linux-Kernels.[1]
Wie ein Mutex ist ein Futex eine Speicherstelle, die von verschiedenen Prozessen durch Sperr- und Entsperroperationen (lock/unlock) atomar verändert wird. Die Sperroperation stellt dabei sicher, dass alle Prozesse blockiert werden, die einen schon gesperrten Futex selbst sperren möchten (gegenseitiger Ausschluss). Im Gegensatz zu Mutexen werden die Futex-Operationen aber in den statistisch relevanten Fällen im User Space (d. h. direkt vom laufenden Programm) ausgeführt und der Kernel nur dann aufgerufen, wenn ein Prozess blockiert oder aktiviert werden muss.
Linux unterstützt Futexe für die meisten, aber nicht für alle Prozessor-Architekturen.
Im Allgemeinen implementiert ein User-Programm die Futex-Operationen nicht direkt, sondern es verwendet die "pthread_mutex...()" Funktionen in libc, die automatisch je nach Prozessor-Architektur Futexe oder eine interprozess-Mutex-Implementierung verwenden.
Dadurch, dass nicht bei jedem Aufruf das Betriebssystem involviert ist, sind Futexe im Allgemeinen effizienter. Da das Betriebssystem aber nicht mehr die Kontrolle über alle Locks hat, kam es in der Anfangsphase teilweise zu Problemen, wenn Prozesse mit gesperrtem Futex abgestürzt sind.[2] Diese Probleme wurden durch robuste Futexe behoben, die Verwendung von Futexen verlangt aber trotzdem erhöhte Aufmerksamkeit.[3]
Einzelnachweise
- ↑ Hubertus Franke, Rusty Russell, Matthew Kirkwood, Fuss, futexes and furwocks: Fast Userlevel Locking in Linux ( vom 22. September 2006 im Internet Archive), Ottawa Linux Symposium, 2002.
- ↑ Ingo Molnár, Robust futexes, Linux Kernel Documentation.
- ↑ Ulrich Drepper, Futexes Are Tricky, Red Hat, 2008 (PDF, 190 kB).
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.