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.
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.
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.
Wenn Sie
man man
Ihre Shell eingeben, wird die Liste der manuellen Abschnitte angezeigtZum Beispiel finden Sie
chmod
in Abschnitt 2 des Handbuchs, wenn Sie tippenman chmod
. Undfprintf
in Abschnitt 3.quelle
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.
quelle
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.
quelle
Grundsätzlich gibt es zwei Modi des Linux-Kernels, nämlich.
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
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
man man
: Hier finden Sie die manuellen Abschnitte von 1-8, die jeweils einen bestimmten Zweck haben.man fopen
: Sie werden respose als sehenFOPEN(3)
, hier 3 geben Sie den man-Abschnitt 3 der Man-Pages an, der der Abschnitt c-library calls ist.Do
man open
: Sie werden respose als sehenOPEN(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.
quelle
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.
quelle