Futex systemanrop i C

Futex systemanrop i C
Generelt krever trådsynkronisering primitiver bruken av systemanrop fra brukerområdeprogrammer. Systemanropet er iboende uunngåelig for å plassere en tråd i dvale og vente på en annen tråd eller vekke en tråd fra søvn. Å skaffe en ukontaktlås, for eksempel, krever ikke en systemanrop, i det minste ikke naturlig. Futex er middelet til denne utfordringen. En futex er ganske enkelt en øyeblikkelig heltalladresse. Adressen brukes til å identifisere en kø med tråder som venter på å bli behandlet. Verdien av heltallet på det stedet brukes til å utføre den raske banen med atomoperasjoner hvis tilgjengelig, samt for å håndtere situasjoner. Systemanropet futex () lar et program vente på at en verdi ved en bestemt adresse kan endres, samt vekke alle som venter på den adressen. Det er ofte brukt til å implementere det diskutable tilfellet med en delt minnelås, som nevnt i FHOTEX (7). Når en futex (7) handling i brukerområde ikke klarer å fullføre uten feil, kreves en samtale til kjernen for å løse problemet. Voldgift kan brukes til å enten sette anropsprosessen for å sove eller for å vekke en venteprosess. Semantikken som er definert i futex forventes å bli fulgt av innringere av denne funksjonen (7).

Fordi disse semantikkene krever forfatter for ikke-bærbare monteringsinstruksjoner, vil de fleste brukere mest sannsynlig være bibliotekforfattere i stedet for vanlige applikasjonsutviklere. FUTEX er en enkelt systemanrop som utfører mange operasjoner. Det kan virke rart, til og med forvirrende, om ikke direkte. Det vil si at standard prosedyre for en enestående systemanrop: "IOCTL" -systemanropet inneholder betydelig mer operasjoner enn futex. For et annet tilfelle er det lite sannsynlig at programmerere oppdager fordi Glibc skjuler det, selv om det enkelt sokkelanropssystemet implementerer alle sokkelrelaterte funksjoner. Som et resultat, hvis tråder får tilgang til den i en enkelt prosess, kan den spesifiseres som en global variabel eller lagres i et delt minnesegment hvis tråder fra forskjellige prosesser bruker det. En tilstand oppdatert i brukerområde ved bruk av atomoperasjoner lagres i den delte variabelen. Det er ikke behov for et systemanrop når staten sier at det ikke er noen konflikt. Hvis tilstanden indikerer en strid, på den andre siden, blir det gjort en futex -systemanrop for å legge den samtaleoppgaven til å sove.

Eksempel for å forklare futex () systemanrop på C -språk

For å forstå futex () systemanrop på C -språk, har vi installert Ubuntu 20.04 Linux operativsystem. Lag en fil med tittelen “FC.C ”. Tittelen på filen kan endres, men utvidelsen vil forbli den samme. Så for det første, åpne skallet til den installerte Ubuntu 20.04 Linux operativsystem ved å finne det i “applikasjoner” eller sjekke “Ctrl+Alt+T” -tasten. Når du er åpnet, kjør den påførte instruksjonen i terminalen til den installerte Ubuntu 20.04 Linux operativsystem.

$ nano fc.c

Du kan bekrefte den vellykkede utførelsen av filen bare hvis du får GNU Nano Editor på skjermen. Nå må du skrive koden som vises i vedlagte skjermbilde. Dette er et av de mest grunnleggende eksemplene på futex () systemanrop.

er en fil som inneholder erklæringer for forskjellige funksjoner og makroer som kreves for å motta inngang fra innganger og vise utgang på C -programmets utgangsvindu. Det er unødvendig å legge til “stdio. H ”fordi vi kan gi innspill til C -programmet ved å bruke et hvilket som helst annet program, for eksempel DOS, og lagre resultater. Overskriften gir og erklærer en rekke symbolske konstanter og typer, samt en rekke funksjoner. SysCall () er en liten bibliotekfunksjon som kaller systemanropet med den forespurte mengden argumenter og det gitte monteringsspråkgrensesnittet. Når du har forstått den ovennevnte koden, er du klar til å sjekke utdataene. Vi har installert en GCC -kompilator for sammenstilling av kode. GNU C -kompilatoren, eller GCC, er den mest berømte og omfattende brukte kompilatoren blant programmerere som bruker C som programmeringsspråk. GCC er en tilgjengelig kompilator som følger med alle Linux -distribusjoner gratis. Utfør nå den vedlagte kommandoen i terminalen til Ubuntu 20.04 Linux -system.

$ GCC FC.c
$ ./en.ute

Utgangen kan sees i det ovennevnte bildet.

Konklusjon

Denne artikkelen ga en kort introduksjon av futex () systemanrop på programmeringsspråk. Vi har et enkelt og kort eksempel på en futex () systemanrop. Implementering av de samme eksemplene og legge til små endringer kan hjelpe deg med å forstå FUTEX () Systemanrop på C -programmeringsspråk.