Futex

Futex ( engelsk  futex , forkortelse for engelsk  fast userspace mutex ) er en letvægts-synkroniseringsprimitiv på lavt niveau [1] , på grundlag af hvilken andre primitiver og mekanismer implementeres, såsom mutexes , semaforer og betingelsesvariable [2] . Futexes kan også deltage i organiseringen af ​​mere komplekse synkroniseringsmekanismer, såsom barrierer og læse-skrive-låse , hvilket giver dig mulighed for samtidigt at vække en gruppe opgaver. Det blev oprindeligt introduceret i tidlige versioner af Linux 2.5 kernen [1] . Senere blev en næsten identisk primitiv implementeret i kernenWindows [3] .

Historie

Dukkede først op i Linux-kerneversion 2.5.7, semantisk stabilisering sluttede i version 2.5.40 .

Udviklet af Hubertus Franke (ved IBM 's Thomas Watson Research Center), Matthew Kirkwood og Rusty Russell ved IBM Linux Technology Center og Red Hat - udvikler Ingo Molnar.

Generel information

En futex er et justeret heltal i delt hukommelse (for flere processorer) i brugerrummet og en ventekø i kernerummet [4] . For at organisere en futex kræves der mindst én hukommelsesside , kortlagt til adresserummet for hver af de processer, der deltager i futex'en. Systemkald er kun beregnet til streamingbiblioteker i brugerrummet og kun i form af assembly-sprog-instruktioner [5] .

Et delt heltal kan øges eller dekrementeres med én i én assembler - instruktion. Processer knyttet til denne futex venter på, at denne værdi bliver positiv. Alle operationer med futexes udføres næsten fuldstændigt i brugerrummet (i mangel af konkurrence [6] ), de tilsvarende kernefunktioner bruges kun i et begrænset sæt af kontroversielle tilfælde. Dette gør det muligt at øge effektiviteten af ​​at bruge synkroniseringsprimitiver , da de fleste operationer ikke bruger voldgift, og derfor undgår brugen af ​​relativt dyre systemkald ( engelske  system calls ).

CRITICAL_SECTION-objekter i Win32 API'et er tilsvarende optimeret , ligesom FAST_MUTEX i Windows -kernen [7] .

Noter

  1. ↑ 12 Ulrich Drepper . Futexes Are Tricky (engelsk) (PDF)  (utilgængeligt link) . Red Hat Inc. (11. december 2005). Hentet 16. juni 2019. Arkiveret fra originalen 16. juni 2019.  
  2. Remi Denis-Courmont. Andre anvendelser af futex  . Remlab . Remlab.net (21. september 2016). Hentet 17. juni 2019. Arkiveret fra originalen 17. juni 2019.
  3. Remi Denis-Courmont. Tilstandsvariabel med futex  . Remlab . Remlab.net (21. september 2016). Hentet 16. juni 2019. Arkiveret fra originalen 16. juni 2019.
  4. Oshana, 2015 , 8.12 Hold dig ude af kernen, hvis det overhovedet er muligt.
  5. Scott, 2013 .
  6. Doug Abbott. Pthreads-implementeringer // Linux til indlejrede og realtidsapplikationer, 3. udgave. - Newnes, 2012. - 296 s. — ISBN 978-0-12-391433-0 .
  7. Frigør kodelåse i kritiske sektioner under Windows . Dato for adgang: 13. januar 2010. Arkiveret fra originalen 24. december 2013.

Litteratur

Links