viceversa traductor sistema primaria para hexadecimal funciona ejercicios decimales conversion como codigo binario c osx 64bit 32-bit

traductor - sistema binario pdf



¿Cómo es que un kernel de 32 bits puede ejecutar un binario de 64 bits? (6)

El núcleo de 32 bits que es capaz de cargar y ejecutar archivos binarios de 64 bits debe tener un código de 64 bits para manejar la asignación de memoria, la carga del programa y algunos otros problemas de 64 bits.

Sin embargo, no es necesario que el planificador y muchas otras operaciones del sistema operativo trabajen en el modo de 64 bits para tratar otros problemas: cambia el procesador al modo de 32 bits y viceversa según sea necesario para manejar controladores, tareas, asignación de memoria y mapeo , interrupciones, etc.

De hecho, la mayoría de las cosas que hace el sistema operativo no necesariamente ejecutan una ejecución más rápida a 64 bits: el sistema operativo no es un procesador de datos pesado, y las porciones que son (flujos de datos, E / S de disco, etc.) probablemente se conviertan a 64 bit (complementos para el sistema operativo de todos modos).

Pero el kernel desnudo probablemente no cambie de tarea más rápido, etc., si fuera de 64 bits.

Este es especialmente el caso cuando la mayoría de las personas todavía ejecuta aplicaciones de 32 bits, por lo que el cambio de modo no siempre es necesario, aunque es una operación de bajo costo, lleva tiempo.

-Adán

En mi caja OS X, el núcleo es un binario de 32 bits y aún puede ejecutar un binario de 64 bits. ¿Como funciona esto?

cristi:~ diciu$ file ./a.out ./a.out: Mach-O 64-bit executable x86_64 cristi:~ diciu$ file /mach_kernel /mach_kernel: Mach-O universal binary with 2 architectures /mach_kernel (for architecture i386): Mach-O executable i386 /mach_kernel (for architecture ppc): Mach-O executable ppc cristi:~ diciu$ ./a.out cristi:~ diciu$ echo $? 1


La CPU puede cambiarse del modo de ejecución de 64 bits a 32 bits cuando atrapa en el contexto del kernel, y aún se puede construir un kernel de 32 bits para comprender las estructuras pasadas de las aplicaciones de espacio de usuario de 64 bits.

El kernel de MacOS X no desreferencia directamente los punteros de la aplicación de usuario de todos modos, ya que reside en su propio espacio de direcciones. Un puntero de espacio de usuario en una llamada ioctl, por ejemplo, debe resolverse primero a su dirección física y luego a una nueva dirección virtual creada en el espacio de direcciones del kernel. Realmente no importa si ese puntero en el ioctl fue de 64 bits o 32 bits, el kernel no lo desreferencia directamente en ninguno de los casos.

Entonces, mezclar un kernel de 32 bits y binarios de 64 bits puede funcionar, y viceversa. Lo que no se puede hacer es mezclar bibliotecas de 32 bits con una aplicación de 64 bits, ya que los punteros pasados ​​entre ellos se truncarán. MacOS X proporciona más de sus frameworks en versiones de 32 y 64 bits en cada lanzamiento.


No es el kernel el que ejecuta el binario. Es el procesador.

El binario llama a las funciones de la biblioteca y esas deben ser de 64 bits. Y si necesitan hacer una llamada al sistema, es su responsabilidad hacer frente al hecho de que ellos mismos son de 64 bits, pero el kernel solo tiene 32.

Pero eso no es algo de lo que tendrías que preocuparte.


Que el kernel sea de 64 bits solo aportaría la ventaja efectiva de que las extensiones de kernel (es decir, típicamente controladores) podrían ser de 64 bits. De hecho, necesitaría tener todas las extensiones del kernel de 64 bits, o (como es el caso ahora) todas las de 32 bits; necesitan ser nativos de la arquitectura del kernel en ejecución.


Tenga en cuenta que no todos los kernels de 32 bits son capaces de ejecutar procesos de 64 bits. Windows ciertamente no tiene esta propiedad y nunca lo he visto en Linux.


Un archivo ELF32 puede contener instrucciones de 64 bits y ejecutarse en modo de 64 bits. Lo único que está teniendo es que la organización del encabezado y los símbolos están en formato de 32 bits. Los desplazamientos de la tabla de símbolos son de 32 bits. Las entradas de la tabla de símbolos son de 32 bits de ancho, etc. Un archivo que contiene tanto el código de 64 bits como el código de 32 bits puede exponerse como archivos ELF de 32 bits, ya que utiliza registradores de 64 bits para sus cálculos internos. mach_kernel es uno de esos ejecutables. La ventaja es que los controladores ELF de 32 bits pueden vincularse. Si se ocupa de pasar los punteros que se encuentran por debajo de 4 GB a otros binarios ELF vinculados funcionará bien.