Wenn wir eine Anwendung ausführen, wenn das syscall-Ereignis ausgelöst wurde, werden diese syscall-Ereignisse über net-link an den Kernel weitergeleitet? oder netlink ist mit syscall verbunden, bitte lass es mich wissen.Ist Netlink das Medium für Syscall-Ereignisse?
Antwort
Immer wenn Syscall ausgelöst werden muss, führt das Benutzer-Space-Programm einen Befehl int 0x80
aus, nachdem einige Werte in den Registern eax, ebx, ecx, edx, esi und edi kopiert wurden, wie von syscall gefordert.
Nachdem int 0x80
ausgeführt wurde, springt PC zum ISR für diesen Softirq.
Routine für Syscall wird von set_system_trap_gate(MY_SYSCALL_VECTOR, entry_INT80_32);
eingestellt Sie können es hier überprüfen arch/x86/kernel/traps.c
.
und der Einstiegspunkt für Syscall im Kernel ist entry_INT80_32
, die in arch/x86/entry/entry_32.S
gefunden werden kann und es wird durch Linker-Skript ENTRY(entry_INT80_32)
in der gleichen Datei definiert.
Durch diesen Einstiegspunkt können Sie prüfen, wie der Wert der Register eax, ebx, ecx, edx, esi und edi kopiert wird. Dann wird nach Syscall-Nummer zu einem bestimmten Syscall gewechselt, ausgeführt und zurück zum Benutzerbereich gesendet.
Ok Vielen Dank für Ihre Antwort, gibt es eine Relevanz für Netlink? –
obwohl Netlink auch für die Kommunikation zwischen Benutzerraum und Kernelraum verwendet wird, aber nicht im Falle eines Systemaufrufs. Für den Datentransfer zwischen Kernel und Userspace während eines Syscalls werden nur die Register eax, ebx, ecx, edx, esi und edi verwendet. –
Danke samrat :) –