architecture - significa - ¿Diferencia entre las arquitecturas x86, x32 y x64?
x86 que significa (3)
Por favor, explique la diferencia entre x86
, x32
y x64
? Es un poco confuso cuando se trata de x86
y x32
porque la mayoría de las veces los programas de 32 bits se ejecutan en x86 ...
La respuesta de Hans y DarkDust cubría i386 / i686 y amd64 / x86_64, por lo que no tiene sentido volver a visitarlos. Esta respuesta se centrará en X32 y proporcionará información aprendida después de un puerto X32.
x32 es un ABI para CPU amd64 / x86_64 que usa enteros de 32 bits, largos y punteros. La idea es combinar la memoria más pequeña y la huella de memoria caché de los tipos de datos de 32 bits con el conjunto de registros más grande de x86_64. (Referencia: página del puerto Debian X32 ).
x32 puede proporcionar hasta un 30% de reducción en el uso de memoria y hasta aproximadamente un 40% de aumento en la velocidad. Los casos de uso para la arquitectura son:
- Hosting vserver (memoria enlazada)
- netbooks / tabletas (memoria baja, rendimiento)
- tareas científicas (rendimiento)
x32 es una adición algo reciente. Requiere compatibilidad con kernel (3.4 y superior), soporte de distribución (ver a continuación), compatibilidad con libc (2.11 o superior) y GCC 4.8 y superior (compatibilidad con el prefijo de tamaño de dirección mejorado).
Para las distribuciones, estaba disponible en Ubuntu 13.04 o Fedora 17. El soporte de Kernel solo requería que el puntero estuviera en el rango de 0x00000000 a 0xffffffff. Desde la interfaz binaria de aplicación System V, AMD64 (con los modelos de programación LP64 e ILP32) , sección 10.4, p. 132 (es la única oración):
10.4 Soporte de kernel
Kernel debe limitar la pila y las direcciones devueltas desde las llamadas al sistema entre 0x00000000 y 0xffffffff.
Al arrancar un kernel con el soporte, debe usar la opción syscall.x32=y
. Al CONFIG_X86_X32=y
un kernel, debe incluir la opción CONFIG_X86_X32=y
. (Referencia: página Debian X32 Port y sites.google.com/site/x32abi ).
Aquí hay algo de lo que he aprendido a través de un puerto reciente después de que la gente de Debian nos informara algunos errores después de las pruebas:
- el sistema es muy parecido a X86
- el preprocesador define
__x86_64__
(y amigos) y__ILP32__
, pero no__i386__
/__i686__
(y amigos) - no puedes usar
__ILP32__
solo porque aparece inesperadamente en Clang y Sun Studio - al interactuar con la pila, debe usar las instrucciones de 64 bits
pushq
ypopq
- una vez que un registro se rellena / configura desde tipos de datos de 32 bits, puede realizar las operaciones de 64 bits en ellos, como
adcq
- tenga cuidado con la extensión 0 que ocurre en los 32 bits superiores.
Si está buscando una plataforma de prueba, puede usar Debian 8 o superior. Su página wiki en Debian X32 Port tiene toda la información. La gira de 3 segundos: (1) habilita X32 en el núcleo al arrancar; (2) use debootstrap
para instalar el entorno de chroot X32, y (3) chroot debian-x32
para ingresar al entorno y probar su software.
x86 se refiere a la arquitectura de procesador Intel que se usó en las PC. Los números de modelo eran 8088 (versión de bus de 8 bits de 8086 y se usaba en la primera PC de IBM), 8086, 286, 386, 486. Luego cambiaron a nombres en lugar de números para evitar que AMD copiara los nombres de los procesadores. Pentium, etc., nunca un Hexium :).
x64 es el nombre de la arquitectura para las extensiones del conjunto de instrucciones x86 que habilita el código de 64 bits. Inventado por AMD y luego copiado por Intel cuando no pudieron obtener su propio arco de 64 bits para ser competitivos, a Itanium no le fue bien. Otros nombres son x86_64, el nombre original de AMD y comúnmente usado en herramientas de código abierto. Y amd64, el siguiente nombre de AMD y comúnmente utilizado en las herramientas de Microsoft. Los nombres propios de Intel para él (EM64T e "Intel 64") nunca se entendieron.
x32 es un término difuso que no está asociado con el hardware. Tiende a ser usado para significar "arquitectura de puntero de 32 bits" o "de 32 bits", Linux tiene un ABI con ese nombre.
x86
significa Intel 80x86 compatible. Esto solía incluir el 8086, un procesador de solo 16 bits. Hoy en día significa aproximadamente cualquier CPU con un conjunto de instrucciones compatible con Intel de 32 bits (generalmente cualquier cosa desde Pentium en adelante). Nunca lea x32
uso.
x64
significa una CPU que es compatible con x86
pero también tiene un modo de 64 bits (la configuración de 64 bits presentada por AMD con más frecuencia es la intención; la idea de Intel de un modo de 64 bits fue totalmente estúpida y, afortunadamente, Intel admitió que ahora está usando la variante de AMD).
Por lo tanto, la mayoría de las veces puede simplificarlo de esta manera: x86
es compatible con Intel en modo de 32 bits, x64
es compatible con Intel en modo de 64 bits.