Was ist der Unterschied zwischen einem Bibliotheksaufruf und einem Systemaufruf unter Linux?

13

Ich würde gerne wissen, was der Unterschied zwischen einem Bibliotheksaufruf und einem Systemaufruf unter Linux ist. Alle Hinweise für ein gutes Verständnis der Konzepte hinter beiden werden sehr geschätzt.

Sen
quelle

Antworten:

9

Es gibt nicht wirklich so etwas wie einen "Bibliotheksbesuch". Sie können eine Funktion aufrufen, die mit einer gemeinsam genutzten Bibliothek verknüpft ist. Dies bedeutet lediglich, dass der Bibliothekspfad zur Laufzeit nachgeschlagen wird, um die Position der aufzurufenden Funktion zu bestimmen.

Systemaufrufe sind Kernelaufrufe auf niedriger Ebene, die vom Kernel verarbeitet werden.

Falmarri
quelle
Wenn also jemand die obige Frage stellt, kann ich sie als den Unterschied zwischen einem Systemaufruf und einem Funktionsaufruf interpretieren.
Sen
"man ltrace" gibt meinem "A library call
tracer
8

Wenn Sie man manIhre Shell eingeben, wird die Liste der manuellen Abschnitte angezeigt

2 Systemaufrufe (vom Kernel bereitgestellte Funktionen)

3 Bibliotheksaufrufe (Funktionen innerhalb von Programmbibliotheken)

Zum Beispiel finden Sie chmodin Abschnitt 2 des Handbuchs, wenn Sie tippen man chmod. Und fprintfin Abschnitt 3.

uloBasEI
quelle
3

Systemaufrufe werden direkt vom Kernel bearbeitet.

Bibliotheksaufrufe werden von einer dynamischen (oder statisch verknüpften) Bibliothek verarbeitet. Das Programm, das den Bibliotheksaufruf ausführt, muss zuerst diese Bibliothek importieren, bevor der Aufruf funktioniert. Die Bibliotheksaufrufe selbst können Systemaufrufe verwenden.

Manchmal werden Bibliotheken als "Front-Ends" für Systemaufrufe bereitgestellt, um zusätzliche Funktionalität oder Benutzerfreundlichkeit bereitzustellen, die vom Kernel nicht bereitgestellt werden.

LawrenceC
quelle
Bibliotheksaufrufe werden nicht unbedingt von einer dynamischen Bibliothek verarbeitet. Bibliotheken können statisch verknüpft werden, sodass kein Import (Laden) erforderlich ist.
Juli
Wahr. Ich habe diese Info hinzugefügt.
LawrenceC
Nur die Hälfte davon ...
Juli
sollte die funktion in head only file nicht auch Bestandteil von bibliotheksaufrufen sein?
陳 力
1

Systemaufrufe sind Funktionen, die das Betriebssystem für Anwendungen zur Verfügung stellt. Während Funktionen wie die in math.h, string.h usw. nichts mit der Anbindung an das Betriebssystem zu tun haben.

yasouser
quelle
1

Grundsätzlich gibt es zwei Modi des Linux-Kernels, nämlich.

  1. Benutzermodus,
  2. Kernel-Modus.

Jeder Linux-Kernel wechselt zwischen diesen beiden Modi hin und her. Im Allgemeinen werden Bibliotheksaufrufe im Benutzermodus und Systemaufrufe im Kernelmodus ausgeführt . In Bezug auf das Betriebssystem ist der Kernelmodus atomarer Natur und der Überwachungsmodus. Fast alle Library-Aufrufe benötigen Hilfe vom Kernel, um ihre Aufgaben auszuführen. Jeder Bibliotheksaufruf ruft wiederum den zugrunde liegenden Systemaufruf auf. Lassen Sie uns die Idee anhand des folgenden Beispiels klarer machen

  1. fopen (): ist ein Bibliotheksaufruf,
  2. open (): ist ein Systemaufruf.

Immer wenn Sie sich in einem c-Programm befinden, verwenden Sie fopen () aus der Headerdatei. Die Programmierumgebung ruft den Systemaufruf open () vom Kernel aus auf und führt die Aufgabe zum Öffnen der Datei aus. Nach der Ausführung kehrt der Steuerungsfluss wieder in den Benutzermodus zurück.

Um dies zu veranschaulichen, führen Sie die folgenden Aufgaben aus

  1. man man: Hier finden Sie die manuellen Abschnitte von 1-8, die jeweils einen bestimmten Zweck haben.
  2. Do man fopen: Sie werden respose als sehen FOPEN(3), hier 3 geben Sie den man-Abschnitt 3 der Man-Pages an, der der Abschnitt c-library calls ist.
  3. Do man open: Sie werden respose als sehen OPEN(2), hier 2 geben Sie den manuellen Abschnitt 2 der Manpages an, der der Abschnitt für Systemaufrufe ist.

    Ich hoffe, Sie haben das Konzept verstanden.

alpha9eek
quelle
Der Kernel hat nur einen Modus, den Kernel-Modus. Benutzerprozesse haben zwei Betriebsmodi, die sie hin und her schalten, Userland und Kernel.
Juli
1

Fügen Sie einfach die Unterschiede hinzu, die hier in anderen Antworten erwähnt werden.

Da es sich bei einem Bibliotheksaufruf lediglich um einen Funktionsaufruf handelt, wird nicht vom Benutzerbereich in den Kernelbereich gewechselt. Auf der anderen Seite führt ein Systemaufruf zu einem Wechsel vom Benutzerbereich zum Kernelbereich, da der Systemaufruf im Kernelmodus ausgeführt wird.

cout_display_name
quelle