2012-04-23 6 views
12

Ich habe festgestellt, dass die Systemrufe x86 int $0x80 und amd64 syscall unterschiedliche Nummern haben. Zum Beispiel ist sys_exit syscall 1 in x86 und syscall 60 in amd64. Gibt es einen (historischen) Grund für die verschiedenen Systemrufnummerierungsschemata?Warum unterscheiden sich die Systemrufnummern in amd64 linux?

Antwort

12

Die syscall Schnittstelle soll sehr stabil sein und nur Zusätze sind erlaubt. Da die Syscall-Schnittstelle für jede Architektur anders ist, entschieden sich die Linux-Leute höchstwahrscheinlich dafür, etwas angesammelten Cruft zu bereinigen und die amd64-Syscalls von Grund auf neu zu starten.

Referenz: linux/Documentation/ABI/stable/syscalls

Diese Schnittstelle passt viel von der POSIX-Schnittstelle und basiert auf es und anderen Unix-basierten Schnittstellen. Es wird nur im Laufe der Zeit hinzugefügt, und Dinge nicht aus ihm entfernt werden.

Beachten Sie, dass diese Schnittstelle für jede Architektur unterschiedlich ist, die Linux unterstützt. In der architekturspezifischen Dokumentation finden Sie Details zu den Systemrufnummern, die jedem Syscall zugeordnet werden sollen.

+3

Relevanter LKML-Beitrag: http://lkml.iu.edu/hypermail/linux/kernel/0104.0/0547.html –

Verwandte Themen