Duda sobre maquina virtual

Iniciado por Vaagish, 10 Diciembre 2013, 00:30 AM

0 Miembros y 1 Visitante están viendo este tema.

Vaagish

Buenas! Bueno, mas de uno pensara que estoy loco hablando de maquina virtual acá,, (espero que no)  :P

Estoy repasando ASM, y ahora me surgió una duda existencial, como es que se implementan las maquinas virtuales en Windows? Según tengo entendido, un programa ASM no es portable debido a la restricción de las arquitecturas de los procesadores,,  pero un programa C++ (por ejemplo) si, porque trabaja sobre una "maquina virtual",, es esto así? En que momento se implementa esa maquina virtual?

Saludos!! Gracias!

EDITO: Aca encontre esto mismo:
Citarhttp://foro.elhacker.net/asm/duda_concepto_de_maquina_virtual-t359791.0.html

Pero sigo sin entender,, EI dice esto:
CitarA menos que sea un compilador cruzado siempre compilas a la plataforma en ejecucion, no hay mucha historia ahi ...

Entonces estamos en la misma situación de ASM, C++ tiene que ser tan portable como ASM  :silbar:

cpu2

Un porgrama escrito en C/C++ es portable para la arquitectura que soporte el compilador, lee las opciones de gcc y veras, pero en ASM si escribes un codigo para una arquitectura x86 y quieres crear el binario para una sparc64, pues no te va a valer ya que esas instrucciones no existen para la sparc64, tendras que escribir el codigo para esa arquitectura en C/C++ el mismo codigo vale para las dos, simplemente pon las opciones adecuadas para esa arquitectura, pero si estas en una x86 y haces un gcc estandar el binario sera para la x86 logico, y no valdra para la sparc64.

Un saludo.

Vaagish

O sea, yo escribo un código en C/C++ y el compilador lo traduce a código maquina (para la arquitectura en la que se este ejecutando el compilador), entonces es portable en ese sentido, ese binario se puede ejecutar en cualquier pc, con la misma arquitectura. No es necesario cambiar el código para crear el binario, a diferencia del ensamblador, que si necesita cambiar el código para las diferentes arquitecturas..

Es así? Entonces cuando entra en juego la maquina virtual descrita en los libros de ASM? O es todo hipotético?

Saludos!

MCKSys Argentina

Me pareces que estas confudiendo cosas.

A que le llamas Maquina Virtual ?

Por ej., VMWare Workstation te permite crear maquinas virtuales.

Ahora, tambien se le suele llamar maquina virtual a los runtimes que se encargan de interpretar codigo intermedio a fin de ejecutar un programa (por ej. Java, python, .NET, etc.)

Por lo tanto, a cual te refieres?

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Vaagish

#4
CitarPor lo tanto, a cual te refieres?

Creo que seria mas parecido a los runtimes,, no la maquina virtual como VMWare.
Es que en el capitulo 1.2 de "Lenguaje ensamblador para computadoras basadas en Intel" da una teoría de maquina virtual.. a menos que sea del concepto de maquina virtual tipo Java del que habla, ese lo entiendo..

No encontré la pagina para mostrar,, pero seria la pagina 7, Capitulo 1.2

EDITO:Al final creo que si,, que habla de la maquina virtual como Java o .NET, pasa que los mezcla con C++ cuando hace referencia a que son lenguajes de alto nivel, pero en realidad C++ no tiene nada que ver con una maquina virtual..

cpu2

Revise ese libro no me extraña que vengas con dudas, ese libro es malo o al menos lo es para mi, creo tenerlo por aqui, cuando pueda leere eso para asi saber a que te refieres.

Un saludo.

Vaagish

Citarese libro es malo o al menos lo es para mi

Mmm.. sinceramente, no se si es que sea malo el libro,, tiene buena información,, pero esa parte me enredo... cosas que pasan también..  :silbar:

Saludos!!

_Enko

#7
Lo que es Virtual PC, Wmware etc... serían más bien EMULADORES de la arquitectura x86/64.

Es decir, lo que hacen es emular una arquitectura. Similar a lo que hace un emulador de la sega genesis o nes, snes etc..
Una ventaja es que la arquitectura x86/64 trae un set  de instrucciones que permite hacer eso con mayor optimidad.
Por ejemplo, en el caso de una NES, el emulador lo que haria es reconocer las instrucciones del chip motorola 6502 y ejecutar la instruccion similar en x86.
En el caso de un emulador/maquina virtual x86, lo que haria es algo similar. Uno pensaria que al ser la misma arquitectura simplemente tomaria cada instruccion y la ejecutaria, pero no es asi.
Si la instruccion es por ejemplo "mov eax, 4" ningun problema, haría exactamente eso.
Pero si la instruccion es por ejemplo "jmp 0x07600" no va hacer eso. Llegas a ejecutar eso en windows y va tirar un lindo error diciendo que no es una instruccion admitida.  Es una instruccion válida de x86, pero no es válida a nivel usuario (ring3) en donde se ejecutan las aplicaciones de windows. (Instruccion de privilegio ring0/kernel). De ahí que el emulador/maquina virtual se encarga de emular esa instruccion.

Por eso mas que "maquina virtual" sería mas bien un emulador de x86. Me imagino que el término "máquina virtual" se refiere mas bien a que crea una "pc/maquina" dentro de tu pc. De ahí "máquina virtual"


En cambio, la máquina virtual de java, lo que hace es tomar instrucciones del binario de java (seria una especie de pseudo lenguaje maquina  universal) y ejecutar la instruccion corresponiente en la PC o en cualquier máquina host. (celular, ruter, heladera, etc..)
Es decir, lo que hace Java es complilar en una arquitectura inexistente fisicamente (ningun microchip soporta instrucciones del "binario" java) y luego emularlas en el resto de las arquitecturas utilizando la JVM. El tema es como no existe ningun microchip que ejecute java directamente, tampoco sería correcto decir que está emulando java por mas que el proceso sea parecido.

Finalmente pearl/phyton son interpretes. Es decir, a partir del código no se crea ningun "binario". Las lineas de codigo se transforman a instrucciones en run-time. No hay un binario de por medio. La ventaja es que se pueden hacer unas lineas de codigo exoticas, pero la desventaja la lentitud en el proceso.


Saludos.

Vaagish

Gracias por responder _Enko, buena tu explicación.. mi duda era de interpretación del libro, porque como que mezcla un poco ahí, y me dio a entender que windows usaba una maquina virtual para ejecutar los programas (cosa que me parecía totalmente extraña, teniendo el loader) ya quedo claro jeje

Saludos! Y Gracias!

_Enko

Cita de: Vaagish en 11 Diciembre 2013, 17:21 PM
Gracias por responder _Enko, buena tu explicación.. mi duda era de interpretación del libro, porque como que mezcla un poco ahí, y me dio a entender que windows usaba una maquina virtual para ejecutar los programas (cosa que me parecía totalmente extraña, teniendo el loader) ya quedo claro jeje

Saludos! Y Gracias!
Mh... tal vez se refiere que el windows utiliza un emulador para aplicaciones de 16bit. (lo más probable que sea eso)

De nada :)