Zumindest unter Linux funktioniert der Systemaufrufmechanismus unter den meisten Architekturen, indem einige speziell formatierte Daten (normalerweise eine Art Struktur) entweder in einigen Registern oder in vordefinierten Speicheradressen abgelegt werden.
Das Problem besteht jedoch darin, dass die CPU gezwungen wird, in den Kernel-Speicher zu wechseln, damit sie den privilegierten Kernel-Code ausführen kann, um den Aufruf zu bearbeiten. Dies geschieht, indem ein Fehler erzwungen wird (ein Fehler ist eine Division durch 0, ein undefinierter Überlauf oder ein Segfault usw.), wodurch der Kernel gezwungen wird, die Ausführung zu übernehmen, um den Fehler zu behandeln.
Normalerweise behandelt der Kernel Fehler, indem er entweder den verursachenden Prozess beendet oder einen vom Benutzer bereitgestellten Handler ausführt. Im Fall eines Systemaufrufs werden stattdessen die vordefinierten Register und Speicherorte überprüft, und wenn sie eine Systemaufrufanforderung enthalten, wird diese unter Verwendung der vom Benutzerprozess in der In-Memory-Struktur bereitgestellten Daten ausgeführt. Dies muss normalerweise mit einer speziell von Hand gefertigten Baugruppe durchgeführt werden. Um dem Benutzer die Verwendung des Systemaufrufs zu erleichtern, muss die C-Bibliothek des Systems diesen als Funktion verpacken. Unter http://man7.org/linux/man-pages/man2/syscall.2.html finden Sie Informationen zur Funktionsweise von syscalls und wie Sie sie dann ohne C-Wrapper aufrufen können.
Dies wird zu stark vereinfacht. Dies gilt nicht für alle Architekturen (mips verfügt über eine spezielle Syscall-Anweisung) und funktioniert nicht unbedingt auf allen Betriebssystemen gleich. Wenn Sie dennoch Kommentare oder Fragen haben, wenden Sie sich bitte an.
Geändert: Beachten Sie, dass es sich bei Ihrem Kommentar zu Dingen in / dev / tatsächlich um eine übergeordnete Schnittstelle zum Kernel handelt, nicht um eine niedrigere. Diese Geräte verwenden tatsächlich (ungefähr) 4 Systemaufrufe darunter. Das Schreiben in sie ist dasselbe wie ein Write-Systemaufruf, das Lesen eines Read-Systemaufrufs, das Öffnen / Schließen derselben wie beim Open- und Close-Systemaufruf und das Ausführen eines Ioctl-Befehls bewirkt einen speziellen Ioctl-Systemaufruf, der an sich eine Schnittstelle für den Zugriff auf eines der vielen Ioctl-Befehle des Systems darstellt Anrufe (spezielle, normalerweise gerätespezifische Anrufe mit zu enger Verwendung, um einen vollständigen Systemaufruf für sie zu schreiben).