The GNU C Library | Cerca per titolo, autore, parola chiave | ||||||||
The GNU C Library Una funzione di sistema (system call) è un punto di accesso al kernel e permette ad un processo (anche ad un'applicazione utente) di chiedere al kernel di eseguire un determinato compito. L'architettura dei moderni processori permette alla CPU di operare in almeno due modalità: user mode e kernel mode ( supervisor mode). Esistono istruzioni hardware che permettono di passare da una modalità all'altra. Naturalmente, anche le aree di memoria virtuale possono essere marcate come appartenenti allo spazio utente (user space) o allo spazio del kernel (kernel space). Quando la CPU opera in user mode, può accedere solo alle aree di memoria marcate come user space; i tentativi di accedere alle aree marcate come kernel space generano una eccezione hardware (hardware exception). Quando la CPU opera in kernel mode, può accedere sia alle aree di memoria marcate come user space, sia alle aree di memoria marcate come kernel space. Il kernel mette a disposizione delle applicazioni una serie di funzioni, le system call, attraverso un'interfaccia API (application programming interface), che permette alle applicazioni utente di ottenere dei servizi dal kernel, eseguibili solitamente in kenel mode. Una funzione di libreria (library function), invece, è una delle tante funzioni, che svolgono compiti specifici, messe a disposizione del programmatore da altri programmatori: nel loro insieme, queste funzioni costituiscono la libreria standard di un determinato linguaggio di programmazione. Il linguaggio di programmazione C non mette a disposizione soluzioni software built-in per eseguire operazioni privilegiate, quali operazioni di input/output, di gestione della memoria, ed altre, ma mette a disposizione una libreria di funzioni standard che il programmatore può compilare e inserire nel suo programma. Un'applicazione utente difficilmente effettua direttamente una chiamata di sistema, ma chiede ad una funzione di libreria di farlo al suo posto. Non è detto che una funzione di libreria abbia bisogno di invocare una funzione di sistema. Una chiamata ad una funzione di sistema viene fatta, da una funzione di libreria, per i compiti di base, quali lanciare un programma, allocare memoria, eseguire operazioni di I/O, etc. Per esempio, la funzione della libreria C: fopen() utilizza la funzione di sistema: open() per aprire un file. Questa intermediazione si rende necessaria perchè una chiamata di una funzione di sistema (system call) modifica lo stato della CPU, da user mode a kernel mode, così da permettere alla CPU stessa di accedere alle aree di memoria protette marcate come kernel space. Le funzioni di libreria, inoltre, possono essere condivise tra le applicazioni, permettendo anche un risparmio notevole di memoria. Esistono molte e differenti implementazioni di librerie standard C, nelle varie implementazioni UNIX, ma la più usata, almeno per Linux è la GNU C library, o: glibc Come sapere quale versione di GLIBC è installata nel nostro sistema? È sufficiente eseguire il file della libreria, proprio come fosse un programma: ./libc.so.6 L'output di questo programma è un insieme di informazioni, tra le quali il numero di versione. Come sapere dove si trova il file della libreria, nel nostro sistema? È sufficiente eseguire un comando LDD su un file eseguibile che contenga un link dinamico a GLIBC. È sufficiente il programma "Hello World": #include Salvate queste poche righe di codice in un file C, poi compilate il file, creando l'eseguibile "hello" ed eseguite, infine il comando LDD sull'eseguibile "hello": gcc -o hello hello.c ldd hello linux-vdso.so.1 (0x00007ffd342cc000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f49c1dea000) /lib64/ld-linux-x86-64.so.2 (0x00007f49c238b000) La GNU C Library descritta in questo documento definisce tutte le funzioni di libreria specificate nello standard ISO C (American National Standard X3.159-1989—“ANSI C”, ISO/IEC 9899:1990, “Programming languages—C”), le funzionalità aggiuntive specifiche al POSIX di Unix (ISO POSIX o Portable Operating System Interface for Computer Environments (ISO/IEC 9945)) e alle estensioni proprie dei sistemi GNU.
|
|||||||||
The GNU C Library | Disclaimer: questo è un link a contenuti ospitati su server esterni. |