GNU C bibliotek | |||
---|---|---|---|
En del av GNU-verktøykjeden | |||
Generell informasjon | |||
programtype | kjøretidsbibliotek _ | ||
utvikler | GNU-prosjektet | ||
Første utgivelse | 1987 | ||
sårbarheter |
flere
| ||
Tillatelse | GNU LGPL | ||
Faktisk tilstand | Aktiv | ||
Teknisk informasjon | |||
Planlagt inn | C | ||
Versjoner | |||
Siste stabile versjon | 2,34 ( info ) (1. august 2021 (1 år, 2 måneder og 16 dager)) | ||
lesbare filer | |||
Tidssoneinformasjonsformat | |||
redigerbare filer | |||
Tidssoneinformasjonsformat | |||
Lenker | |||
Offesiell nettside kodelager feilsporing | |||
GNU C-biblioteket , vanligvis kjent som glibc , er standard kjøretidsbibliotek for GNU C - språket . Den distribueres under vilkårene i GNU LGPL -lisensen .
På systemer der det brukes, brukes dette C -biblioteket som gir og definerer systemanrop og andre grunnleggende funksjoner av nesten alle programmer. Det er mye brukt på GNU - systemer og systemer basert på Linux -kjernen . Den er veldig bærbar og støtter et stort antall maskinvareplattformer . På Linux-systemer er det installert under navnet libc6.
Glibc brukes på systemer som fungerer med mange forskjellige kjerner og forskjellige maskinvarearkitekturer. Den vanligste bruken er på systemer med Linux -kjernen på x86-maskinvare, men den støtter også offisielt følgende maskinvareplattformer: x86 , Motorola 680x0 , DEC Alpha , PowerPC , ARM , ETRAX CRIS , S/390 og SPARC . Den har offisiell støtte for Hurd- og Linux- kjerner , selv om det er kraftig lappede versjoner tilgjengelig som fungerer med FreeBSD- og NetBSD-kjerner (som tilfellet er med henholdsvis Debian GNU/kFreeBSD og Debian GNU/NetBSD ). Den brukes også (i modifisert form) som BeOS -boken og dermed i Haiku .
Glibc gir ikke bare funksjonalitet i henhold til POSIX-spesifikasjonene, men gir også GNU-utvidelser til den standarden, slik at applikasjoner kan skrives for POSIX eller for GNU. Glibc implementerer også kjøretidsheuristikk for minneadministrasjon.
Funksjonen mallockan ha mye kompleksitet bak seg. Det er ikke bare begrenset til å reservere den nødvendige mengden dynamisk minne i minnehaugen som administreres av operativsystemkjernen. Glibc opprettholder flere blokker med dynamisk minne som overskrider kapasiteten som kreves. Disse blokkene administreres når det passer deg uten at du trenger å ringe operativsystemkjernen kontinuerlig. [ 1 ]
Et annet eksempel på kjøretidsheuristikk implementert i Glibc består i å velge systemkallet som tilsvarer arkitekturen og versjonen av Linux. [ 2 ] Linux har flere systemanrop og ikke alle er tilgjengelige for alle arkitekturer. I tillegg, for samme systemanropsspesifikasjon kan det være forskjellige implementeringer, for eksempel den som har ansvaret for å avkorte filer ( truncatefra Glibc). Dette systemanropet har to versjoner i Linux: truncateog truncate64. Glibc tar seg av å velge riktig når et program ringer truncatefra Glibc.
GNU C-biblioteket gir funksjonen syscallfor å kunne påkalle kjernespesifikke systemanrop. [ 3 ] Hvis systemkjernen ikke har det forespurte systemkallet , returnerer Glibc verdien -1og feilkoden ENOSYS(funksjonen er ikke implementert) lagres i variabelen errno. Et eksempel på funksjonalitet som krever bruk av syscall()er futexLinux-systemkallet. Dette kallet brukes av Glibc for å implementere PThreads mutex - låser på GNU /Linux . [ 4 ] Glibc tilbyr ikke en innpakning som skal brukes direkte av en brukerplassapplikasjon. [ 5 ] Ingen innpakning tilgjengelig, programmerer kan bruke via GNU proxy-funksjon . Detaljene til maskinvarearkitekturen når du kaller opp kjernen må administreres av applikasjonen. Detaljene i C-språkkonvensjonen håndteres av Glibc: lagre og gjenopprett registre, aktiver programvareavbrudd for kjerneinnføring , returverdi for systemanrop og variabel . Bruk gjør applikasjonsportabilitet vanskelig, men det er enklere enn å måtte administrere registre, returverdier og programvareavbrudd i assembler. futexsyscallerrnosyscall
Vanligvis bruker ikke en applikasjon knyttet til C-biblioteket innebygde rutiner som selv håndterer bruken av Linux-systemanropsgrensesnittet. Å gjøre det betyr å forstyrre forvaltningen av biblioteket. brkFor eksempel, bruk av y -systemanrop sbrksom håndterer pausepekeren (programbrudd) forstyrrer malloc.
Det første som skal kjøres i et Glibc-koblet program er en rekke rutiner kalt fra assembler-filen start.S. Denne filen tilhører GNU C-biblioteket. Initialiserer en rekke funksjonspekere og anrop __libc_start_main. Denne funksjonen utfører ytterligere initialiseringer, inkludert å oppdage prosessorfamilien for å velge optimaliserte versjoner av bibliotekfunksjonene. Deretter mainkalles funksjonen. [ 6 ]
GNU-utvidelsene har implementert forskjellige funksjoner som senere ble standardisert som en del av C-språket i C90- og C99-standarden.
Glibc brukes av GCC . Portabiliteten til GCC+Glibc har gjort det mulig for Intel å optimalisere distribusjonen av GNU/Linux Clear Linux. Når de kompilerer med GCC, bruker de et alternativ som er tilgjengelig for å generere flere versjoner av en programrutine. Dette gjør dem i stand til å ha operativsystemet optimalisert for ulike generasjoner av prosessorer. De bruker deretter Glibcs deteksjons- og selvoptimaliseringsevne for å laste CPU -optimaliserte bibliotekbinærfiler . Disse binærfilene distribueres med Clear Linux, og opprettholder flere versjoner av det samme biblioteket. [ 7 ] Ytelsesresultatene gir en fordel på mer enn 10 % til fordel for Clear Linux mot Ubuntu 17.10. [ 8 ]
libc.[a,so]-biblioteket, som implementerer funksjonaliteten til C-språkstandarden og GNU C, omfatter totalt ca. 500 system- og funksjonskall.