GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist der Unterschied zwischen Systemaufruf und Bibliotheksaufruf?

Wenn ich mir den Kommentar ansehe, lass mich das versuchen. Ein Systemdienst ist eine Prozedur, die mit erhöhten Rechten (normalerweise im Kernelmodus) ausgeführt wird. Alles andere ist ein Bibliotheksaufruf.

Die zugrunde liegende Hardware stellt ein Tor für Benutzeranwendungen bereit, um in den Kernelmodus zu wechseln. Das Betriebssystem bewacht dieses Tor für grundlegende Systemsicherheit.

Um hier ein wenig zu vereinfachen --- eine übliche Methode, die von Prozessoren verwendet wird, besteht darin, dass der Prozess explizit eine Ausnahme auslöst (Intel hat eine alternative SYSCALL-Methode).

Ein System wird einen Satz von Unterbrechungs-/Ausnahmevektoren (Zeiger auf Behandlungsprozeduren) haben, um auf Ausnahmen oder Unterbrechungen (z. B. Seitenfehler, Division durch Null) zu reagieren. Das System definiert einen Satz von Vektoren (normalerweise solche mit niedriger Nummer) für Hardware-Ausnahmen und Interrupts. Sie lassen jedoch normalerweise Slots für das Betriebssystem frei.

Eine Anweisung etwa wie:

   INT #12

Löst explizit eine Ausnahme aus und ruft die 12. Prozedur im Vektor auf. Ein System könnte Ihnen erlauben, eine Division-durch-Null-Ausnahme zu simulieren, indem Sie dies tun

Nehmen wir an, das Betriebssystem verwendet den Vektor 123 für Systemdienste.

   INT #123

würde einen Systemdienst anrufen. Ein System könnte einen separaten Vektor für jeden Systemdienst reservieren oder einen verwenden und versenden.

Sie würden also etwa so vorgehen:

  MOVL  #23, R0
  INT  #123

Der Wert 23 in Register 0 weist den Interrupt-Handler an, den Systemdienst #23 aufzurufen.

Sie können also sehen, dass dies alles Assemblersprache erfordert. Jedes Betriebssystem erstellt Wrapper, die wie Funktionen aus Hochsprachen aufgerufen werden können.

Dies ist dann die Reihenfolge, in der Folgendes passiert:

  1. Ein Benutzer ruft den benannten Wrapper mit normalen Parametern auf. Der Wrapper richtet die Register und den Stack für den Systemdienst ein.

  2. Der Wrapper löst die Ausnahme aus, die an den Systemdienst gesendet wird.

  3. Der Systemdienst muss dann ALLE Parameter überprüfen. Dies ist einer der Gründe, warum Systemdienste einen hohen Overhead haben. Ausnahmen im Kernel-Modus verursachen Blue Screens of Death. Wenn der Systemdienst in einen vom Benutzer bereitgestellten Puffer schreiben muss, muss er sicherstellen, dass jedes Byte, in das er schreibt, beschreibbarer Speicher ist.

  4. Der Systemdienst erledigt alles, was er tun muss.

  5. Der Systemdienst führt eine Hardwareanweisung aus, um von einer Ausnahme oder einem Interrupt zurückzukehren. Das kehrt zum Benutzermodus und zurück zur Wrapper-Funktion zurück.

  6. Der Wrapper kann in Registern zurückgegebene Parameter entpacken.

  7. Der Wrapper kehrt zum Aufrufer zurück.


Kernel-Aufrufe auf niedriger Ebene, die vom Kernel behandelt werden, sind die Systemaufrufe.

Die Manpage sagt:

2 Systemaufrufe (vom Kernel bereitgestellte Funktionen)

3 Bibliotheksaufrufe (Funktionen innerhalb von Programmbibliotheken)

Ein Bild kann es deutlich machen:

und


Linux
  1. Was ist der Unterschied zwischen fsck und e2fsck?

  2. Was ist der Unterschied zwischen adduser und useradd?

  3. Was ist der Unterschied zwischen einem Bibliotheksaufruf und einem Systemaufruf in Linux?

  4. Was ist der Unterschied zwischen $(CC) und $CC?

  5. Was ist der Unterschied zwischen unlink und rm?

Was ist der Unterschied zwischen Linux und Unix?

Was ist der Unterschied zwischen Login- und Non-Login-Shell

Was ist der Unterschied zwischen apt und dem Befehl apt-get?

Was ist ein Hypervisor? Was ist der Unterschied zwischen Typ 1 und 2?

Was ist der Unterschied zwischen Curl und Wget?

Was ist der Unterschied zwischen Route und IP-Route?