Autor
|
Tema: Duda sobre maquina virtual (Leído 8,201 veces)
|
Vaagish
Desconectado
Mensajes: 875
|
Buenas! Bueno, mas de uno pensara que estoy loco hablando de maquina virtual acá,, (espero que no) 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: Pero sigo sin entender,, EI dice esto: A 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
|
|
« Última modificación: 10 Diciembre 2013, 00:42 am por Vaagish »
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
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.
|
|
|
En línea
|
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
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!
|
|
|
En línea
|
|
|
|
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!
|
|
|
En línea
|
MCKSys Argentina "Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
Por 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..
|
|
« Última modificación: 10 Diciembre 2013, 20:58 pm por Vaagish »
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
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.
|
|
|
En línea
|
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
ese 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.. Saludos!!
|
|
|
En línea
|
|
|
|
_Enko
|
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.
|
|
« Última modificación: 11 Diciembre 2013, 17:11 pm por _Enko »
|
En línea
|
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
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!
|
|
|
En línea
|
|
|
|
_Enko
|
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
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
pregunta sobre Maquina virtual-virtual pc
Software
|
T0rete
|
4
|
3,407
|
5 Octubre 2011, 16:10 pm
por zosemu
|
|
|
[Duda] Backtrack en máquina virtual
Wireless en Linux
|
Wofo
|
3
|
4,020
|
30 Octubre 2012, 05:24 am
por CodeJiyu
|
|
|
Pregunta Sobre maquina virtual
Hacking
|
nightcode
|
4
|
2,764
|
30 Diciembre 2013, 14:20 pm
por nightcode
|
|
|
Duda sobré máquina de rayos X para unidades Flash Monolíticas
Hardware
|
xknov
|
1
|
2,071
|
1 Agosto 2019, 15:53 pm
por MCKSys Argentina
|
|
|
Duda sobre sincronizar VSCode con Máquina Virtual Ubuntu
Programación General
|
gji
|
4
|
8,446
|
10 Agosto 2022, 18:38 pm
por el-brujo
|
|