Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: $Edu$ en 22 Abril 2012, 22:00 pm



Título: Duda - Concepto de Maquina Virtual
Publicado por: $Edu$ en 22 Abril 2012, 22:00 pm
He estado leyendo un tutorial de ASM muy bueno que me pasaron, y estoy por el principio donde explica conceptos basicos y me explicaron que la virtual machine es como un programa programado en un lenguaje L0 que interpreta el codigo escrito en el lenguaje L1 , que este es mas facil de entender.
Es decir, como Java que tiene su Java Virtual Machine y creo que funciona asi:

- Escribimos el codigo en Java
- Compilamos el codigo escrito a un codigo entendible por la Java Virtual Machine.
- Y la JVM se encarga de pasarlo a codigo maquina.

Con esto ganamos que no importa el procesador que sea, mientras este instalado el JVM en el SO, podran correr las app en Java.

Esto es asi?

Es que si es asi.. en que esta escrito la JVM? a puro 1 y 0 lo dudo xD

Si alguien me explica esto le agradezco muchisimo, tengo mas dudas pero por ahora eso.


----------------------------------------------------------------------------------------
Las otras dudas son depende que me contesten, como que pasa con vb.net entonces, y con lenguajes como C y vb6 que no hay que instalar nada para que corran las apps (cual es en este caso la maquina virtual? el mismo SO? )

Anoto porque despues me olvido xD

Saludos!


Título: Re: Duda - Concepto de Maquina Virtual
Publicado por: Eternal Idol en 22 Abril 2012, 22:36 pm
La JVM esta en C/C++ y es compilada para cada plataforma soportada. No hay maquina virtual en el caso de lenguajes compilados como C.

http://en.wikipedia.org/wiki/Just-in-time_compilation


Título: Re: Duda - Concepto de Maquina Virtual
Publicado por: $Edu$ en 22 Abril 2012, 23:33 pm
Bien si, pero en que esta codeada la JVM? tal vez en C ponele.. y lenguajes como C no necesitan de maquina virtual porque se compilan directamente a codigo maquina. El compilador de C se fija que tipo de procesador es para saber de que forma compilar? digo por si lo pasa a ASM o directamente lo pasa a ISA? tal vez tiene que hacer esa verificacion de que tipo de procesador es de todos modos.

Digo lo de verificar porque cada procesador funciona distinto, distintos registros, etc, y segun entiendo C es multiplataforma entonces no entiendo bien el porque.


Título: Re: Duda - Concepto de Maquina Virtual
Publicado por: Eternal Idol en 22 Abril 2012, 23:43 pm
Bien si, pero en que esta codeada la JVM?

Si, la JVM esta en C/C++.

El compilador de C se fija que tipo de procesador es para saber de que forma compilar?

A menos que sea un compilador cruzado siempre compilas a la plataforma en ejecucion, no hay mucha historia ahi ...

digo por si lo pasa a ASM o directamente lo pasa a ISA? tal vez tiene que hacer esa verificacion de que tipo de procesador es de todos modos.

Da igual, assembly no es portable, cada uno esta atado a su procesador.

Digo lo de verificar porque cada procesador funciona distinto, distintos registros, etc, y segun entiendo C es multiplataforma entonces no entiendo bien el porque.

Java es multiplataforma por la maquina virtual que lo interpreta: UN BINARIO, MUCHAS PLATAFORMAS. C es multiplaforma compilando: UN BINARIO POR PLATAFORMA.


Título: Re: Duda - Concepto de Maquina Virtual
Publicado por: $Edu$ en 23 Abril 2012, 02:12 am
Gracias! pero entonces existen compiladores de C especiales para cada tipo de procesador que uses?

Mi gran duda es esa.. que si cada procesador funciona distinto, como hace el compilador o la maquina virtual para interpretar de la forma que tiene que ser para ese procesador especifico.

O el 90% de nosotros usamos procesadores x86? entonces los compiladores son especificos para esos procesadores y listo.


Título: Re: Duda - Concepto de Maquina Virtual
Publicado por: x64core en 23 Abril 2012, 02:19 am
en assembly se llama ensamblar, en C/C++, VB, etc: compilar, si programas para x86 solo correra en ese


Título: Re: Duda - Concepto de Maquina Virtual
Publicado por: $Edu$ en 23 Abril 2012, 02:42 am
Ya ya, busque lo que me dijiste de "compilador cruzado" y creo que es eso, se encarga de eso mismo y las maquinas virtuales tambien, es decir convierten el codigo a ISA dependiendo el tipo de procesador, luego en mi carrera de ingeniero aprendere como se hace eso pero por ahora esta bien.

Si tengo razon ya entendi, y muchisimas gracias!

Edit: Gracias Raul! ando leyendo firme jaja


Título: Re: Duda - Concepto de Maquina Virtual
Publicado por: Eternal Idol en 23 Abril 2012, 09:37 am
Gracias! pero entonces existen compiladores de C especiales para cada tipo de procesador que uses?

Si, no son "especiales", son compiladores y punto, los cruzados si son especiales y te permiten compilar para otras plataformas pero un compilador normal se escribe teniendo en cuenta la misma plataforma donde es escrito y sera ejecutado.


Título: Re: Duda - Concepto de Maquina Virtual
Publicado por: $Edu$ en 23 Abril 2012, 18:19 pm
Bien, ya entendi, muchas gracias!


Título: Re: Duda - Concepto de Maquina Virtual
Publicado por: Eternal Idol en 23 Abril 2012, 18:25 pm
De nadas.