GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué los números de llamada del sistema Linux en x86 y x86_64 son diferentes?

En cuanto al razonamiento detrás de la numeración específica, que no coincide con ninguna otra arquitectura [excepto "x32", que en realidad es solo parte de la arquitectura x86_64]:En los primeros días del soporte x86_64 en el kernel de Linux, antes de que hubiera graves restricciones de compatibilidad con versiones anteriores, todas las llamadas del sistema se volvieron a numerar para optimizarlas en el nivel de uso de cacheline.

No sé lo suficiente sobre el desarrollo del kernel para conocer la base específica de estas opciones, pero aparentemente hay algo lógica detrás de la elección de volver a numerar todo con estos números particulares en lugar de simplemente copiar la lista de una arquitectura existente y eliminar los que no se utilizan. Parece que el orden puede basarse en la frecuencia con la que se llaman, p. leer/escribir/abrir/cerrar están al frente. Exit y fork pueden parecer "fundamentales", pero cada uno de ellos se llama solo una vez por proceso.

También puede haber algo relacionado con mantener las llamadas al sistema que se usan comúnmente juntas dentro de la misma línea de caché (estos valores son solo números enteros, pero hay una tabla en el kernel con punteros de función para cada uno, por lo que cada grupo de 8 llamadas al sistema ocupa una línea de caché de 64 bytes para esa tabla)


Vea esa respuesta a la pregunta "¿Por qué los números de llamada del sistema son diferentes en amd64 linux?" en Desbordamiento de pila.

En resumen:en aras de la compatibilidad, la lista de llamadas del sistema es estable y solo puede crecer. Cuando apareció la arquitectura x86 64, el ABI (paso de argumento, valor devuelto) era diferente, por lo que los desarrolladores del kernel aprovecharon la oportunidad para traer cambios que habían esperado durante mucho tiempo.


Linux
  1. Linux:¿qué son la memoria alta y la memoria baja en Linux?

  2. Linux:¿por qué las utilidades de Linux no utilizan una llamada al sistema para obtener la hora actual?

  3. Linux:¿métodos de invocación de llamadas al sistema en el nuevo kernel?

  4. La llamada al sistema Linux más rápida

  5. ¿Por qué es necesario modificar las tablas de llamadas del sistema en Linux?

¿Linux es un sistema operativo o un kernel?

Cómo actualizar el kernel de Linux en Ubuntu y Linux Mint

Kernel de Linux y sus funciones

Linux:¿por qué son tan grandes los verdaderos y los falsos?

¿Sistema Linux congelado? Aquí hay 3 formas de lidiar con eso

¿Cuál es la diferencia entre una llamada de biblioteca y una llamada de sistema en Linux?