Soy curioso. ¿Es posible instalar un programa de 64 bits en un sistema operativo de 32 bits con un procesador de 64 bits?
Estoy ejecutando Linux en una frambuesa pi 3 e intento instalar una versión más nueva de MongoDB:
armv7l GNU/Linux
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
Respuestas:
En principio sí, pero el procesador y el sistema operativo deben admitirlo.
En ARMv8, un kernel de 32 bits (Aarch32) no puede ejecutar procesos de 64 bits (Aarch64). Esta es una limitación del procesador.
Hay otros procesadores que no tienen esta limitación, por ejemplo, es posible ejecutar procesos x86_64 sobre un núcleo x86_32 en un procesador x86_64, pero pocos núcleos lo admiten, presumiblemente porque es de utilidad limitada (principalmente, guarda un bit de RAM en el kernel haciéndolo de 32 bits). Linux no lo admite, pero Solaris sí.
Puede mantener su sistema operativo de 32 bits existente si ejecuta un núcleo de 64 bits . Un kernel de Linux Aarch64 puede ejecutar procesos Aarch32. Raspbian no admite esto de forma inmediata, por lo que necesitaría mantener un SO de 32 bits y un SO de 64 bits. Puede usar uno como el sistema operativo principal (es decir, el que ejecuta init y los servicios del sistema) y el otro para ejecutar un programa específico usando chroot. Consulte ¿Cómo ejecuto programas de 32 bits en un Debian / Ubuntu de 64 bits? para un enfoque práctico.
Tenga en cuenta que deberá instalar todas las bibliotecas que requiere el programa de 64 bits. Cualquier proceso debe ser de 32 bits o de 64 bits, por lo que no puede utilizar una biblioteca de 32 bits en un ejecutable de 64 bits.
A menos que tenga buenas razones para mantener un sistema de 32 bits, si necesita ejecutar un archivo ejecutable de 64 bits, sería más fácil instalar un sistema de 64 bits.
Tenga en cuenta que lo único que pueden hacer los programas de 64 bits, pero los programas de 32 bits no pueden abordar más de aproximadamente 3 GB de memoria virtual, que es de utilidad limitada en un sistema con 1 GB de RAM. Puede obtener beneficios de rendimiento de los registros adicionales más grandes, pero también perderá el rendimiento de los accesos de memoria adicionales.
fuente
inc
/dec
registro (0x40 .. 0x4F
). En modo largo (modo de 64 bits), el tamaño de operando predeterminado es 32, pero el tamaño de dirección predeterminado es 64.xsave
/xrstor
en modo compat puede guardar el estado vectorial completo, tampoco. Por lo tanto, ciertamente no está bien soportado o explícitamente atendido. Probablemente los puntos de entrada del kernel se ejecutan en modo de 64 bits (largo) y cambian al modo de 32 bits (compat) antes de saltar al resto del kernel. (El cambio de modo x86 solo toma unfar jmp
y no afecta las reglas.)En algunas arquitecturas, sí. Pero no en ARM o x86.
Puede usar QEMU para emular un sistema de 64 bits, pero no quiere hacerlo.
fuente
Actualice solo su kernel a uno de 64 bits, para que pueda ejecutar binarios de 64 bits. Esencialmente, ejecutará toda su distribución en modo de compatibilidad de 32 bits, y su único mongodb de 64 bits será su modo normal.
Pero no merece su precio. Es mejor cambiar su mongodb a 32 bits. Sin embargo, en este caso hay una limitación, que su base de datos no puede ser más grande que 2GB, ya que mapea directamente todo en la memoria virtual. Si su base de datos es más grande, solo queda la actualización del núcleo. (¡Gracias @duskwuff la extensión!)
Por cierto, si su base de datos no quiere una carga muy grande, o puede usar alguna solución de almacenamiento en caché antes (por ejemplo: otra, pero mongo de 32 bits), entonces una emulación de CPU podría funcionar. Para eso, comience a buscar en Google "qemu qemu-system-x86_64". Aunque tal solución probablemente tendría una necesidad de trabajo inviable y podría considerarse extraña en un entorno productivo.
En su lugar, usaría mongo de 32 bits si es suficiente para mi base de datos, o un núcleo de 64 bits si no lo es.
fuente
apt-get install mongodb:i386
o algo similar?Yo diría que no es imposible, pero realmente difícil de manejar. Dado que un sistema operativo de 32 bits suele estar empaquetado (y acepta) solo binarios y bibliotecas de 32 bits, necesitará modificar mucho el sistema para que funcione con los de 64 bits.
El principal problema que enfrentaría con un RPI3 es la falta de núcleo de 64 bits (al menos con raspbian).
Larga historia corta: use binarios de 32 bits y estará bien.
EDITAR:
Si desea utilizar un núcleo de 64 bits, deberá instalar una distribución que admita la arquitectura ARM64. Debería echar un vistazo a ArchLinux ARM ( aquí ), pero no es totalmente compatible.
La información que está buscando se encuentra en la parte inferior de la pestaña de instalación.
También puede echar un vistazo a un puerto oficial de Debian , sin embargo, todavía hay grandes problemas con el puerto RPI3, por lo que depende de usted decidir si vale la pena.
fuente
i386
variante, y eso incluye un núcleo de 64 bits, que también permite la instalación de bibliotecas y binarios de 64 bits. Sin embargo, el soporte ARM en Debian no permite esto en los sistemas ARM (pero puede instalarlo combinadoarm64
yarmhf
, si comienza conarm64
).He usado un núcleo de 64 bits con un sistema de 32 bits durante bastante tiempo (ese es el requisito previo mínimo para ejecutar ejecutables de 64 bits de forma nativa, además de todas las bibliotecas de 64 bits necesarias). Yo no lo recomendaría. Lo que finalmente me hizo actualizar a un sistema de 64 bits al por mayor fue la constatación de que los encabezados ALSA, particularmente con respecto a las llamadas Midi ioctl, no eran independientes del tamaño, lo que significa que las cosas compiladas en modo de 32 bits no interactuarían bien con el núcleo de 64 bits.
Por supuesto, esto puede considerarse un error que vale la pena corregir, pero el ritmo del desarrollo de ALSA está casi congelado y no podía esperar unos años para que se solucione el soporte de plataforma mixta (y de una manera no binaria compatible para no mezclado ejecutables) cuando el interés en plataformas mixtas está disminuyendo rápidamente de todos modos.
Para algunas aplicaciones, las cosas funcionan en modo mixto (sorprendentemente mucho en realidad), pero si está haciendo más que la parte básica de la interfaz con el núcleo, incluso a través de bibliotecas externas, es demasiado optimista.
fuente