Risposte:
Non esiste una cosa come una "chiamata in biblioteca". È possibile chiamare una funzione collegata a una libreria condivisa. Ciò significa solo che il percorso della libreria viene cercato in fase di esecuzione per determinare la posizione della funzione da chiamare.
Le chiamate di sistema sono chiamate kernel di basso livello gestite dal kernel.
Se digiti man man
la shell, vedrai l'elenco delle sezioni del manuale
2 chiamate di sistema (funzioni fornite dal kernel)
3 chiamate alla libreria (funzioni all'interno delle librerie del programma)
Ad esempio, troverai chmod
nella sezione 2 del manuale durante la digitazione man chmod
. E fprintf
nella sezione 3.
Le chiamate di sistema sono gestite direttamente dal kernel.
Le chiamate in libreria sono gestite da una libreria dinamica (o collegata staticamente). Il programma che effettua la chiamata in libreria deve prima importare quella libreria, prima che la chiamata funzioni. Le chiamate della libreria stesse possono utilizzare le chiamate di sistema.
A volte le librerie sono fornite come "front-end" per le chiamate di sistema, per fornire funzionalità extra o facilità d'uso non fornite dal kernel.
Le chiamate di sistema sono funzioni che il sistema operativo fornisce alle applicazioni da utilizzare. Considerando che funzioni come quelle di math.h, string.h, ecc. Sono quelle che non hanno nulla a che fare con l'interfaccia con il sistema operativo.
Fondamentalmente ci sono due modalità di Linux kernel VIZ.
Qualsiasi kernel linux si commuta avanti e indietro tra queste due modalità. In genere, le chiamate della libreria vengono eseguite in modalità Utente e le chiamate di sistema vengono eseguite in modalità Kernel . In termini di sistema operativo, la modalità Kernel è di natura atomica ed è in modalità supervisione. Quasi tutte le chiamate alla libreria hanno bisogno dell'aiuto del kernel per eseguire i suoi compiti. Ogni chiamata in libreria chiama a sua volta una chiamata di sistema sottostante. Cerchiamo di rendere l'idea più chiara usando il seguente esempio
Ogni volta che nel programma c, si utilizza fopen () dal file di intestazione. L'ambiente di programmazione chiama system call open () dal kernel ed esegue il suo compito di apertura dei file. Ancora una volta dopo l'esecuzione, il flusso di controllo torna alla modalità utente.
Per illustrare ciò, eseguire le seguenti attività
man man
: qui troverai la sezione manuale 1-8, ognuna con uno scopo specifico.man fopen
: vedrai rispondi come FOPEN(3)
, qui 3 indica la sezione 3 manuale delle pagine man che è la sezione delle chiamate c-library.Fai man open
: vedrai rispondi come OPEN(2)
, qui 2 indica la sezione 2 manuale delle pagine man che è la sezione delle chiamate di sistema.
Spero tu abbia capito il concetto.
Basta aggiungere alle differenze menzionate qui in altre risposte.
Poiché una chiamata in libreria è semplicemente una chiamata di funzione, non si verifica alcun passaggio dallo spazio utente allo spazio del kernel. D'altra parte, una chiamata di sistema comporta un passaggio dallo spazio utente allo spazio del kernel perché la chiamata di sistema funziona in modalità kernel.