So che l'interfaccia di chiamata di sistema è implementata su un livello basso e quindi codice di architettura / piattaforma dipendente, non "generico".
Tuttavia, non riesco a vedere chiaramente il motivo per cui le chiamate di sistema nei kernel x86 a 32 bit di Linux hanno numeri che non sono mantenuti uguali nell'architettura simile a Linux x86_64 a 64 bit? Qual è la motivazione / ragione dietro questa decisione?
La mia prima ipotesi è stata che un motivo di fondo è stato quello di mantenere le applicazioni a 32 bit eseguibili su un sistema x86_64, in modo che tramite un ragionevole offset al numero di chiamata del sistema il sistema sapesse che lo spazio utente è 32-bit o 64-bit rispettivamente. Questo non è tuttavia il caso. Almeno mi sembra che read () essendo il numero di chiamata di sistema 0 in x86_64 non possa essere allineato con questo pensiero.
Un'altra ipotesi è stata che la modifica dei numeri di chiamata del sistema potrebbe avere un background di sicurezza / protezione, qualcosa che non sono stato in grado di confermare.
Essendo ignaro delle sfide legate all'implementazione delle parti di codice dipendenti dall'architettura, mi chiedo ancora come cambiare i numeri di chiamata del sistema , quando non sembra necessario (poiché anche un registro a 16 bit memorizzerebbe molto più dei numeri attualmente ~ 346 per rappresentare tutto chiamate), aiuterebbe a ottenere qualsiasi cosa, oltre a interrompere la compatibilità (sebbene l'uso delle chiamate di sistema attraverso una libreria, libc, la mitiga).