Differenza tra chiamate di sistema e funzioni di libreria


Risposte:


19

Concettualmente, una funzione di libreria fa parte del processo.

In fase di esecuzione, il codice eseguibile e il codice di tutte le librerie (come libc.so) da cui dipende, vengono collegati in un singolo processo. Pertanto, quando si chiama una funzione in tale libreria, viene eseguita come parte del processo, con le stesse risorse e privilegi. È la stessa idea di chiamare una funzione che hai scritto tu stesso (con possibili eccezioni come le funzioni PLT e / o trampolino, che puoi cercare se ti interessa).

Concettualmente, una chiamata di sistema è un'interfaccia speciale utilizzata per effettuare una chiamata dal proprio codice (che generalmente non è privilegiato) al kernel (che ha il diritto di intensificare i privilegi secondo necessità).


Ad esempio, vedi Linux man brk . Quando un programma C chiama mallocper allocare memoria, chiama una funzione di libreria in glibc.

Se c'è già abbastanza spazio per l'allocazione all'interno del processo , può fare tutta la gestione dell'heap necessaria e restituire la memoria al chiamante.

Altrimenti, glibc ha bisogno di richiedere più memoria dal kernel: (probabilmente) chiama la brkfunzione glibc, che a sua volta chiama la brksyscall. Solo una volta passato il controllo al kernel, tramite syscall, lo stato della memoria virtuale globale può essere modificato per riservare più memoria e mapparlo nello spazio degli indirizzi del processo.


11

Aggiungendo alla risposta inutile: le
funzioni della libreria sono più veloci delle chiamate di sistema e di solito non contengono considerazioni di autorizzazione / sicurezza, poiché sono in esecuzione con i privilegi del processo e la sua memoria.

I syscall, d'altra parte, poiché vengono eseguiti nel kernel, hanno accesso a tutto nel sistema e quindi devono controllare ciò che il processo di chiamata può fare quando li chiama (verificare che disponga delle autorizzazioni per aprire un file, per esempio), inoltre, poiché i syscalls sono nel kernel, chiamarli richiede un cambio di contesto nella CPU, che è un processo molto pesante rispetto alla semplice chiamata di una chiamata in libreria.

I syscall di solito si riflettono come utilizzo della CPU di sistema nei programmi di monitoraggio.


0
  1. lib fun è supportato dal compilatore mentre syscall è supportato dal sistema operativo
  2. Le libcall sono specifiche mentre syscall è generico, come getc a lib fun può accedere a un solo carattere alla volta non stringa o parola per parola, ma aprire una syscall può essere utilizzato per aprire file di testo, file binari e molti altri tipi di file.

0

chiamata in libreria: richiama una subroutine collegata all'applicazione (includendo o aggiungendo una libreria).

chiamata di sistema: trasferisce il controllo al sistema operativo (utente-> proc sistema-> sistema operativo) e mette il processore in modalità privilegiata

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.