Por qué los archivos ejecutables dependen del sistema operativo

En este artículo, discutiremos por qué los archivos ejecutables dependen del sistema operativo y discutiremos la razón en detalle. Y también discutirá enfoques para aumentar la compatibilidad. Discutámoslo uno por uno.

Por qué los archivos ejecutables dependen del sistema operativo:
tanto el sistema operativo como la CPU son necesarios para la ejecución de los archivos ejecutables de la siguiente manera.

  • La CPU decodifica las instrucciones binarias en el ejecutable de acuerdo con uno o más conjuntos de instrucciones. Los conjuntos de instrucciones x86 («32 bits») y AMD64 («64 bits») son compatibles con la mayoría de las CPU de consumo. Es posible compilar un programa para uno de estos conjuntos de instrucciones, pero no para ambos. Las extensiones de estos conjuntos de instrucciones están disponibles y se puede comprobar su compatibilidad en tiempo de ejecución.
  • El soporte SIMD es un ejemplo de tal expansión. Si estas extensiones están presentes, los compiladores de optimización pueden intentar hacer uso de ellas, pero generalmente también proporcionan una ruta de código que funciona sin ellas.
  • API del sistema: el programa puede hacer uso de bibliotecas que deben instalarse en el sistema de destino. El software que utiliza las funciones de la API de Windows no se puede ejecutar en Linux. En el mundo Unix, las API del sistema operativo central se han estandarizado para POSIX: un programa escrito completamente con funciones POSIX funcionará en cualquier sistema Unix que las admita, incluidos Mac OS X y Solaris.
  • Formato binario: el ejecutable debe seguir un formato binario específico para que el sistema operativo cargue, inicialice y ejecute el programa correctamente. El formato Portable Executable se usa mucho en Windows, mientras que ELF se usa mucho en Linux.

Resultado:
como resultado, si dos sistemas tienen las mismas API y bibliotecas del sistema, se ejecutan en el mismo conjunto de instrucciones y utilizan el mismo formato binario, se escribió un programa para uno que se ejecutará en el otro.

Sin embargo, existen enfoques para aumentar la compatibilidad:
los ejecutables x86 se ejecutan de forma rutinaria en conjuntos de instrucciones AMD64. El formato binario especifica qué modo debe usarse. El sistema operativo debe hacer un esfuerzo adicional para manejar aplicaciones de 32 bits y 64 bits. Algunos formatos binarios permiten almacenar muchas copias de un programa en un solo archivo, cada una codificada para un conjunto de instrucciones diferente. Apple abogó por el uso de «archivos binarios pesados» en la transición de la arquitectura Power-PC a la arquitectura x86.

  • Algunos programas se compilan en una forma intermedia en lugar de código de máquina. Esto luego se convierte en instrucciones reales sobre la marcha, o puede entenderse. Esto permite que un programa sea independiente de su arquitectura. En el p-System de UCSD, se utilizó este método.
  • Una CPU de 64 bits se encuentra en el 99 por ciento de las PC modernas con Windows, que también pueden ejecutar software de 32 bits. El 1% restante utiliza CPU de 32 bits. Como resultado, el software escrito para CPU de 32 bits se usa ampliamente. El software diseñado para procesadores de 64 bits se ejecuta en cualquier PC que le interese al diseñador del software.

Nota:
un archivo ejecutable contiene más que solo código de máquina sin procesar. Cuando el sistema operativo lo carga, lee esto y determina cómo debe ejecutarse. Cuando compila, generalmente especifica una CPU de destino; si no lo hace, el compilador usará su CPU actual y se limitará a seleccionar únicamente instrucciones que sean comunes a su CPU y versiones anteriores. Si desea usar una nueva instrucción elegante que solo está disponible en una revisión específica de su CPU de destino, puede decírselo al compilador o codificarla manualmente usando un código ensamblador intrínseco o en línea. Sin embargo, si ejecuta su programa en una CPU que no admite esa instrucción, fallará.

Publicación traducida automáticamente

Artículo escrito por icloudanshu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *