¿Qué es una máquina virtual? Una explicación sencilla

¿Qué es una máquina virtual?
Una máquina virtual, a menudo abreviada como VM, es un entorno basado en software que se comporta como un ordenador o como un entorno en el que pueden ejecutarse programas. Cuál de las dos cosas sea depende del tipo de VM.
En una VM orientada al sistema, en realidad obtiene un ordenador virtual completo. Puede ejecutar su propio sistema operativo, almacenar datos y utilizar una conexión de red. El ordenador físico real se denomina host. Los ordenadores virtuales que se ejecutan sobre él se llaman guests.
Una VM orientada al proceso es, en cambio, un entorno de ejecución para código de programa. La Java Virtual Machine, o JVM, es un ejemplo conocido.
Dentro de las criptomonedas, la Ethereum Virtual Machine, a menudo abreviada como EVM, funciona de manera similar. No es un ordenador virtual con su propio sistema operativo, sino un entorno que ejecuta contratos inteligentes según reglas fijas.
Por tanto, puede entender una VM como una capa de software que determina cómo se ejecuta un ordenador virtual o un código de programa.
Puntos clave
- Una máquina virtual es un entorno informático basado en software o un entorno de ejecución para código.
- Una VM orientada al sistema emula un ordenador completo.
- Una VM orientada al proceso ejecuta código de programa dentro de una runtime fija.
- La EVM es una VM de blockchain para contratos inteligentes, no un PC virtual.
- Las VM pueden ayudar a separar entornos entre sí y a ejecutar código según reglas fijas.
¿Cómo funciona una máquina virtual?
La forma en que funciona una VM depende del tipo.
En una VM orientada al sistema, normalmente hay un hypervisor entre el hardware físico y los ordenadores virtuales. Un hypervisor es un software que distribuye recursos como capacidad de procesamiento, memoria, almacenamiento y capacidad de red del host entre varias máquinas virtuales.
Imagine que un servidor físico ejecuta tres máquinas virtuales. Cada VM puede funcionar como si tuviera su propio ordenador, aunque en realidad comparten el hardware del mismo host. El hypervisor gestiona qué recursos puede utilizar cada VM y mantiene los distintos entornos lo más separados posible.
La capacidad disponible sigue dependiendo del ordenador físico. Si el host tiene poca memoria, capacidad de procesamiento o almacenamiento, las máquinas virtuales también pueden verse afectadas.
Una VM orientada al proceso funciona de otra manera. En este caso, el código de programa se ejecuta dentro de un entorno de software fijo. El código Java, por ejemplo, se convierte en instrucciones que una JVM puede ejecutar. De este modo, el mismo código puede ejecutarse en distintos sistemas operativos y tipos de hardware, siempre que haya una JVM adecuada disponible.
Las VM de blockchain ejecutan código de programa según reglas fijas que son las mismas para los nodos participantes. Por ello, el mismo código con la misma entrada debería producir siempre el mismo resultado.
¿Qué tipos de máquinas virtuales existen?
Las máquinas virtuales suelen dividirse en dos tipos principales: VM orientadas al sistema y VM orientadas al proceso.
¿Qué es una máquina virtual orientada al sistema?
Una máquina virtual orientada al sistema es un ordenador virtual en el que pueden ejecutarse un sistema operativo propio y aplicaciones.
La VM recibe versiones virtuales de hardware, como un procesador, memoria, almacenamiento y una conexión de red. A continuación, un hypervisor gestiona cómo utilizan las distintas máquinas virtuales el hardware real del host.
Hyper-V y KVM son ejemplos de tecnologías con las que se pueden crear este tipo de máquinas virtuales.
Una ventaja de esto es que varios sistemas operativos pueden ejecutarse en un solo servidor físico. Así puede separar distintas aplicaciones o entornos de trabajo sin necesidad de un ordenador físico distinto para cada entorno.
Esa separación también puede ayudar a la seguridad. Si una máquina virtual falla o es atacada, eso no significa automáticamente que las demás máquinas virtuales también se vean afectadas. No obstante, sigue siendo importante una configuración segura del host y del hypervisor.
¿Qué es una máquina virtual orientada al proceso?
Una máquina virtual orientada al proceso es un entorno de ejecución para código de programa y no un ordenador virtual completo con su propio sistema operativo.
La Java Virtual Machine (JVM) es un ejemplo conocido de ello. Un programa Java se convierte en un formato intermedio que la JVM puede entender. Una JVM adecuada puede ejecutar ese código en distintos sistemas operativos y tipos de hardware.
La JVM determina qué instrucciones están disponibles y cómo debe comportarse el código Java durante la ejecución. La ejecución técnica exacta puede variar según la JVM.
Las VM de blockchain se parecen más a este tipo de VM que a un ordenador virtual completo, porque están pensadas sobre todo para ejecutar código de programa según reglas fijas.
¿Qué papel desempeña una máquina virtual dentro de blockchain?
Dentro de una blockchain programable, una máquina virtual determina cómo se ejecutan los contratos inteligentes y otro código de programa.
La VM establece qué instrucciones son posibles y cómo esas instrucciones pueden modificar el estado de la blockchain. De este modo, distintos nodos pueden ejecutar y verificar la misma transacción según las mismas reglas.
Ethereum utiliza para ello la Ethereum Virtual Machine (EVM). Ethereum no solo registra transacciones, sino también un estado actual con, entre otros elementos, cuentas, saldos y datos de contratos inteligentes.
Cuando se despliega un contrato inteligente en Ethereum, el código de programa compilado se almacena como bytecode. Si alguien llama al contrato más tarde, la EVM ejecuta ese bytecode.
La máquina virtual y el mecanismo de consenso tienen funciones distintas. La VM determina qué hace técnicamente una transacción. El consenso garantiza que los participantes se pongan de acuerdo sobre qué transacciones y qué nuevo estado acepta la red.
No todas las blockchains tienen una VM general para contratos inteligentes. Bitcoin, por ejemplo, utiliza Bitcoin Script para establecer condiciones para gastar bitcoin. Esto es deliberadamente más limitado que un entorno general de contratos inteligentes como la EVM.
¿Cómo funciona la Ethereum Virtual Machine (EVM)?
Una transacción de Ethereum puede, por ejemplo, enviar ETH, crear un nuevo contrato inteligente o llamar a un contrato inteligente existente.
Cuando se crea un contrato inteligente, el bytecode compilado se almacena en una cuenta de contrato. Si alguien llama al contrato más tarde, la EVM ejecuta ese bytecode.
La EVM funciona como una máquina de pila. Puede entender una pila como una pila de valores. La EVM puede colocar valores en esa pila y volver a utilizarlos para realizar cálculos.
La pila de la EVM puede contener un máximo de 1.024 elementos. Cada elemento consta de 256 bits.
Durante la ejecución, la EVM utiliza memoria temporal para los cálculos. Esta memoria desaparece después de la transacción. Además, los contratos inteligentes pueden almacenar datos en un almacenamiento permanente del contrato, de modo que estén disponibles de nuevo en transacciones posteriores.
Cada instrucción de la EVM, también llamada opcode, tiene un coste de gas determinado. El gas indica cuánta capacidad de cálculo y otros recursos de red utiliza una acción. El límite de gas de una transacción determina cuánto gas puede consumir como máximo la ejecución.
Al final, usted paga por el gas que realmente se utiliza. En las transacciones de Ethereum según EIP-1559, el precio del gas consta, entre otros elementos, de una base fee y una priority fee. La base fee se quema. La priority fee va al validador que propone el bloque en el que se incluye la transacción.
Ejemplo: Suponga que envía una transacción a un contrato inteligente para transferir tokens. La EVM ejecuta el código del contrato, comprueba las condiciones y ajusta los saldos almacenados si todo es correcto. Para ejecutar estas instrucciones, la transacción utiliza gas.
¿Qué otras máquinas virtuales de blockchain existen?
Además de la EVM, existen otros entornos de blockchain para ejecutar programas y contratos inteligentes. Estos pueden utilizar otros lenguajes de programación, modelos de almacenamiento y reglas de ejecución.
Solana, por ejemplo, utiliza una runtime en la que los programas se ejecutan como bytecode sBPF. Los programas se compilan en archivos ELF con código sBPF y luego se ejecutan en un entorno aislado.
En lugar de gas, Solana utiliza, entre otras cosas, compute units para medir cuánta capacidad de cálculo utiliza una transacción. Las distintas instrucciones dentro de una transacción comparten el mismo compute budget.
Sui utiliza el lenguaje de programación Move para los contratos inteligentes. Los contratos inteligentes se publican en la blockchain como paquetes Move y pueden crear y modificar objetos on-chain.
Sui trabaja para ello con un modelo de objetos. Un objeto on-chain tiene, entre otros elementos, un ID único, un propietario y un número de versión. Las transacciones pueden leer, modificar, transferir o crear nuevos objetos.
Eso difiere de Ethereum, donde las cuentas y el almacenamiento de contratos desempeñan un papel central. Por tanto, las VM de blockchain pueden tener el mismo objetivo general, pero estar construidas de forma técnica muy distinta.
¿Para qué se utilizan las máquinas virtuales?
Las VM orientadas al sistema se utilizan mucho cuando varios sistemas operativos o aplicaciones deben ejecutarse en un solo servidor físico. Esto ocurre, por ejemplo, en entornos cloud y centros de datos.
También se utilizan para separar entre sí los entornos de desarrollo, pruebas y producción. Además, los entornos virtuales completos pueden guardarse como imágenes de VM o discos virtuales y reiniciarse más tarde.
Las VM orientadas al proceso se utilizan sobre todo para poder ejecutar el mismo código de programa en distintos sistemas. De este modo, una aplicación no tiene que adaptarse directamente a cada combinación de hardware y sistema operativo.
Las VM de blockchain hacen posibles las transacciones programables. Ejecutan contratos inteligentes y pueden, por tanto, modificar datos almacenados, mover tokens o realizar otras acciones según las reglas de un contrato.
¿Cuáles son las ventajas y limitaciones de una máquina virtual?
Las máquinas virtuales ofrecen varias ventajas, pero también tienen limitaciones.
En el caso de las VM orientadas al sistema, estas son ventajas importantes:
-
Uso más eficiente del hardware: varias máquinas virtuales pueden compartir los recursos de un único host físico.
-
Separación entre entornos: distintos sistemas operativos y aplicaciones pueden ejecutarse de forma independiente.
-
Los problemas suelen quedar más limitados: un error o fallo en una VM no afecta automáticamente a todas las demás VM del mismo host.
-
Los entornos son más fáciles de reutilizar: con imágenes de VM y discos virtuales se puede guardar un entorno de software completo y volver a iniciarlo.
Esa separación no es completamente infalible. En un llamado VM escape, un atacante puede intentar obtener acceso al hypervisor o al host desde una máquina virtual. Además, una mala configuración también puede debilitar la separación entre VM.
Las máquinas virtuales también consumen recursos por sí mismas. El hypervisor y los distintos sistemas operativos virtuales requieren capacidad de procesamiento, memoria y almacenamiento. Si demasiadas VM utilizan la misma máquina física, pueden competir entre sí por esos recursos.
En las VM orientadas al proceso, la portabilidad es una ventaja importante. A cambio, el código siempre debe funcionar dentro de las reglas y los recursos disponibles de la runtime.
En las VM de blockchain, la ventaja principal reside en la ejecución predecible de los contratos inteligentes. Al mismo tiempo, los cálculos y el almacenamiento en una blockchain son limitados. Las redes establecen límites sobre cuánta capacidad de cálculo y almacenamiento puede utilizar una transacción o un contrato inteligente.
Además, los cálculos más complejos pueden generar costes de transacción más altos. Por ello, los cálculos pesados no siempre son prácticos para ejecutarlos por completo en una blockchain.
Conclusión
Una máquina virtual puede ser un ordenador virtual completo, un entorno para ejecutar código de programa o una runtime especializada para contratos inteligentes.
Las VM orientadas al sistema permiten ejecutar varios entornos informáticos separados en el mismo hardware físico. Las VM orientadas al proceso hacen que el código de programa sea más portátil entre distintos sistemas.
Dentro de blockchain, VM como la EVM garantizan que los contratos inteligentes se ejecuten según reglas fijas. De este modo, las transacciones pueden hacer más que simplemente transferir valor.
Sin embargo, también existen limitaciones. Las máquinas virtuales siguen dependiendo de los recursos disponibles y, además, las VM de blockchain establecen límites sobre la capacidad de cálculo, el almacenamiento y los costes.