¿Diferencia entre las arquitecturas x86, x32 y x64?


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...

Author: jww, 2011-10-03

3 answers

X86 se refiere a la arquitectura de procesador Intel que se utilizó en PCs. Los números de modelo fueron 8088 (versión de bus de 8 bits de 8086 y utilizado en el primer IBM PC), 8086, 286, 386, 486. Después de lo cual cambiaron a nombres en lugar de números para evitar que AMD copie los nombres del procesador. Pentium etc, nunca un Hexium :).

X64 es el nombre de arquitectura para las extensiones del conjunto de instrucciones x86 que habilitan 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 competitivo, Itanium no le fue bien. Otros nombres para él son x86_64, el nombre original de AMD y comúnmente utilizado en herramientas de código abierto. Y amd64, el siguiente nombre de AMD y comúnmente utilizado en las herramientas de Microsoft. Los propios nombres de Intel (EM64T e "Intel 64") nunca se hicieron populares.

X32 es un término difuso que no está asociado con el hardware. Tiende a ser usado para significar" 32-bit "o" arquitectura de puntero de 32 bits", Linux tiene un ABI con ese nombre.

 22
Author: Hans Passant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-17 23:30:34

Hans y DarkDust respondieron cubriendo i386/i686 y amd64/x86_64, así 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 usando enteros de 32 bits, largos y punteros. La idea es combinar la huella de memoria y caché más pequeña de los tipos de datos de 32 bits con el conjunto de registros más grande de x86_64. (Referencia: Página de adaptación de Debian X32 ).

X32 puede proporcionar hasta aproximadamente 30% reducción en el uso de memoria y hasta un 40% de aumento en la velocidad. Los casos de uso para la arquitectura son:

  • alojamiento vserver (enlazado a memoria)
  • netbooks / tablets (memoria baja, rendimiento)
  • tareas científicas (desempeño)

X32 es una adición algo reciente. Requiere soporte de kernel (3.4 y superior), soporte de distro (ver más abajo), soporte de libc (2.11 o superior), y GCC 4.8 y superior (soporte de prefijo de tamaño de dirección mejorado).

Para distribuciones, fue hecho disponible en Ubuntu 13.04 o Fedora 17. El soporte del kernel solo requiere que el puntero esté en el rango de 0x00000000 a 0xffffffff. De la Interfaz Binaria de Aplicación System V, AMD64 (Con Modelos de programación LP64 e ILP32) , Sección 10.4, p. 132 (es la única oración):

10.4 Soporte del kernel
El núcleo debe limitar la pila y las direcciones devueltas de las llamadas al sistema entre 0x00000000 a 0xffffffff.

Cuando arranque un núcleo con el soporte, debe usar la opción syscall.x32=y. Cuando construye un núcleo, debe incluir la opción CONFIG_X86_X32=y. (Referencia: Debian X32 Port page and X32 System V Application Binary Interface).


Aquí hay algo de lo que he aprendido a través de una adaptación reciente después de que la gente de Debian nos informara de 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 bajo Clang y Sun Studio
  • al interactuar con la pila, debe usar las instrucciones de 64 bits pushq y popq
  • una vez que un registro se rellena / configura a partir de 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 prueba plataforma, entonces puede usar Debian 8 o superior. Su página wiki en Debian X32 Port tiene toda la información. El recorrido de 3 segundos: (1) habilite X32 en el kernel al arrancar; (2) use debootstrap para instalar el entorno X32 chroot, y (3) chroot debian-x32 para entrar en el entorno y probar su software.

 20
Author: jww,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-27 08:10:52

x86 significa compatible con Intel 80x86. 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 siendo utilizado.

x64 significa una CPU que es x86 compatible, pero también tiene un modo de 64 bits (la mayoría de las veces se refiere al conjunto de instrucciones de 64 bits introducido por AMD; la idea de Intel de un modo de 64 bits era totalmente estúpida y afortunadamente Intel lo admitió y ahora es uso de la variante AMDs).

Así que 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.

 6
Author: DarkDust,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-03 12:42:15