Leí que en los núcleos más nuevos, las llamadas al sistema se invocan usando la instrucción INT X80 y también usando la instrucción sysenter. Y también la instrucción sysenter brinda una invocación más rápida en comparación con el otro método.
¿Cómo podría verificar qué llamadas al sistema son invocadas por ese método?
Respuesta aceptada:
A menos que esté ejecutando un kernel anterior a 2.6, no utilizará el int x80
método para invocar la mayoría de las llamadas al sistema. Han sido reemplazados a favor del systenter/sysexit
método desde kernel 2.6 (comenzado en la serie 2.5) para cosas que importan.
Tenga en cuenta que si tiene archivos binarios antiguos que se compilaron con kernels más antiguos, aún podrían estar usando el int x80
método:lo único que puede hacer al respecto es reconstruirlos (u obtener archivos binarios actualizados).
Ejecute ldd your_exe
en el programa que le preocupa. Si enumera linux-gate.so.1
o linux-vdso.so.1
, está usando las nuevas llamadas al sistema. Si no, es (lo más probable) que esté usando el método antiguo.
Para los binarios estáticos, es más difícil saberlo. Una forma sería objdump your_exe | less
y busque envoltorios de llamadas al sistema (__gettimeofday
es un buen candidato). Verá en el desensamblado si está usando una interrupción o no.
Un buen resumen de cómo funcionaban las antiguas llamadas INT 80 y cómo surgió y se configuró la nueva interfaz syscall se puede encontrar aquí:Llamadas al sistema (por Andries Brouwer).
Otra buena lectura:What is linux-gate. so.1?.
Ambos artículos están vinculados en este otro:Mecanismo de llamada al sistema basado en Sysenter en Linux 2.6, y apunta al libro Comprender el kernel de Linux de Daniel P. Bovet, Marco Cesati, que es bueno para obtener más información general.
Así que en resumen:no te preocupes por eso. Si tiene un sistema lo suficientemente reciente (CPU, kernel y distribución), está utilizando las llamadas al sistema "rápidas".