Qual è la differenza tra una chiamata alla libreria e una chiamata di sistema in Linux?


13

Vorrei sapere qual è la differenza tra una chiamata della libreria e una chiamata di sistema in Linux. Qualsiasi suggerimento per una buona comprensione dei concetti alla base di entrambi sarà molto apprezzato.

Risposte:


9

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.


Quindi, se qualcuno pone la domanda sopra, posso interpretarla come la differenza tra una chiamata di sistema e una chiamata di funzione.
Sen,

"man ltrace" dà il mio "A library call tracer" :)
ysdx

8

Se digiti man manla 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 chmodnella sezione 2 del manuale durante la digitazione man chmod. E fprintfnella sezione 3.


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 in libreria non sono necessariamente gestite da una libreria dinamica. Le librerie possono essere collegate staticamente, quindi non è necessaria l'importazione (caricamento).
jlliagre,

Vero. Ho aggiunto quelle informazioni.
LawrenceC

Solo la metà ...
jlliagre,

non dovrebbe funzionare nel file head only anche far parte delle chiamate in libreria?
陳 力

1

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.


1

Fondamentalmente ci sono due modalità di Linux kernel VIZ.

  1. Modalità utente,
  2. Modalità kernel.

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

  1. fopen (): è una chiamata della libreria,
  2. open (): è una chiamata di sistema.

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à

  1. man man: qui troverai la sezione manuale 1-8, ognuna con uno scopo specifico.
  2. Fai man fopen: vedrai rispondi come FOPEN(3), qui 3 indica la sezione 3 manuale delle pagine man che è la sezione delle chiamate c-library.
  3. 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.


Il kernel ha solo una modalità, la modalità kernel. I processi utente hanno due modalità operative che cambiano avanti e indietro, userland e kernel.
jlliagre,

1

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.