Unterschied zwischen Systemaufrufen und Bibliotheksfunktionen


Antworten:


18

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 brkglibc-Funktion auf, die wiederum den brksyscall 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.


10

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.


0
  1. lib fun werden vom Compiler unterstützt, während syscall vom Betriebssystem unterstützt wird
  2. Libcall sind spezifisch, während Syscall generisch ist, wie getc kann ein lib fun nur auf ein Zeichen gleichzeitig zugreifen, nicht auf Zeichenfolge oder Wort für Wort, aber ein Syscall kann zum Öffnen von Textdateien, Binärdateien und vielen weiteren Dateitypen verwendet werden.

0

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.