nptl(7) Miscellaneous Information Manual nptl(7)

nptl - biblioteca nativă POSIX pentru fire de execuție „Native POSIX Threads Library”

NPTL (Native POSIX Threads Library) este o implementare POSIX de fire de execuție a bibliotecii GNU C care este utilizată în sistemele Linux moderne.

NPTL și semnalele

NPTL utilizează intern primele două semnale în timp real (numerele de semnal 32 și 33). Unul dintre aceste semnale este utilizat pentru a susține anularea firelor de execuție și cronometrele POSIX (a se vedea timer_create(2)); celălalt este utilizat ca parte a unui mecanism care asigură că toate firele de execuție dintr-un proces au întotdeauna aceleași UID și GID, așa cum este cerut de POSIX. Aceste semnale nu pot fi utilizate în aplicații.

Pentru a preveni utilizarea accidentală a acestor semnale în aplicații, care ar putea să interfereze cu funcționarea implementării NPTL, diverse funcții de bibliotecă glibc și funcții de învăluire a apelurilor de sistem încearcă să ascundă aceste semnale de aplicații, după cum urmează:

SIGRTMIN este definit cu valoarea 34 (în loc de 32).
Interfețele sigwaitinfo(2), sigtimedwait(2) și sigwait(3) ignoră în mod silențios cererile de așteptare a acestor două semnale dacă acestea sunt specificate în argumentul set de semnale al acestor apeluri.
Interfețele sigprocmask(2) și pthread_sigmask(3) ignoră în mod silențios încercările de blocare a acestor două semnale.
Interfețele sigaction(2), pthread_kill(3) și pthread_sigqueue(3) eșuează cu eroarea EINVAL (care indică un număr de semnal nevalid) dacă sunt specificate aceste semnale.
sigfillset(3) nu include aceste două semnale atunci când creează un set complet de semnale.

NPTL și modificări ale acreditărilor de proces

La nivelul nucleului Linux, acreditările (ID-urile de utilizator și de grup) sunt un atribut pentru fiecare fir de execuție. Cu toate acestea, POSIX impune ca toate firele POSIX dintr-un proces să aibă aceleași credențiale. Pentru a se conforma acestei cerințe, implementarea NPTL include toate apelurile de sistem care modifică acreditările procesului cu funcții care, pe lângă apelul de sistem de bază, se ocupă de modificarea acreditărilor tuturor celorlalte fire din proces.

Implementarea fiecăruia dintre aceste apeluri de sistem implică utilizarea unui semnal în timp real care este trimis (folosind tgkill(2)) către fiecare dintre celelalte fire care trebuie să își schimbe acreditările. Înainte de a trimite aceste semnale, firul care schimbă acreditările salvează noile acreditări și înregistrează apelul de sistem utilizat într-o memorie tampon globală. Un gestionar de semnal din firul (firele) de execuție receptoar(e) preia aceste informații și apoi utilizează același apel de sistem pentru a-și schimba acreditările.

Funcțiile de învăluire care utilizează această tehnică sunt furnizate pentru setgid(2), setuid(2), setegid(2), seteuid(2), setregid(2), setreuid(2), setresgid(2), setresuid(2) și setgroups(2).

Pentru detalii privind conformitatea NPTL cu standardul POSIX, a se vedea pthreads(7).

POSIX spune că orice fir din orice proces care are acces la memoria care conține un mutex partajat de proces (PTHREAD_PROCESS_SHARED) poate opera pe acel mutex. Cu toate acestea, pe sistemele x86 pe 64 de biți, definiția mutex-ului pentru x86-64 este incompatibilă cu definiția mutex-ului pentru i386, ceea ce înseamnă că binarele pe 32 de biți și 64 de biți nu pot partaja mutex-uri pe sistemele x86-64.

credentials(7), pthreads(7), signal(7), standards(7)

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

2 mai 2024 Pagini de manual de Linux 6.8