virtualización virtualizacion software que puedo por paravirtualizacion nube lenovo informatica habilitar ejemplo cómo completa caracteristicas activar virtualization emulation

virtualization - software - virtualizacion completa vs paravirtualizacion



Emulación completa vs. virtualización completa (7)

En plena emulación, los dispositivos de E / S, CPU y memoria principal están virtualizados.

No, son emulados en software. Emulado significa que su comportamiento está completamente replicado en el software.

Pero, ¿qué es exactamente la virtualización completa?

Con la virtualización, intenta ejecutar la mayor cantidad de código posible en el hardware para acelerar el proceso. Esto es especialmente un problema con el código que tenía que ejecutarse en modo kernel , ya que podría cambiar el estado global del host (máquina en la que se está ejecutando el hipervisor o VMM ) y, por lo tanto, afectar a otras máquinas virtuales.

En plena emulación, los dispositivos de E / S, CPU y memoria principal están virtualizados. El sistema operativo invitado tendría acceso a dispositivos virtuales, no a dispositivos físicos. Pero, ¿qué es exactamente la virtualización completa? ¿Es lo mismo que la emulación completa o algo totalmente diferente?


Este es un intento de responder mi propia pregunta.

Virtualización del sistema: comprensión de la virtualización de E / S y el rol del hipervisor

Virtualización

La virtualización como concepto permite que aplicaciones múltiples / diversas coexistan en el mismo hardware subyacente sin ser conscientes de las demás.

Como ejemplo, los sistemas operativos completos como Windows, Linux, Symbian, etc., junto con sus aplicaciones pueden coexistir en la misma plataforma. Todos los recursos informáticos están virtualizados.

Lo que esto significa es que ninguna de las máquinas mencionadas anteriormente tiene acceso a recursos físicos. La única entidad que tiene acceso a los recursos físicos es un programa conocido como Virtual Machine Monitor (también conocido como Hypervisor).

Ahora esto es importante. Por favor, lea y vuelva a leer cuidadosamente.

El hipervisor proporciona un entorno virtualizado a cada una de las máquinas anteriores. Dado que estas máquinas no tienen acceso al hardware físico, SINO al hardware virtualizado, se les conoce como máquinas virtuales.

Como ejemplo, es posible que el kernel de Windows desee iniciar un temporizador físico (recurso del sistema). Supongamos que el temporizador es memoria IO asignada. El kernel de Windows emite una serie de instrucciones de carga / almacenamiento en las direcciones del temporizador. En un entorno no virtualizado, esta carga / tienda habría resultado en la programación del hardware del temporizador.

Sin embargo, en un entorno virtualizado, estos accesos basados ​​en carga / almacenamiento de recursos físicos darán como resultado una captura / fallo. La trampa es manejada por el hipervisor. El hipervisor sabe que Windows intentó programar el temporizador. El hipervisor mantiene las estructuras de datos del temporizador para cada una de las máquinas virtuales. En este caso, el hipervisor actualiza la estructura de datos del temporizador que ha creado para Windows. A continuación, programa el temporizador real. Cualquier interrupción generada por el temporizador es manejada por el hipervisor primero. Las estructuras de datos de las máquinas virtuales se actualizan y se llaman las rutinas de servicio de interrupción de estas últimas.

Para acortar una larga historia, Windows hizo todo lo que habría hecho en un entorno no virtualizado. En este caso, sus acciones dieron como resultado que NO se actualizase el recurso del sistema real, sino que se actualizaran los recursos virtuales (las estructuras de datos anteriores).

Así, todas las máquinas virtuales piensan que están accediendo al hardware subyacente; En realidad, desconocidos para ellos, todos los accesos al hardware físico están mediados por el hipervisor.

Todo lo descrito anteriormente es virtualización completa / clásica. La mayoría de las CPU modernas no son aptas para la virtualización clásica. La trampa / falla no se aplica a todas las instrucciones. Así que el hipervisor es fácilmente evitado en dispositivos modernos.

Aquí es donde surge la para-virtualización. Las instrucciones confidenciales en el código fuente de las máquinas virtuales se reemplazan por una llamada a Hypervisor. El fragmento de carga / tienda anterior puede ser reemplazado por una llamada como

Hypervisor_Service(Timer Start, Windows, 10ms);

EMULACIÓN

La emulación es un tema relacionado con la virtualización. Imagine un escenario donde un programa compilado originalmente para ARM está hecho para ejecutarse en una CPU ATMEL. La CPU ATMEL ejecuta un programa emulador que interpreta cada instrucción ARM y emula las acciones necesarias en la plataforma ATMEL. De esta forma el emulador proporciona un entorno virtualizado.

En este caso, la virtualización de los recursos del sistema NO se realiza mediante el modelo de captura y ejecución.


La emulación y la virtualización están relacionadas pero no son lo mismo.

La emulación utiliza software para proporcionar un entorno o arquitectura de ejecución diferente. Por ejemplo, puede tener un emulador de Android ejecutado en un cuadro de Windows. El cuadro de Windows no tiene el mismo procesador que un dispositivo Android, por lo que el emulador ejecuta la aplicación de Android a través del software.

La virtualización consiste más en crear barreras virtuales entre múltiples entornos virtuales que se ejecutan en el mismo entorno físico. La gran diferencia es que el entorno virtualizado es la misma arquitectura. Una aplicación virtualizada puede proporcionar dispositivos virtualizados que luego se traducen a dispositivos físicos y el host de virtualización tiene control sobre qué máquina virtual tiene acceso a cada dispositivo o parte de un dispositivo. Sin embargo, la ejecución real suele ejecutarse de forma nativa, no a través de software. Por lo tanto, el rendimiento de la virtualización suele ser mucho mejor que la emulación.

También hay un concepto separado de una máquina virtual, como los que ejecutan código Java, .NET o Flash. Pueden variar de una implementación a la siguiente y pueden incluir aspectos de la emulación, la virtualización o ambos. Por ejemplo, la JVM proporciona un mecanismo para ejecutar códigos de bytes de Java. Sin embargo, la especificación de JVM no dicta que los códigos de byte deben ejecutarse por software o que deben compilarse a código nativo. Cada JVM puede hacer sus propias cosas y, de hecho, la mayoría de los JVM hacen una combinación de ambos utilizando emulación cuando sea apropiado y usando un JIT donde sea apropiado (el JIT de punto de acceso creo que es lo que se llama JVM de Sun / Oracle).


La virtualización puede ocurrir en diferentes capas de una arquitectura de computadora, que son (de mayor a menor): 1: Aplicación, 2: Biblioteca, 3: Sistema operativo, 4: Abstracción de hardware (HAL), 5: Arquitectura de conjunto de instrucciones (ISA). Debajo de la última capa está el Hardware. Normalmente, una determinada capa utiliza los servicios de una capa inferior utilizando las instrucciones que la capa inferior expone en su interfaz.
Tenga en cuenta que el uso del servicio no está estrictamente relacionado con las capas, en el sentido de que ciertas capas pueden omitir la capa inmediatamente a continuación y utilizar la instrucción de las capas inferiores. Como ejemplo, las Aplicaciones pueden proporcionar ciertas instrucciones directamente a la capa HAL, omitiendo las capas de la Biblioteca y del SO.

"Emular una instrucción" significa interceptar y asignar una instrucción destinada a una cierta capa de una arquitectura de computadora (virtual) en una secuencia (una o más) instrucciones para la misma capa de una arquitectura de computadora diferente (no virtual) ). Es posible colocar la capa de virtualización en diferentes capas de una arquitectura de computadora. Este punto puede introducir confusión. Como ejemplo, al virtualizar a nivel de la Capa de abstracción de hardware (por ejemplo, VMware, VirtualBox), se coloca una capa virtual entre la capa HAL y la capa del sistema operativo. El sistema operativo utiliza instrucciones de la capa HAL virtual, luego el ISA (arquitectura de conjunto de instrucciones) virtual asigna el hipervisor a ISA para el sistema físico. Cuando TODAS las instrucciones son emuladas, hablamos de emulación completa, que es un caso especial de virtualización. En la virtualización, por lo general, tratamos de hacer una capa para ejecutar directamente la instrucción de la capa no virtual tanto como sea posible por razones de rendimiento. En otro ejemplo, la capa de virtualización se coloca sobre el Sistema Operativo (Virtualización en el Nivel del Sistema Operativo): en este caso, una Máquina Virtual se denomina Contenedor (por ejemplo, Docker). Incluye los niveles de Aplicación al SO (incluido).

Para concluir, la emulación está relacionada con una sola instrucción, mientras que la "emulación completa" ocurre cuando interceptamos y mapeamos TODAS las instrucciones de una determinada capa. Típicamente, el término "emulación completa" se usa cuando la capa de virtualización se coloca en el nivel ISA (nivel más bajo posible). En este caso, una Máquina Virtual incluye todos los niveles desde la Aplicación a la ISA, y TODA la ISA se intercepta y mapea. Esto se usa típicamente para virtualizar productos de nicho, como los enrutadores Cisco (por ejemplo, con QEMU) o las consolas de videojuegos de los años 90, que tienen una arquitectura completamente diferente de las computadoras comúnmente disponibles. Tenga en cuenta, sin embargo, que puede haber una "emulación completa" también en otros niveles, lo que típicamente no es necesario.


La virtualización y la emulación son prácticamente lo mismo. Hay un concepto subyacente que estas dos palabras insinúan. Es decir, estas dos palabras son aspectos de una cosa. Esto se demuestra en QEMU , un emulador rápido que realiza la virtualización de hardware.

Puedes pensar en una cosa como simulación. Sin embargo, la simulación también puede ser una palabra confusing .

Primero podemos definir el significado común de las palabras.

  • Simulación : hacer que una cosa haga lo que otra cosa hace.
  • Emulación : hacer que un sistema replique otro sistema exactamente.
  • Virtualización : Permitir la ejecución de un sistema dentro de otro sistema.

Ahora mostramos que todas las palabras significan más o menos lo mismo. Por ejemplo, en la simulación está creando una réplica de un sistema con otro sistema. Ese es el significado común de la emulación. En la virtualización, desea que su sistema virtualizado actúe como el sistema real. Es decir, idealmente, actúa como una réplica, aunque puede implementarse de manera diferente y no puede "emular" el hardware exactamente. Eso es lo mismo que la simulación. En una emulación, simulas otro sistema, etc.

Así que podemos ver que las palabras son algo intercambiables. El concepto subyacente es la simulación.

En la virtualización, como la virtualización del sistema operativo ("máquinas virtuales"), estamos creando un sistema que actúa como el sistema operativo. Puede usar trucos del hardware subyacente, o hipervisores, u otras cosas, para el rendimiento y la seguridad. Pero al final es solo una simulación de un sistema operativo. Normalmente, cuando se usa la palabra "máquina virtual", no es una réplica exacta de la máquina (como en un emulador). Simplemente hace lo suficiente para permitir que los programas se ejecuten como se esperaría en el sistema operativo real.

En emulación, normalmente se entiende que la simulación es "exacta". En la emulación de hardware, se replican todas las características del sistema de hardware. Esto significa que ha creado una simulación del hardware. Podría decir que creó una virtualización del hardware, pero aquí es donde la virtualización difiere ligeramente. La virtualización implica crear un entorno aislado, que la emulación no implica necesariamente. Por lo tanto, un emulador de hardware puede proporcionar la misma interfaz al hardware que el hardware en sí, pero la implementación del emulador puede depender de la memoria global, por lo que si intenta ejecutar dos emuladores al mismo tiempo, podrían interferir entre sí. Esto es lo que resuelve la virtualización, aísla las simulaciones.

Espero que ayude.


Sin emulación o virtualización, el código se ejecuta directamente en el hardware. Sus instrucciones se ejecutan de forma nativa por la CPU y sus accesos de E / S acceden directamente al hardware.

La virtualización es cuando el código de invitado se ejecuta de forma nativa al menos parte del tiempo , y solo atrapa el código de host que se ejecuta fuera de la máquina virtual (por ejemplo, un hypervisor ) para operaciones privilegiadas o accesos de E / S.

Para manejar estas trampas (también conocidas como salidas de VM), la VM puede emular realmente lo que el invitado estaba tratando de hacer. Por ejemplo, el invitado podría estar ejecutando un controlador de dispositivo para una tarjeta de red simple, pero la NIC se implementa únicamente en el software de la máquina virtual. Si la máquina virtual utilizara un paso para enviar los accesos de E / S del invitado a una tarjeta de red real en el host, eso sería virtualización de ese hardware. (Especialmente si lo hizo de una manera que permite que varios invitados lo usen a la vez, de lo contrario, en realidad se lo está dando a un invitado, no virtualizándolo).

El soporte de hardware para la virtualización ( como las extensiones de virtualización x86 por separado de Intel y AMD ) puede permitir al huésped hacer cosas que normalmente afectan a toda la máquina, como modificar las asignaciones de memoria en una tabla de páginas. Así que, en lugar de activar una salida de VM y hacer que la VM descubra lo que estaba haciendo el invitado y luego modificar las cosas desde el exterior para lograr el resultado, la CPU solo tiene una capa de traducción adicional incorporada. Una descripción mejor pero más larga de la virtualización basada en software frente a la virtualización asistida por hardware.)

La emulación pura significa que el código de invitado nunca se ejecuta de forma nativa, y nunca ve el hardware "real" del host. Un emulador no necesita acceso privilegiado al host . (Es posible que algunos deseen acceso privilegiado al host para el paso del dispositivo o para sockets de red sin procesar para que el huésped parezca que está realmente conectado a la misma red que el host).

Un emulador de ARM que se ejecuta en un host x86 siempre tiene que funcionar de esta manera, porque el hardware del host no puede ejecutar las instrucciones de ARM en primer lugar.

Pero aún puede emular un invitado x86 en un host x86, por ejemplo. El hecho de que las arquitecturas de invitado y host coincidan no significa que el emulador deba aprovechar ese hecho.

Por ejemplo, BOCHS es un emulador de PC x86 escrito en C ++ portátil. Uno de sus usos principales es para depurar cargadores de arranque y sistemas operativos.

A BOCHS no le importa si se está ejecutando en un host x86 o no. Es solo un programa en C ++ que lee archivos binarios (imágenes de disco) y dibuja en una ventana (contenido de la memoria de video del invitado). En lo que respecta al anfitrión, no es particularmente diferente de un visor de JPG o un juego.

Algunos emuladores utilizan la traducción binaria para compilar JIT el código del invitado en el código del host, pero esto sigue siendo emulación, no virtualización. Ver http://wiki.osdev.org/Emulator_Comparison .

BOCHS es relativamente lento, ya que lee y decodifica las instrucciones de los huéspedes directamente, sin hacer una traducción binaria. Pero trata de hacerlo lo más eficientemente posible. Vea cómo funciona Bochs Under the Hood para conocer algunos de los trucos que utiliza para realizar un seguimiento eficiente del estado invitado. Dado que la emulación es la única opción para ejecutar software x86 en hardware que no sea x86, es útil tener un emulador de alto rendimiento. BOCHS tiene algunos desarrolladores de emuladores muy inteligentes y experimentados que trabajan en ello, especialmente Darek Mihocka, que tiene algunos artículos interesantes sobre la optimización de la emulación en su sitio .


Una respuesta más reciente:

De mi investigación puedo decir que esta es una mejor respuesta para entender cómo aparece el concepto:

El primer concepto de emulación en realidad se remonta a la primera computadora, el Colossus. Fue utilizado por el gobierno británico en 1941 para imitar las funciones de la máquina de código Enigma Nazi. La teoría de la emulación se desarrolló en 1962 y fue concebida por tres ingenieros de IBM que trabajan desde tres ángulos diferentes.

Emulación significa imitar el comportamiento del objetivo, que puede ser hardware, como el emulador de emu8086, o puede ser software como la emulación de un servicio desde algún puerto de red.

Desea imitar el conjunto de funciones proporcionadas por el objetivo y tal vez no esté interesado en el mecanismo interno.

¿Porqué querrías eso? Para controlar esas funciones. ¿Por qué controlar? Por múltiples razones, que es un tema muy grande para discutir aquí. Pero ten en cuenta que quieres estar detrás de las cosas.

Pero tal proceso es costoso para el rendimiento. Usted tiene una instrucción para la cual se ejecutan muchas otras instrucciones. Tal vez usted está interesado en controlar sólo algunas de esas instrucciones. Así que nos gustaría permitir que algunas instrucciones se ejecuten de forma nativa.

Entonces, ¿qué sucede cuando todas estas instrucciones se vuelven nativas? Entonces tienes la virtualización ideal . Puede virtualizar cualquier software, pero la tendencia actual es pasar de la virtualización de los sistemas operativos a la de la aplicación. También digo ideal porque este software tiene una ejecución diferente en cada hardware, por lo que también será necesario emular algunas instrucciones. Es importante comprender que la mayoría de las tecnologías de virtualización de hoy en día no solo se trata de virtualizar, sino también de emulación.

También tenga en cuenta que en nuestra transición de emulación a virtualización, la entrada del sistema se reduce, ya que la virtualización solo acepta el software como entrada. El controlador de este flujo de instrucciones se llama HyperVisor .