Glibc

biblioteca estàndard de llenguatge C de GNU

GNU C Library, comunament coneguda com a glibc, és la biblioteca estàndard de llenguatge C de GNU.[1] Es distribueix sota els termes de la llicència GNU LGPL.

Glibc
Modifica el valor a Wikidata

TipusBiblioteca C POSIX, Runtime (llibreria de programari), paquet GNU i programari lliure Modifica el valor a Wikidata
Versió inicial1987 Modifica el valor a Wikidata
Versió estable
2.39 (31 gener 2024) Modifica el valor a Wikidata
LlicènciaGNU LGPL 2.1 o posterior
GNU LGPL 2.0 o posterior Modifica el valor a Wikidata
Part deGNU toolchain Modifica el valor a Wikidata
Característiques tècniques
Sistema operatiuGNU/Linux, GNU/Hurd, BSD i Unix-like Modifica el valor a Wikidata
Escrit enC Modifica el valor a Wikidata
Format de fitxer de lectura
Format de fitxer d'escriptura
Equip
Creador/sRoland McGrath
Desenvolupador(s)Projecte GNU
Més informació
Lloc webgnu.org… (anglès) Modifica el valor a Wikidata
Stack ExchangeEtiqueta Modifica el valor a Wikidata
Seguiment d'errorsSeguiment d'errors Modifica el valor a Wikidata
Free Software DirectoryLibc Modifica el valor a Wikidata
Guia d'usuariGuia d'usuari Modifica el valor a Wikidata

En els sistemes en què s'usa, aquesta biblioteca de C que proporciona i defineix les crides al sistema i altres funcions bàsiques, és utilitzada per gairebé tots els programes. És molt usada en els sistemes GNU, incloent els que utilitzen el nucli Linux.[2] És molt portable i suporta gran quantitat de plataformes de maquinari. En els sistemes Linux s'instal·la amb el nom de libc6.

Maquinari i nuclis suportats modifica

Glibc és usada en sistemes que treballen amb molts nuclis diferents i diferents arquitectures de maquinari. L'ús més comú és en sistemes amb el nucli Linux en maquinari x86, però també suporta oficialment les següents plataformes de maquinari: x86, Motorola 680x0, DEC Alpha, PowerPC, ARM, ETRAX CRIS, S/390 i SPARC. Té suport oficial per nuclis GNU Hurd i Linux, encara que hi ha disponibles versions amb molts pegats que funcionen amb nuclis de FreeBSD i NetBSD (com és el cas de Debian GNU/kFreeBSD i Debian GNU/NetBSD, respectivament). És també usada (d'una forma modificada) com la libroot de BeOS i per això en Haiku.

Funcionalitat de GNU modifica

 
La biblioteca de C de GNU proveeix la funcionalitat que aïlla les aplicacions del nucli (Linux en l'esquema). Per utilitzar la funcionalitat específica de Linux s'utilitza la rutina syscall() de la biblioteca de C de GNU. O bé una implementació pròpia en assemblador de la crida a sistema. Si una aplicació utilitza la interfície de crides de Linux amb implementacions pròpies de la biblioteca de C en exclusiva, llavors l'aplicació es considera monolítica. Aquesta només depèn de Linux.

La Glibc no sols entrega funcionalitat segons les especificacions POSIX. També ofereix extensions GNU. Les aplicacions poden ser escrites per a POSIX o per a GNU. Glibc també implementa heurístiques en temps d'execució per a la gestió de la memòria.

La funció malloc pot tenir una gran complexitat darrere d'ella. No només es limita a reservar la quantitat demandada de memòria dinàmica en el monticle de memòria (heap) gestionat pel nucli del sistema operatiu. Glibc manté diversos blocs de memòria dinàmica que superen la capacitat demandada. Aquests blocs els administra a conveniència sense necessitat de cridar contínuament al nucli del sistema operatiu.[3]

Un altre exemple d'heurístiques de temps d'execució implementades en Glibc consisteix en l'elecció de la crida a sistema que correspongui segons arquitectura i versió de Linux.[4] Linux disposa de múltiples crides a sistema i no totes estan disponibles per a totes les arquitectures. A més, per a una mateixa especificació de crida a sistema pot haver diferents implementacions, com l'encarregada de truncar arxius (truncate de Glibc). Aquesta crida a sistema compta amb dues versions en Linux: truncate i truncate64. Glibc s'encarrega d'escollir l'adequada quan un programa crida a truncate de glibc.

La biblioteca de C de GNU proveeix la funció syscall per poder invocar crides a sistema específiques del nucli del sistema.[5] Si el nucli del sistema no disposa de la crida al sistema sol·licitada, Glibc retorna el valor -1 i el codi d'error ENOSYS (crida no implementada) queda emmagatzemat en la variable errno. Un exemple de funcionalitat que requereix de l'ús de syscall() és la crida al sistema futex de Linux. Aquesta crida és utilitzada per la Glibc per implementar els panys d'exclusió mútua de PThreads en GNU/Linux.[6] Glibc no proporciona un embolcall per a ser utilitzada directament per una aplicació en espai d'usuari.[7] Sense embolcall disponible, el programador pot utilitzar futex mitjançant la funció proxy syscall de GNU. Els detalls de l'arquitectura del maquinari a l'hora de trucar al nucli han de ser gestionats per l'aplicació. Els detalls de la convenció del llenguatge C són gestionats per Glibc: guardar i restaurar registres, activar la interrupció programàtica d'entrada al nucli, valor de retorn de la crida a sistema i variable errno. Utilitzar syscall dificulta la portabilitat de l'aplicació, però és més fàcil que haver de gestionar en assemblador els registres, valors de retorn i interrupció programàtica.

Normalment una aplicació enllaçada amb la bibilioteca de C no utilitza rutines integrades que manegen per si mateixes l'ús de la interfície de crides a sistema de Linux. Fer això suposa interferir amb la gestió que fa la biblioteca. Per exemple, utilitzar les crides a sistema brk i sbrk que maneguen el punter de trencament (program break) interfereix amb la funció malloc.

El primer que s'executa d'un programa enllaçat amb la Glibc són una sèrie de rutines trucades des de l'arxiu de assemblador start.S. Aquest arxiu pertany a la biblioteca de C del GNU. Inicialitza una sèrie de punters a funció i crida a __libc_start_main. Aquesta funció realitza més inicialitzacions, entre elles detectar la família del processador per escollir versions optimitzades de les funcions de la biblioteca. Després, la funció main és invocada.[8]

Les extensions GNU han implementat diverses funcions que més tard van ser estandarditzades com a part del llenguatge C en el seu estàndard C90 i C99.

Glibc és usada per GCC. La portabilitat de GCC + Glibc ha permès a Intel optimitzar la distribució de GNU/Linux Clear Linux. Al compilar amb GCC utilitzen una opció que té per generar múltiples variants d'una rutina d'un programa. Això els faculta per tenir el sistema operatiu optimitzat per a diferents generacions de processadors. Després utilitzen la capacitat de detecció i auto optimització de la Glibc per carregar binaris de biblioteques optimitzats per a la CPU. Aquests binaris són distribuïts amb Clear Linux, mantenint múltiples versions d'una mateixa biblioteca.[9] Els resultats de rendiment donen un avantatge superior al 10% a favor de Clear Linux contra Ubuntu 17.10.[10]

Contingut de glibc modifica

  • Programes instal·lats: catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, LDD, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, SLN, sprof, tzselect, xtrace, zdump i ZIC
  • Biblioteques instal·lades: ld.so, libBrokenLocale.[a, so], libSegFault.so, libanl.[a, so], libbsd-compat.a, libc.[a, so], libc_nonshared.a, libcrypt.[a, so], libdl.[a, so], libg.a, libieee.a, libm.[a, so], libmcheck.a, libmemusage.so, libnsl.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a, so], libresolv.[a, so], librpcsvc.a, librt.[a, so], libthread_db. so i libutil.[a, so]

Referències modifica

  1. «The GNU C Library» (en anglès). [Consulta: 10 abril 2014].
  2. «LIBC(7) - Linux Programmer's Manual» (en anaglès). [Consulta: 10 abril 2014].
  3. DJ Delorie, Andreas Schwab, Adhemerval Zanella. «Overview of Malloc» (en anglès), 2016,2017. [Consulta: 7 setembre 2017].
  4. Andries Brouwer, Michael Kerrisk. «syscalls - Linux system calls» (en anglès), 1998, 2007. [Consulta: 7 setembre 2017].
  5. Los regentes de la universidad de California. «syscall - indirect system call» (en anglès), 1980, 1991, 1993. [Consulta: 7 setembre 2017].
  6. Darren Hart. «A futex overview and update» (en anglès). LWN.net, 11-11-2009. [Consulta: 7 setembre 2017].
  7. Thomas Gleixner, Michael Kerrisk. «futex - fast user-space locking» (en anglès), 2015. [Consulta: 7 setembre 2017].
  8. Gentoo. «Mini FAQ about the misc libc/gcc crt files.» (en anglès). Gentoo Linux. [Consulta: 8 setembre 2017].
  9. Michael Larabel. «Clear Linux & Their Love For FMV + dl_platform/dl_hwcap In The Name Of Performance - Phoronix» (en anglès), 15-09-2017. [Consulta: 15 setembre 2017].
  10. Michael Larabel. «Core i9 7900X vs. Threadripper 1950X On Ubuntu 17.10, Antergos, Clear Linux - Phoronix» (en anglès), 12-09-2017. [Consulta: 15 setembre 2017].

Enllaços externs modifica

A Wikimedia Commons hi ha contingut multimèdia relatiu a: Glibc