2012-05-09 17 views

Respuesta

10

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.

+0

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? –

+0

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

+0

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

4

Con un emulador o una máquina virtual, cualquiera de los cuales se traduce efectivamente el lenguaje de máquina sobre la marcha.

+0

Por lo que significa que algún tipo de emulación se utiliza siempre en el proceso? –

+0

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

0

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.

Cuestiones relacionadas