Was ist der Unterschied zwischen Systemaufruf und Bibliotheksaufruf?

8

Kann jemand die Unterschiede für diese beiden in Linux erklären? Bitte gehen Sie so tief wie möglich in jeden Schritt des Betriebssystems.

    
drdot 23.04.2015, 07:39
quelle

4 Antworten

9

Low-Level-Kernel-Aufrufe, die vom Kernel behandelt werden, sind die Systemaufrufe.

Die Manpage sagt:

  

2 Systemaufrufe (vom Kernel bereitgestellte Funktionen)

     

3 Bibliotheksaufrufe (Funktionen in Programmbibliotheken)

Ein Bild kann es deutlich machen:

und

    
Rahul Tripathi 23.04.2015, 07:42
quelle
4

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

Die zugrunde liegende Hardware bietet ein Tor für Benutzeranwendungen zum Eintritt in den Kernel-Modus. Das Betriebssystem schützt dieses Gate für grundlegende Systemsicherheit.

Hier ein wenig vereinfachen - eine von Prozessoren häufig verwendete Methode ist, dass der Prozess explizit eine Ausnahme auslöst (Intel hat eine alternative SYSCALL-Methode).

Ein System wird eine Reihe von Interrupt / Exception-Vektoren (Pointer to Handler Procedures) haben, um auf Exception oder Interrupts zu reagieren (z.B. Seitenfehler, dividiere durch Null). Das System definiert einige Sätze von Vektoren (normalerweise mit niedriger Nummer) für Hardware-Ausnahmen und Interrupts. Sie lassen jedoch normalerweise Slots für das Betriebssystem zurück.

Eine Anweisung wie:

%Vor%

Wird explizit eine Ausnahme auslösen und die 12. Prozedur im Vektor aufrufen. Ein System könnte es Ihnen ermöglichen, eine Division durch Null-Ausnahme zu simulieren, indem Sie dies tun

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

%Vor%

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

Sie würden also so etwas tun:

%Vor%

Der Wert 23 in Register 0 teilt dem Interrupt-Handler mit, Systemservice # 23 aufzurufen.

So können Sie sehen, dass dies alles Assemblersprache erfordert. Jedes Betriebssystem erstellt einen Wrapper, der wie Funktionen aus höheren Programmiersprachen aufgerufen werden kann.

Dies ist dann die Abfolge dessen, was 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 Aufwand haben. Ausnahmen im Kernel-Modus verursachen blaue Bildschirme des Todes. Wenn der Systemdienst in einen vom Benutzer bereitgestellten Puffer schreiben muss, muss sichergestellt werden, dass jedes Byte, in das geschrieben wird, beschreibbarer Speicher ist.

  4. Der Systemdienst tut, was er zu tun hat.

  5. Der Systemdienst führt einen Hardware-Befehl aus, um von einer Ausnahme oder einem Interrupt zurückzukommen. Das kehrt zum Benutzermodus und zurück zur Wrapperfunktion zurück.

  6. Der Wrapper kann Parameter, die in Registern zurückgegeben werden, entpacken.

  7. Der Wrapper kehrt zum Aufrufer zurück.

user3344003 23.04.2015 16:39
quelle
2

Systemaufrufe und Bibliotheksaufrufe sind insofern ähnlich, als sie der Anwendung durch die Umgebung zur Verfügung gestellt werden. Der Unterschied zwischen den beiden besteht darin, dass Systemaufrufe im Kernel implementiert werden, während Bibliotheksaufrufe im Benutzerbereich implementiert werden. Um einen Systemaufruf zu tätigen, muss die Anwendung eine spezielle hardware- und systemabhängige Anweisung (in der Regel ein Interrupt oder ein spezieller SYSENTER Aufruf) ausführen, die den Kontextwechsel auslöst und die Steuerung an den Kernel weiterleitet. Bibliotheksaufrufe unterscheiden sich dagegen nicht von regulären Funktionsaufrufen (der einzige Unterschied besteht darin, dass der Code nicht in der Hauptdatei, sondern in den gemeinsam genutzten Bibliotheken gespeichert ist).

    
el.pescado 23.04.2015 07:49
quelle
0

Bibliotheksfunktionen ist eine gewöhnliche Funktion, die in der Sammlung von Funktionen, die Bibliothek genannt wird, platziert wird.

Systemaufrufe sind die Anforderung an das Betriebssystem für den Dienst.

    
Vaibhav 24.08.2017 13:50
quelle

Tags und Links