En la escuela nos han enseñado que los compiladores compilan un programa de computadora para el lenguaje de máquina. También nos han enseñado que el lenguaje de máquina consiste en instrucciones directas para el hardware. Entonces, ¿cómo se puede ejecutar el mismo programa compilado en varias configuraciones de computadora con hardware diferente?¿Cómo se puede ejecutar un programa compilado en el lenguaje de máquina en diferentes máquinas?
Respuesta
depende de lo que entendemos por 'hardware diferente' si es el mismo procesador (o por ejemplo una misma familia Intel x86), entonces las instrucciones de código máquina son los mismos.
Si el hardware adicional es diferentes periféricos (pantallas, discos impresoras, etc.) entonces el sistema operativo esconde esos detalles dándole un conjunto coherente de instrucciones para conducirlos
Si quieres decir, ¿cómo se puede ejecutar un programa para una CPU ARM en un sistema x86 de Intel, entonces no se puede - excepto por algún tipo de emulador de máquina virtual que lee cada una de las instrucciones ARM y, o bien se traduce en x86 o corre la misma funcionalidad que un conjunto de funcs x 86 y luego vuelve la misma respuesta que los ARM habrían hecho.
Editar: supongo que te refieres PCs con diferentes HW - es decir, diferentes periféricos, pero la misma familia de procesadores?
Hablar con el hardware no implica instrucciones específicas como tales; se trata principalmente de mover la memoria a ubicaciones específicas donde el sistema operativo y/o el controlador del dispositivo se han reservado específicamente para los datos que van a ese dispositivo. En los viejos tiempos de DOS y BIOS, usted activaba un interupt para llamar un bit específico de código en el BIOS para actuar sobre esos datos y enviarlos al HW.
Con un emulador o una máquina virtual, cualquiera de los cuales se traduce efectivamente el lenguaje de máquina sobre la marcha.
Por lo que significa que algún tipo de emulación se utiliza siempre en el proceso? –
@BobbyMarinoff: en situaciones donde ha compilado código para una arquitectura de CPU y lo está ejecutando en una arquitectura de CPU diferente, algo debe estar haciendo la traducción. –
creo que es más exacto decir que los compiladores nativos compilan a una instrucción específica de establecer un procesador. Ya que hay familias de procesadores que mantienen la compatibilidad con versiones anteriores: 8086 - 80386 - 80486 - 80586 - Dual Core - Quad Core ...; entonces cada procesador ejecuta las instrucciones de sus antepasados. Si desea portar su código a través de arquitecturas de procesador, entonces necesita una máquina virtual o emulador seguro, como se mencionó anteriormente.
- 1. ¿Se puede compilar un programa Scala para ejecutar en cualquier JVM, sin tener Scala instalado en la máquina determinada?
- 2. ¿Puede un lenguaje compilado ser homoicónico?
- 3. Process.WaitForExit inconsistentes en diferentes máquinas
- 4. ¿Se puede ejecutar un programa python en una computadora sin Python? ¿Qué hay de C/C++?
- 5. Lenguaje dinámico compilado
- 6. ¿Cómo interactúa un programa compilado con el sistema operativo?
- 7. malloc se comporta de manera diferente en diferentes máquinas
- 8. ¿Puede Java ejecutar un código scala compilado?
- 9. ¿Cómo ejecutar el código F # encontrado en una cadena en un programa F # compilado?
- 10. Error de Hiphop al ejecutar el programa compilado
- 11. ¿Es R un lenguaje compilado?
- 12. No se puede ejecutar el programa "gradle" en Jenkins
- 13. ¿Cómo ejecutar diferentes hilos en diferentes núcleos?
- 14. ¿Cómo se puede ejecutar una máquina virtual Erlang como Daemon?
- 15. ¿Java es un lenguaje de programación compilado o interpretado?
- 16. ¿Cómo depurar un programa compilado con 'make'?
- 17. No existe el "lenguaje compilado" o el "lenguaje interpretado"
- 18. ¿Alguien probó el Lenguaje de programación de Crystal (código de máquina compilado por Ruby)?
- 19. Cómo ejecutar el lenguaje esotérico ZOMBIE
- 20. Mismo programa, la misma JVM, pero requisitos de memoria y tiempo de ejecución muy diferentes en diferentes máquinas, ¿por qué?
- 21. Bibliotecas estáticas en el programa compilado de versión cruzada
- 22. ¿Se puede ejecutar una imagen de VMWare Fusion en una máquina con Windows?
- 23. programa no se puede ejecutar OpenCV a pesar de que otros pueden
- 24. ¿Cómo se programa usar todos los procesadores en su máquina?
- 25. Cómo compilar y ejecutar un programa C/C++ en el sistema Android
- 26. El programa compilado de C++ plantea "no se puede abrir el archivo de objeto compartido" en otro sistema aunque el archivo está presente
- 27. binarios gcc compilado dan "no se puede ejecutar el archivo binario"
- 28. ¿Cómo ejecutar un programa C en Ubuntu?
- 29. ¿Cómo ejecutar múltiples instalaciones Perl en una máquina?
- 30. cómo configurar SSL para CAS y Cliente (diferentes máquinas)
Gracias por la respuesta concisa. No pude entender cómo se conecta un programa a la API del sistema operativo. Me imagino que hay un nivel de abstracción entre el programa y el procesador que ejecuta algunas de sus instrucciones y pasa las otras al procesador. ¿Y en qué idioma (o idiomas) están escritas estas instrucciones "virtuales"? ¿Dónde puedo leer más sobre ese proceso? –
Simplemente está moviendo la memoria en lugar de instrucciones específicas. En los viejos tiempos era más simple: la pantalla estaba en una dirección determinada, escribiste '65' en esa dirección y apareció 'A' en la esquina superior, escribiste 1 en otra ubicación y estableció el color de ese carácter rojo. –
Un programa C que se ha compilado se vinculará a las bibliotecas que están en la máquina actual. Incluso si la arquitectura del procesador es la misma, si un ejecutable de la computadora A se traslada a la computadora B, ¿no se ejecutaría el ejecutable si la computadora B no tiene las mismas bibliotecas que la computadora A? – Sophtware