![An welchen Prozess wurde das Ergebnis vom Kernel zurückgegeben?](https://rvso.com/image/52097/An%20welchen%20Prozess%20wurde%20das%20Ergebnis%20vom%20Kernel%20zur%C3%BCckgegeben%3F.png)
Wenn ein Prozess Aktionen erfordert, die den Kernelmodus erfordern, verwendet er einen Systemaufruf. Wie werden also die Ergebnisse an den Prozess zurückgegeben?
Antwort1
NOTIZ:ALLE FOLGENDEN INFORMATIONEN STAMMEN VON DER VERWEISTEN WEBSITE
AusDasLink habe ich die folgenden Informationen gefunden.
ASystemaufrufist eine Schnittstelle zwischen einer Anwendung im Benutzerbereich und einem Dienst, den der Kernel bereitstellt. Da der Dienst im Kernel bereitgestellt wird, kann kein direkter Aufruf durchgeführt werden. Stattdessen müssen Sie einen Prozess verwenden, der die Grenze zwischen Benutzerbereich und Kernel überschreitet.
Verwenden des Systemaufrufs
Sehen wir uns an, was nötig ist, um sie von einer User-Space-Anwendung aus zu verwenden. Es gibt zwei Möglichkeiten, wie Sie neue Kernel-Systemaufrufe verwenden können. Die erste ist eine praktische Methode (nichts, was Sie wahrscheinlich in Produktionscode tun möchten), und die zweite ist die traditionelle Methode, die etwas mehr Arbeit erfordert. Bei der ersten Methode rufen Sie Ihre neuen Funktionen, die durch ihren Index identifiziert werden, über die Syscall-Funktion auf. Mit der Syscall-Funktion können Sie einen Systemaufruf aufrufen, indem Sie seinen Aufrufindex und eine Reihe von Argumenten angeben. Beispielsweise ruft die unten gezeigte kurze Anwendung Ihren sys_getjiffies
Aufruf über seinen Index auf.
#include <linux/unistd.h>
#include <sys/syscall.h>
#define __NR_getjiffies 320
int main()
{
long jiffies;
jiffies = syscall( __NR_getjiffies );
printf( "Current jiffies is %lx\n", jiffies );
return 0;
}
Wie Sie sehen, enthält die Syscall-Funktion als erstes Argument den Index der zu verwendenden Systemaufruftabelle. Wären Argumente zu übergeben gewesen, würden diese nach dem Aufrufindex angegeben. Die meisten Systemaufrufe enthalten eine symbolische SYS_-Konstante, um ihre Zuordnung zur _ anzugeben.NRIndizes. Beispielsweise rufen Sie den Index __NR_getpid mit einem Systemaufruf wie folgt auf:
syscall( SYS_getpid )
Die Syscall-Funktion ist architekturspezifisch, verwendet aber einen Mechanismus, um die Kontrolle an den Kernel zu übertragen. Das Argument basiert auf einer Abbildung von _NR-Indizes zu SYSSymbole, die bereitgestellt werden von /usr/include/bits/syscall.h
(wird beim Erstellen der libc definiert). Verweisen Sie niemals direkt auf diese Datei. Verwenden Sie stattdessen /usr/include/sys/syscall.h
.