Futex

Futex ( engelska  futex , förkortning för engelska  fast userspace mutex ) är en lågnivålättviktssynkroniseringsprimitiv [1] , på basis av vilken andra primitiver och mekanismer implementeras, såsom mutexer , semaforer och tillståndsvariabler [2] . Futexes kan också delta i organiseringen av mer komplexa synkroniseringsmekanismer, såsom barriärer och läs- och skrivlås , så att du samtidigt kan väcka en grupp uppgifter. Den introducerades ursprungligen i tidiga versioner av Linux 2.5 -kärnan [1] . Senare implementerades en nästan identisk primitiv i Windows -kärnan [3] .

Historik

Dök upp först i Linux-kärnan version 2.5.7, semantisk stabilisering slutade i version 2.5.40 .

Utvecklad av Hubertus Franke (vid IBM :s Thomas Watson Research Center), Matthew Kirkwood och Rusty Russell vid IBM Linux Technology Center och Red Hat- utvecklaren Ingo Molnar.

Allmän information

En futex är ett justerat heltal i delat minne (för flera processorer) i användarutrymmet och en väntekö i kärnutrymmet [4] . För att organisera en futex krävs minst en sida minne , mappad till adressutrymmet för var och en av processerna som deltar i futexen. Systemanrop är endast avsedda för streamingbibliotek i användarutrymmet och endast i form av instruktioner för assemblerspråk [5] .

Ett delat heltal kan ökas eller minskas med en i en assemblerinstruktion . Processer kopplade till denna futex väntar på att detta värde blir positivt. Alla operationer med futexes utförs nästan helt i användarutrymmet (i avsaknad av konkurrens [6] ), motsvarande kärnfunktioner används endast i en begränsad uppsättning kontroversiella fall. Detta gör det möjligt att öka effektiviteten av att använda synkroniseringsprimitiver , eftersom de flesta operationer inte använder arbitration, och därför undviker användningen av relativt dyra systemanrop ( engelska  system calls ).

CRITICAL_SECTION-objekt i Win32 API är på liknande sätt optimerade , liksom FAST_MUTEX i Windows -kärnan [7] .

Anteckningar

  1. ↑ 12 Ulrich Drepper . Futexes Are Tricky (engelska) (PDF)  (inte tillgänglig länk) . Red Hat Inc. (11 december 2005). Hämtad 16 juni 2019. Arkiverad från originalet 16 juni 2019.  
  2. Remi Denis-Courmont. Andra användningsområden för futex  . Remlab . Remlab.net (21 september 2016). Hämtad 17 juni 2019. Arkiverad från originalet 17 juni 2019.
  3. Remi Denis-Courmont. Tillståndsvariabel med futex  . Remlab . Remlab.net (21 september 2016). Hämtad 16 juni 2019. Arkiverad från originalet 16 juni 2019.
  4. Oshana, 2015 , 8.12 Håll dig utanför kärnan om det är möjligt.
  5. Scott, 2013 .
  6. Doug Abbott. Pthreads-implementationer // Linux för inbyggda och realtidsapplikationer, 3:e upplagan. - Newnes, 2012. - 296 sid. — ISBN 978-0-12-391433-0 .
  7. Bryt dig fri från kodlås i kritiska sektioner under Windows . Datum för åtkomst: 13 januari 2010. Arkiverad från originalet den 24 december 2013.

Litteratur

Länkar