Ich habe die Antwort auf diese Frage durchgesehen, verstehe aber den Unterschied zwischen Systemaufrufen und Bibliotheksfunktionen nicht ganz. Was ist konzeptionell der Unterschied zwischen den beiden?
Ich habe die Antwort auf diese Frage durchgesehen, verstehe aber den Unterschied zwischen Systemaufrufen und Bibliotheksfunktionen nicht ganz. Was ist konzeptionell der Unterschied zwischen den beiden?
Antworten:
Konzeptionell ist eine Bibliotheksfunktion Teil Ihres Prozesses.
Zur Laufzeit werden Ihr ausführbarer Code und der Code aller Bibliotheken (wie z. B. libc.so), von denen er abhängt, zu einem einzigen Prozess verknüpft. Wenn Sie also eine Funktion in einer solchen Bibliothek aufrufen, wird sie als Teil Ihres Prozesses mit denselben Ressourcen und Berechtigungen ausgeführt. Es ist die gleiche Idee wie das Aufrufen einer Funktion, die Sie selbst geschrieben haben (mit möglichen Ausnahmen wie PLT- und / oder Trampolinfunktionen, die Sie bei Bedarf nachschlagen können).
Konzeptionell ist ein Systemaufruf eine spezielle Schnittstelle, über die Sie einen Aufruf von Ihrem Code (der im Allgemeinen nicht privilegiert ist) an den Kernel tätigen (der das Recht hat, Berechtigungen nach Bedarf zu eskalieren).
Siehe zum Beispiel den Linux- Mann brk . Wenn ein C-Programm aufruft malloc
, um Speicher zuzuweisen, ruft es eine Bibliotheksfunktion in glibc auf.
Wenn im Prozess bereits genügend Speicherplatz für die Zuordnung vorhanden ist , kann die erforderliche Heap-Verwaltung durchgeführt und der Speicher an den Aufrufer zurückgegeben werden.
Wenn nicht, muss glibc mehr Speicher vom Kernel anfordern: Es ruft (wahrscheinlich) die brk
glibc-Funktion auf, die wiederum den brk
syscall aufruft . Erst wenn die Steuerung über den Systemaufruf an den Kernel übergeben wurde, kann der globale virtuelle Speicherstatus geändert werden, um mehr Speicher zu reservieren und ihn dem Adressraum Ihres Prozesses zuzuordnen.
Hinzufügen zu der Antwort von Useless:
Bibliotheksfunktionen sind schneller als Systemaufrufe und enthalten normalerweise keine Berechtigungs- / Sicherheitsaspekte, da sie mit den Berechtigungen des Prozesses und seinem Speicher ausgeführt werden.
Syscalls hingegen haben, da sie im Kernel ausgeführt werden, Zugriff auf alles im System und müssen daher steuern, was der aufrufende Prozess beim Aufrufen tun kann (stellen Sie sicher, dass er über die Berechtigungen zum Öffnen einer Datei verfügt, z Beispiel) Da sich Syscalls im Kernel befinden, erfordert das Aufrufen darüber hinaus einen Kontextwechsel in der CPU, was im Vergleich zum Aufrufen eines Bibliotheksaufrufs ein sehr schwerer Prozess ist.
Syscalls werden normalerweise als System-CPU-Auslastung in Überwachungsprogrammen angezeigt.
Bibliotheksaufruf - Ruft eine mit der Anwendung verknüpfte Unterroutine auf (durch Einschließen oder Hinzufügen einer Bibliothek).
Systemaufruf - Überträgt die Steuerung an das Betriebssystem (Benutzer-> Systemprozess-> Betriebssystem) und versetzt den Prozessor in den privilegierten Modus