Ho letto che nei kernel più recenti le chiamate di sistema vengono invocate utilizzando l'istruzione INT X80 e anche utilizzando l'istruzione sysenter. Inoltre, l'istruzione sysenter fornisce un'invocazione più rapida rispetto all'altro metodo.
Come posso verificare quali chiamate di sistema vengono richiamate da quel metodo?
Risposta accettata:
A meno che tu non stia eseguendo un kernel precedente alla 2.6, non utilizzerai int x80
metodo per richiamare la maggior parte delle chiamate di sistema. Sono stati sostituiti a favore del systenter/sysexit
metodo dal kernel 2.6 (iniziato nella serie 2.5) per le cose che contano.
Nota che se hai vecchi binari che sono stati compilati su kernel più vecchi, quelli potrebbero ancora usare int x80
metodo:l'unica cosa che puoi fare è ricostruirli (o ottenere binari aggiornati).
Esegui ldd your_exe
sul programma di cui sei preoccupato. Se elenca linux-gate.so.1
o linux-vdso.so.1
, sta usando le nuove syscall. In caso contrario, sta (molto probabilmente) utilizzando il vecchio metodo.
Per i binari statici, è più difficile dirlo. Un modo sarebbe objdump your_exe | less
e cerca i wrapper delle chiamate di sistema (__gettimeofday
è un buon candidato). Vedrai dallo smontaggio se sta utilizzando un'interruzione o meno.
Un buon riassunto di come funzionavano le vecchie chiamate INT 80 e di come è nata e configurata la nuova interfaccia syscall può essere trovato qui:Chiamate di sistema (di Andries Brouwer).
Un'altra buona lettura:Cos'è linux-gate. così.1?.
Entrambi questi articoli sono collegati in quest'altro:Sysenter Based System Call Mechanism in Linux 2.6, e punta al libro Understanding The Linux Kernel di Daniel P. Bovet, Marco Cesati che è utile per informazioni più generali.
Quindi in breve:non preoccuparti. Se hai un sistema sufficientemente recente (CPU, kernel e distribuzione), stai utilizzando le chiamate di sistema "veloci".