You are on page 1of 54

Taller 3 de sistemas operativos

Ing. Ms. Jairo E. Márquez D.

VIRTUALIZACIÓN y MULTIHILOS 1

Se refiere a la abstracción de los recursos de un


computador, llamada Hypervisor o VMM (Virtual
Machine Monitor) que crea una capa de
abstracción entre el hardware de la máquina física
(host) y el sistema operativo de la máquina virtual
(virtual machine, guest), siendo un medio para
crear una versión virtual de un dispositivo o recurso,
como un servidor, un dispositivo de
almacenamiento, una red o incluso un sistema
operativo, donde se divide el recurso en uno o más
entornos de ejecución.

Esta capa de software (VMM) maneja, gestiona y arbitra los cuatro recursos principales de
una computadora (CPU, Memoria, Red, Almacenamiento) y así podrá repartir
dinámicamente dichos recursos entre todas las máquinas virtuales definidas en el
computador central. De modo que nos permite tener varios ordenadores virtuales
ejecutándose sobre el mismo ordenador físico.

La virtualización se encarga de crear una interfaz externa que esconde una


implementación subyacente mediante la combinación de recursos en localizaciones
físicas diferentes, o por medio de la simplificación del sistema de control.

La máquina virtual en general es un sistema operativo completo que corre como si


estuviera instalado en una plataforma de hardware autónoma. Típicamente muchas
máquinas virtuales son simuladas en un computador central. Para que el sistema
operativo “guest” funcione, la simulación debe ser lo suficientemente grande (siempre
dependiendo del tipo de virtualización).

Virtualización de plataforma

Esta involucra la simulación de máquinas virtuales. La virtualización de plataforma se lleva


a cabo en una plataforma de hardware mediante un software "host" (“anfitrión”), que es un
programa de control que simula un entorno computacional (máquina virtual) para su
software "guest" ("invitado"). Este software “guest”, que generalmente es un SO completo,
se ejecuta como si estuviera instalado en una plataforma de hardware autónoma.
Típicamente muchas máquinas virtuales son simuladas en una máquina física dada. Para
que el SO “guest” funcione, la simulación debe ser lo suficientemente grande como para
soportar todas las interfaces externas de los sistemas guest, las cuales se pueden incluir
(todo esto dependiendo del tipo de virtualización) los drivers de hardware.

1
Fuente de consulta. http://es.wikipedia.org/wiki/Virtualizaci%C3%B3n
Tipos de Virtualización de plataforma

Virtualización completa

Esta es en donde la máquina virtual simula un hardware suficiente para permitir un


sistema operativo “guest” sin modificar (uno diseñado para la misma CPU) para correr de
forma aislada. Típicamente, muchas instancias pueden correr al mismo tiempo.

Ejemplos
• VMware Workstation
• VMware Server
• Virtual Box
• Parallels Desktop
• Virtual Iron
• Adeos
• Mac-on-Linux
• Win4BSD
• Win4Lin Pro
• y z/VM
• openvz
• Oracle VM
• XenServer
• Microsoft Virtual PC 2007
• Hyper-V

Virtualización parcial

“Address Space Virtualization”. La máquina virtual simula múltiples instancias de gran


parte (pero no de todo) del entorno subyacente del hardware, particularmente address
spaces. Tal entorno acepta compartir recursos y alojar procesos, pero no permite
instancias separadas de sistemas operativos “guest”. Aunque no es vista como dentro de
la categoría de máquina virtual.

Virtualización por Sistema Operativo

Virtualizar significa instalar un Sistema Operativo (SO) dentro de otro al que se le llama
guest (invitado), mediante el uso de una MV. Frecuentemente denominada virtualización
compartida del Sistema Operativo o virtualización del SO, la virtualización del Sistema
Operativo virtualiza servidores en la capa del sistema operativo (kernel). Este método de
virtualización crea particiones aisladas o entornos virtuales (VEs) en un único servidor
físico e instancia de SO para así maximizar los esfuerzos de administración del hardware,
software y centro de datos. La Virtualización de Hypervisor tiene una capa base
(generalmente un kernel, Linux que se muestra aquí como un hypervisor o SO estándar)
que se carga directamente en el servidor base.

Para asignar hardware y recursos a las máquinas virtuales (VMs), es recomendable que
todo el hardware del servidor esté virtualizado. La siguiente capa superior muestra cada
chip, placa, etc. que debe virtualizarse para que así pueda ser asignado a las VMs. Una
vez en la VM, hay una copia completa de un SO y finalmente la aplicación o carga de
trabajo.
La Virtualización del SO mejora el rendimiento, gestión y eficiencia. En la base reside un
SO huésped estándar, en el caso de Parallels Virtuozzo que incluye Windows y Linux. A
continuación se encuentra la capa de virtualización, con un sistema de archivos
propietario y una capa de abstracción de servicio de kernel que garantiza el aislamiento y
seguridad de los recursos entre distintos contenedores. La capa de virtualización hace
que cada uno de los contenedores aparezca como servidor autónomo. Finalmente, el
contenedor aloja la aplicación o carga de trabajo.

Virtualización a nivel de sistema operativo

Esta técnica consiste en dividir una computadora en varios


compartimentos independientes de manera que en cada
compartimento podamos instalar un servidor. A estos
compartimentos se los llama "entornos virtuales". Desde el
punto de vista del usuario, el sistema en su conjunto actúa
como si realmente existiesen varios servidores ejecutándose
en varias máquinas distintas. Dos ejemplos son las zonas de
Solaris (Solaris Zones) y la técnica de Micro Partioning de AIX.

Virtualización de Plataforma

La virtualización de Plataforma permite a los sistemas arbitrarios de operación y


ambientes de operación resultante correr en un sistema dado. Existen dos modelos
básicos para este sistema de virtualización: total virtualización o una simulación completa
del hardware fundamental, y paravirtualización, lo cual ofrece un modelo “mayormente
similar” del hardware fundamental. Estos están implementados como hipervisores Tipo 1,
los cuales corren directamente en el hardware, e hipervisores Tipo 2, los cuales corren a
nivel superior de un SO tradicional. Cada uno de los proveedores de virtualización
superior ofrece variaciones de ambos modelos. Es importante darse cuenta de que
existen intercambios de diseño y desempeño en cualquier modelo del sistema de
virtualización. Generalmente, cuanto más abstracto sea hecho el SO del hardware
fundamental, menos características específicas del hardware pueden ser accesadas. La
abstracción del SO incrementada también puede
incrementar el potencial en la reducción y las
limitaciones del desempeño.

Virtualización de Red

Las técnicas de balanceo de carga han sido un


tema discutible en el cómputo cloud porque,
conforme los sistemas físicos y virtuales dentro
de la nube escalan, lo mismo hace la
complejidad del manejo de la carga de trabajo
que es ejecutada para entregar el servicio. Los
balanceadores de carga agrupan múltiples
servidores y servicios detrás de las direcciones
IP virtuales. Ellos proveen de una guía basada
en recursos de requerimientos de servicio y
recuperación de falla automática cuando el nodo falla. Mientras los balanceadores del
hardware puedan ejecutar balanceadores basados en el software, su flexibilidad es
siempre limitada. Los ingenieros terminan también escribiendo un software que interactúa
con el hardware vía una interface de usuario sub-óptimo o utilizando un gran número de
computadoras para resolver el problema. Un reto significativo en la red de cómputo cloud
no es sólo la provisión de interfaces individuales de la red virtual a un ambiente virtual
dado, sino también la necesidad creciente de infraestructuras nube de ofrecer un centro
de datos más centros de datos virtual y privado más complicado, el cual provea un
conjunto de diferentes roles de sistemas y la interconexión lógica entre esos roles.

Virtualización de Aplicaciones

Existe también un ángulo software para los


“contenedores” dentro de la nube. La
tecnología de contenedor Web implementada
en la nube impacta grandemente a la
productividad y flexibilidad del desarrollador.
El contenedor Web es la parte del servidor de
aplicación que maneja servlets 2, archivos
JavaServer™ Page 3 (JSP por sus siglas en
inglés), y otros componentes Web-tier. Pero no
todas las tecnologías contenedor Web son
creadas iguales. Apache Tomcat, por ejemplo,
es una tecnología de contenedor Web de
código abierto, pero tiene limitaciones para los
desarrolladores quienes quieren ir más allá de las aplicaciones Web-tier. Si una aplicación
necesita utilizar persistencia, clustering, falla, mensaje, o Enterprise Java Beans (EJB™),
estas capacidades tienen que ser añadidas a Tomcat una por una, mientras que
GlassFish™ Project provee una colección integrada de contenedores Java EE que
entrega todas esas capacidades. Hoy, la mayoría de las ofertas del cómputo cloud se
concentran en la virtualización de plataforma, y el desarrollador escoge el SO y plataforma
de desarrollo. Pero las crecientes nubes públicas y ciertamente las nubes privadas
ofrecerán abstracciones de una programación de ambiente de desarrollo al más alto nivel.
Con el tiempo, podríamos esperar que el nivel de abstracción con el que el desarrollador
tiene interfase se mueva gradualmente hacia arriba mientras que mayor funcionalidad se
filtra hacia adentro de la plataforma.

Infraestructura virtual

Una infraestructura virtual consiste en el mapping dinámico de recursos físicos en función


de las necesidades de la empresa. Una máquina virtual representa los recursos físicos de
un único ordenador, mientras que una infraestructura virtual representa los recursos
físicos de la totalidad del entorno de TI (tecnologías de información), aglutinando
ordenadores x86 4, así como su red y almacenamiento asociados, en un pool unificado de

2
Son programas que se ejecutan en un servidor Web y construyen páginas Web.
3
Java Server Pages (JSP) es una tecnología que nos permite mezclar HTML estático con HTML generado
dinámicamente.
4
x86 es la denominación genérica dada a ciertos microprocesadores de la familia Intel, sus compatibles y la
arquitectura básica a la que estos procesadores pertenecen, por la terminación de sus nombres numéricos:
8086, 80286, 80386, 80486, etc.
recursos de TI. Estructuralmente, una infraestructura virtual consta de los siguientes
componentes:

Hipervisor de un solo nodo para hacer posible la virtualización de todos los


ordenadores x86
Un conjunto de servicios de infraestructura de sistemas distribuida basada
en la virtualización, como gestión de recursos, para optimizar los recursos
disponibles entre las máquinas virtuales
Soluciones de automatización que proporcionen capacidades especiales
para optimizar un proceso de TI concreto, como provisioning o recuperación
ante desastres.

Mediante la separación de la totalidad del entorno de software de su infraestructura de


hardware subyacente, la virtualización hace posible la reunión de varios servidores,
estructuras de almacenamiento y redes en pools compartidos de recursos que se pueden
asignar de forma dinámica, segura y fiable a las aplicaciones según sea necesario. Este
enfoque innovador permite a las organizaciones crear una infraestructura informática con
altos niveles de utilización, disponibilidad, automatización y flexibilidad utilizando
componentes básicos de servidores económicos y estándar del sector. Ventajas de la
infraestructura virtual VMware ha hecho posible el total aprovechamiento de las
muchas ventajas de la virtualización en entornos de TI a escala de producción mediante la
creación de automatización de infraestructuras virtuales y capacidades de gestión
basándose en un robusto hipervisor. De hecho, el 86% de los clientes de VMware utilizan
la virtualización en producción y el 50% implementa la mayoría de las aplicaciones de
producción nuevas en máquinas virtuales. Las soluciones de infraestructura virtual son
ideales para entornos de producción en parte debido a que se ejecutan en servidores y
escritorios estándar de la industria y son compatibles con una amplia gama de de
sistemas operativos y entornos de aplicación, así como de infraestructuras
de red y almacenamiento. Se han diseñado las soluciones para que funcionen de manera
independiente del hardware y del sistema operativo y poder brindar a los clientes amplias
posibilidades de elección de plataforma. Como resultado, son soluciones que
proporcionan un punto de integración clave para los proveedores de hardware y gestión
de infraestructuras de cara a ofrecer un valor único y aplicable por igual en todos los
entornos de aplicación y sistemas operativos.

Diferencias entre virtualizar un Sistema operativo e instalarlo

Virtualizar el SO, implica instalar dos sistemas operativos en el


mismo computador, pero si por el contrario lo que hacemos es
instalarlo, todos los sistemas operativos que tengamos
instalados funcionaran de la misma manera que si estuvieran
instalados en distintos computadores.

El inconveniente es que se necesita un gestor de arranque que


al encender el computador dé la opción de elegir qué SO se
desea utilizar, lo que conlleva a que si por ejemplo estamos en

La comercial popularidad de esta arquitectura hizo que muchos fabricantes, además de Intel, empezaran a
fabricar en masa microprocesadores basados en esta arquitectura. Estas compañías son entre otras AMD,
Cyris, NEC Corporation y TRansmeta.
Windows y queremos cambiar a Linux se debe reiniciar el equipo. La virtualización por el
contrario permite cambiar de SO como si se tratase de cualquier otro programa, sin
embargo, esta agilidad tiene la desventaja de que un SO virtualizado no es tan potente
como uno que ya estuviera instalado.

Retos de la Virtualización

• Índices de utilización más altos — Antes de la virtualización, los índices de uso del
servidor y almacenamiento en los centros de datos de la empresa rondaban entre
un 10% al 15%. A través de la virtualización, las cargas de trabajo pueden ser
encapsuladas y transferidas a los sistemas inactivos o sin uso — lo cual significa
que los sistemas existentes pueden ser consolidados, así que las compras de
capacidad adicional del servidor pueden ser retrasadas o evitadas.
• Consolidación de Recursos — La virtualización permite la consolidación de
múltiples recursos de TI. Más allá de la consolidación de almacenamiento, la
virtualización proporciona una oportunidad para consolidar la arquitectura de
sistemas, infraestructura de
aplicación, datos y base de datos,
interfaces, redes, escritorios, e
incluso procesos de negocios,
resultando en ahorros de costo y
mayor eficiencia.
• Uso/costo menor energía — La
electricidad requerida para que
funcionen los centros de datos de
clase empresarial ya no está
disponible en suministros ilimitados,
y el costo está en una espiral ascendente. Por cada dólar gastado en un servidor
hardware, un dólar adicional es gastado en energía (incluyendo el costo de los
servidores en función y los enfriadores). Utilizando virtualización para consolidar
hace posible cortar el consumo total de energía y ahorrar dinero de una manera
significativa.
• Ahorros de espacio — La extensión del servidor permanece como un serio
problema en la mayoría de los centros de datos empresariales, pero la expansión
del centro de datos no es siempre una opción, con los costos de construcción
promediando miles de dólares por pie cuadrado. La virtualización puede aliviar la
tensión mediante la consolidación de muchos sistemas virtuales en menos
sistemas físicos.
• Recuperación de desastre/continuidad del negocio — La virtualización puede
incrementar la disponibilidad de los índices del nivel de servicio en general y
proporcionar nuevas opciones de soluciones para la recuperación de desastre.
• Costos de operación reducidos — La empresa promedio gasta $8 dólares en
mantenimiento por cada dólar invertido en nueva infraestructura. La virtualización
puede cambiar el radio de servicio-a administración reducir la total carga de
trabajo administrativo, y cortar el total de costos de operación.

Ventajas de la Virtualización

• Rápida incorporación de nuevos recursos para los servidores virtualizados.


• Reducción de los costes de espacio y consumo necesario de forma proporcional al
índice de consolidación logrado (Estimación media 10:1).
• Administración global centralizada y simplificada.
• Permite gestionar nuestro CPD como un pool de recursos o agrupación de toda la
capacidad de procesamiento, memoria, red y almacenamiento disponible en
nuestra infraestructura
• Mejora en los procesos de clonación y copia de sistemas: Mayor facilidad para la
creación de entornos de test que permiten poner en marcha nuevas aplicaciones
sin impactar a la producción, agilizando el proceso de las pruebas.
• Aislamiento: un fallo general de sistema de una máquina virtual no afecta al resto
de máquinas virtuales.
• Mejora de TCO 5 y ROI 6.
• No sólo aporta el beneficio directo en la reducción del hardware necesario, sino
también los costes asociados.
• Reduce los tiempos de parada.
• Migración en caliente de máquinas virtuales (sin pérdida de servicio) de un
servidor físico a otro, eliminando la necesidad de paradas planificadas por
mantenimiento de los servidores físicos.
• Balanceo dinámico de máquinas virtuales entre los servidores físicos que
componen el pool de recursos, garantizando que cada máquina virtual ejecute en
el servidor físico más adecuado y proporcionando un consumo de recursos
homogéneo y óptimo en toda la infraestructura.
• Alto grado de satisfacción general.

Programas útiles para virtualizar sistemas operativos

Existen dos tipos de programas: los que son de pago y los que son de código libre. Los de
pago, está el VMware, que es uno de los referentes en el mercado. A pesar de ser de
pago también existe una versión básica que es gratuita, VMware Player, que permite
virtualizar a través de una máquina virtual ya configurada. También existen webs que

5
El coste total de propiedad (Total Cost of Ownership o TCO), es un método de cálculo diseñado para
ayudar a los usuarios y a los gestores empresariales a determinar los costes directos e indirectos, así como los
beneficios, relacionados con la compra de equipos o programas informáticos. El CTP ofrece un resumen final
que refleja no sólo el coste de la compra sino aspectos del uso y mantenimiento. Esto incluye formación para
el personal de soporte y para usuarios, el coste de operación, y de los equipos o trabajos de consultoría
necesarios, etc. Por ejemplo, la compra de un ordenador puede incluir la compra en sí misma, reparaciones,
mantenimiento, actualizaciones, servicios y soporte, redes, seguridad, formación de usuarios y costes de
licencias.

6
El retorno de la inversión (del inglés return on investment) es un porcentaje que se calcula en función de la
inversión y los beneficios obtenidos para cuantificar la viabilidad de un proyecto. Se utiliza junto al VAN
(valor actual neto) y a la TIR (tasa interna de retorno o rentabilidad).
Existen diversas formas para obtenerlo. Una de ellas es: , donde: B representa los beneficios, y Ci
representa los costes iniciales

Formula aritmética

, donde: Vf representa la inversión final, y Vi representa la inversión inicial.


permiten llenar un formulario y descargar la máquina virtual a gusto, como EasyVMX!
Parallels Virtuozzo Containers, es otro de los programas de pago famosos, que permite
la virtualización a nivel de sistema operativo o hardware Parallels Bare Metal.
Típicamente suele emplearse para virtualizar Windows y, en menor medida, GNU/Linux.
Dentro de los programas gratuitos tenemos el Virtual PC de Microsoft, compatible con
versiones avanzadas de XP, Vista y 7.

Dentro de los programas de código libre están el Xen, OpenVZ y VirtualBox, que
funcionan tanto en Mac OS, en Windows como en GNU/Linux y todos permiten virtualizar
los tres sistemas operativos.

Tipos de virtualización

La virtualización se puede hacer desde un sistema operativo Windows, ya sea XP, Vista u
otra versión que sea compatible con el programa que utilicemos, en el que virtualizamos
otro sistema operativo como Linux o viceversa, que tengamos instalado Linux y queramos
virtualizar una versión de Windows.

Virtualización por (Hardware)

La Virtualización asistida por Hardware son extensiones


introducidas en la arquitectura de procesador x86 para facilitar las
tareas de virtualización al software corriendo sobre el sistema. Si
cuatro son los niveles de privilegio o "anillos" de ejecución en esta
arquitectura, desde el cero o de mayor privilegio, que se destina a
las operaciones del kernel de SO, al tres, con privilegios menores
que es el utilizado por los procesos de usuario, en esta nueva
arquitectura se introduce un anillo interior o ring -1 que será el que
un hypervisor o Virtual Machine Monitor usará para aislar todas las
capas superiores de software de las operaciones de virtualización.

La virtualización de almacenamiento

Se refiere al proceso de abstraer el almacenamiento lógico del almacenamiento físico, y


es comúnmente usado en SANs ("Storage Area Network" Red de área de
almacenamiento). Los recursos de almacenamiento físicos son agregados al "storage
pool" (almacén de almacenamiento), del cual es creado el almacenamiento lógico.

Particionamiento

Es la división de un solo recurso (casi siempre grande), como en espacio de disco o


ancho de banda de la red, en un número más pequeño y con recursos del mismo tipo que
son más fáciles de utilizar. Esto es muchas veces llamado “zoning”, especialmente en
almacenamiento de red.

Virtualización relacionada con el Green IT

En estudios realizados se han basado sobre el ahorro de energía que genera la empresa
para sus clientes, muestra que las soluciones de virtualización reducen los costos
económicos y emisiones de CO2. Esto se puede llevar acabo fusionando varias máquinas
en un solo servidor, con lo que disminuyendo el consumo energético y los costos;
ahorrando 7.000 kilovatios/hora o 4 toneladas de emisiones de CO2 al año. Los PCs
virtualizados pueden reducir el consumo de energía y los costos en un 35%. Hoy en día,
la mayor parte consumen entre un 70 y un 80% de su energía estimada. Otra medida es
la desconexión de los servidores y desktops durante los períodos de inactividad, como por
la noche o los fines de semana, con lo que se puede ahorrar aproximadamente un 25%
en su consumo energético. Las empresas hoy en día son las más interesadas en el tema
de la virtualización, ya que para ellas es muy importante reducir costos y energía
principalmente.

Infraestructura Virtual

Una infraestructura virtual consiste en el mapping


dinámico de recursos físicos en función de las
necesidades de la empresa. Una máquina virtual
representa los recursos físicos de un único ordenador,
mientras que una infraestructura virtual representa los
recursos físicos de la totalidad del entorno de TI,
aglutinando ordenadores x86, así como su red y
almacenamiento asociados, en un pool unificado de
recursos de TI.

Estructuralmente, una infraestructura virtual consta de los siguientes componentes:

• Hipervisor de un solo nodo para hacer posible la virtualización de todos los


ordenadores x86.
• Un conjunto de servicios de infraestructura de sistemas distribuida basada en la
virtualización, como gestión de recursos, para optimizar los recursos disponibles
entre las máquinas virtuales.
• Soluciones de automatización que proporcionen capacidades especiales para
optimizar un proceso de TI concreto, como provisioning o recuperación ante
desastres. Mediante la separación de la totalidad del entorno de software de su
infraestructura de hardware subyacente, la virtualización hace posible la reunión
de varios servidores, estructuras de almacenamiento y redes en pools compartidos
de recursos que se pueden asignar de forma dinámica, segura y fiable a las
aplicaciones según sea necesario. Este enfoque innovador permite a las
organizaciones crear una infraestructura informática con altos niveles de
utilización, disponibilidad, automatización y flexibilidad utilizando componentes
básicos de servidores económicos y estándar del sector.

Ventajas de la Infraestructura Virtual

Las soluciones de infraestructura virtual son ideales para entornos de producción en parte
debido a que se ejecutan en servidores y escritorios estándar de la industria y son
compatibles con una amplia gama de sistemas operativos y entornos de aplicación, así
como de infraestructuras de red y almacenamiento. Se han diseñado las soluciones para
que funcionen de manera independiente del hardware y del sistema operativo y poder
brindar a los clientes amplias posibilidades de elección de plataforma. Como resultado,
son soluciones que proporcionan un punto de integración clave para los proveedores de
hardware y gestión de infraestructuras de cara a
ofrecer un valor único y aplicable por igual en
todos los entornos de aplicación y sistemas
operativos.

Las empresas que han adoptado estas


soluciones de infraestructura virtual nos han
comunicado unos clarísimos resultados
positivos, entre ellos:

• Índices de utilización del 60 al 80% para servidores x86 (frente al 5 a 15% en


hardware no virtualizado)
• Capacidad para el provisioning de nuevas aplicaciones en cuestión de minutos, en
lugar de días o semanas
• 85% de mejora en tiempo de recuperación de paradas imprevistas

MÁQUINA VIRTUAL 7

Una máquina virtual es un contenedor de


software aislado que puede ejecutar sus
propios sistemas operativos y aplicaciones
como si fuera un ordenador físico. Una
máquina virtual se comporta exactamente
igual que lo hace un ordenador físico y
contiene sus propios CPU, RAM, disco duro y
tarjetas de interfaz de red (NIC) virtuales.

El SO no puede establecer una diferencia


entre una máquina virtual y una máquina
física, ni tampoco lo pueden hacer las
aplicaciones u otros ordenadores de una red.
Incluso la propia máquina virtual considera que es un ordenador “real”. Sin embargo, una
máquina virtual se compone exclusivamente de software y no contiene ninguna clase de
componente de hardware. El resultado de ello es que las MV ofrecen una serie de
ventajas con respecto al hardware físico.

Ventajas de las Máquinas Virtuales

Compatibilidad

Al igual que un ordenador físico, una MV aloja su propio SO y aplicaciones guest, y


dispone de los mismos componentes (placa base, tarjeta VGA, controlador de tarjeta de
red, etc.). El resultado de ello es que las MV son totalmente compatibles con la totalidad
de sistemas operativos x86, aplicaciones y controladores de dispositivos estándar, de
modo de se puede utilizar una MV para ejecutar el mismo software que se puede ejecutar
en un ordenador x86 físico.

7
Fuente de consulta. http://www.itnews.ec/marco/000174.aspx
Aislamiento

Aunque las MV pueden compartir los recursos físicos de un único ordenador, permanecen
completamente aisladas unas de otras, como si se tratara de máquinas independientes.
Si, por ejemplo, hay cuatro máquinas virtuales en un único servidor físico y falla una de
ellas, las otras tres siguen estando disponibles. El aislamiento es un factor importante que
explica por qué la disponibilidad y protección de las aplicaciones que se ejecutan en un
entorno virtual es muy superior a las aplicaciones que se ejecutan en un sistema
tradicional no virtualizado.

Encapsulamiento

Una MV es básicamente un contenedor


de software que ata o “encapsula” un
conjunto completo de recursos de
hardware virtuales, así como un sistema
operativo y todas sus aplicaciones,
dentro de un paquete de software. El
encapsulamiento hace a las máquinas
virtuales extraordinariamente portables y
fáciles de gestionar. Por ejemplo, puede
mover y copiar una máquina virtual de
un lugar a otro como lo haría con
cualquier otro archivo de software, o
guardar una máquina virtual en cualquier
medio de almacenamiento de datos estándar, desde una memoria USB de tamaño de
bolsillo hasta las redes de área de almacenamiento (SAN) de una empresa.

Independencia del Hardware

Las máquinas virtuales son


completamente independientes de su
hardware físico subyacente. Por ejemplo,
se puede configurar una máquina virtual
con componentes virtuales (CPU, tarjeta
de red, controlador SCSI, pongamos por
caso) que difieren totalmente de los
componentes físicos presentes en el
hardware subyacente. Las máquinas
virtuales del mismo servidor físico
pueden incluso ejecutar distintos tipos de
sistema operativo (Windows, Linux, etc.).
Si se combina con las propiedades de
encapsulamiento y compatibilidad, la
independencia del hardware proporciona la libertad para mover una máquina virtual de un
tipo de ordenador x86 a otro sin necesidad de efectuar ningún cambio en los
controladores de dispositivo, en el sistema operativo o en las aplicaciones. La
independencia del hardware también significa que se puede ejecutar una mezcla
heterogénea de sistemas operativos y aplicaciones en un único ordenador físico.
Tipos de máquinas virtuales

Las máquinas virtuales se pueden clasificar en dos grandes categorías según su


funcionalidad y su grado de equivalencia a una verdadera máquina.

• Máquinas virtuales de sistema (en inglés System Virtual Machine).


• Máquinas virtuales de proceso (en inglés Process Virtual Machine)

Máquinas virtuales de sistema

Las máquinas virtuales de alivio sistema, también llamadas máquinas virtuales de


hardware, permiten a la máquina física
subyacente multiplexarse entre varias
máquinas virtuales, cada una
ejecutando su propio sistema operativo.
A la capa de software que permite la
virtualización se la llama monitor de
máquina virtual o "hypervisor". Un
monitor de máquina virtual puede
ejecutarse o bien directamente sobre el
hardware o bien sobre un sistema
operativo ("host operating system").

Aplicaciones de las máquinas virtuales de sistema

 Varios sistemas operativos distintos pueden coexistir sobre la misma


computadora, en sólido aislamiento el uno del otro, por ejemplo para probar un
sistema operativo nuevo sin necesidad de instalarlo directamente.

 La MV puede proporcionar una arquitectura de instrucciones (ISA) que sea algo


distinta de la verdadera máquina. Es decir, podemos simular hardware.

 Varias máquinas virtuales (cada una con su propio SO llamado sistema operativo
"invitado" o "guest"), pueden ser utilizadas para consolidar servidores. Esto permite
que servicios que normalmente se tengan que ejecutar en computadoras distintas
para evitar interferencias, se puedan ejecutar en la misma máquina de manera
completamente aislada y compartiendo los recursos de una única computadora. La
consolidación de servidores a menudo contribuye a reducir el coste total de las
instalaciones necesarias para mantener los servicios, dado que permiten ahorrar en
hardware.

 La virtualización es una opción hoy día, ya que las máquinas actuales (Laptops,
desktops, servidores) en la mayoría de los casos están siendo "sub-utilizados" (gran
capacidad de disco duro, memoria RAM, etc.), llegando a un uso de entre 30% a 60%
de su capacidad. Al virtualizar, la necesidad de nuevas máquinas en una ya existente
permite un ahorro considerable de los costos asociados (energía, mantenimiento,
espacio, etc).
Máquinas virtuales de proceso

Una máquina virtual de proceso, a veces llamada "máquina virtual de aplicación", se


ejecuta como un proceso normal dentro de un SO y soporta un solo proceso. La máquina
se inicia automáticamente cuando se lanza el proceso que se desea ejecutar y se detiene
para cuando éste finaliza. Su objetivo es el de proporcionar un entorno de
ejecución independiente de la plataforma de hardware y del SO, que oculte los detalles de
la plataforma subyacente y permita que un programa se ejecute siempre de la misma
forma sobre cualquier plataforma.

El ejemplo más conocido es la máquina virtual de Java, y la máquina virtual del


entorno .Net de Microsoft que se llama "Common Language Runtime".

Funcionamiento de la máquina virtual de Java.

El lenguaje Java es a la
vez compilado e
interpretado. Con el
compilador se convierte
el código fuente que
reside en archivos cuya
extensión es .java, a un
conjunto de instrucciones
que recibe el nombre de
bytecodes que se
guardan en un archivo
cuya extensión es .class.
Estas instrucciones son
independientes del tipo
de ordenador. El
intérprete ejecuta cada
una de estas
instrucciones en un ordenador específico (Windows, Macintosh, etc). Solamente es
necesario, por tanto, compilar una vez el programa, pero se interpreta cada vez que se
ejecuta en un ordenador.

Cada intérprete Java es una implementación de la Máquina Virtual Java (JVM). Los
bytecodes posibilitan el objetivo de "write once, run anywhere", de escribir el programa
una vez y que se pueda correr en cualquier plataforma que disponga de una
implementación de la JVM. Por ejemplo, el mismo programa Java puede correr en
Windows 98, Solaris, Macintosh, etc.

Java es, por tanto, algo más que un lenguaje, ya que la palabra Java se refiere a dos
cosas inseparables: el lenguaje que nos sirve para crear programas y la Máquina Virtual
Java que sirve para ejecutarlos. Como se observa en la figura, el API de Java y la
Máquina Virtual Java forman una capa intermedia (Java platform) que aísla el programa
Java de las especificidades del hardware (hardware-based platform).
Máquina Virtual Java

La Máquina Virtual Java (JVM) es el entorno en el que se


ejecutan los programas Java, su misión principal es la de
garantizar la portabilidad de las aplicaciones Java. 8 Define
esencialmente un ordenador abstracto y especifica las
instrucciones (bytecodes) que este ordenador puede ejecutar. El
intérprete Java específico ejecuta las instrucciones que se
guardan en los archivos cuya extensión es .class. Las tareas
principales de la JVM son las siguientes:

• Reservar espacio en memoria para los objetos creados


• Liberar la memoria no usada (garbage collection).
• Asignar variables a registros y pilas
• Llamar al sistema huésped para ciertas funciones, como los accesos a los
dispositivos.
• Vigilar el cumplimiento de las normas de seguridad de las aplicaciones Java

Esta última tarea, es una de las más importantes que realiza la JVM. Además, las propias
especificaciones del lenguaje Java contribuyen extraordinariamente a este objetivo:

• Las referencias a arrays son verificadas en el momento de la ejecución del


programa

8
El lenguaje Java no está diseñado solamente para crear applets que corren en la ventana del navegador. Java
es un lenguaje de propósito general, de alto nivel, y orientado a objetos puro; en el sentido de que no hay
ninguna variable, función o constante que no esté dentro de una clase. Se accede a los miembros dato y las
funciones miembro a través de los objetos y de las clases. Por razones de eficiencia, se han conservado los
tipos básicos de datos, int, float, double, char, etc, similares a los del lenguaje C/C++.

Los tipos de programas más comunes que se pueden hacer con Java son los applets (se ejecutan en el
navegador de la máquina cliente) y las aplicaciones (programas que se ejecutan directamente en la JVM).
Otro tipo especial de programa se denomina servlet que es similar a los applets pero se ejecutan en los
servidores Java.

La API de Java es muy rica, está formada un conjunto de paquetes de clases que le proporcionan una gran
funcionalidad. El núcleo de la API viene con cada una de las implementaciones de la JVM:

• Lo esencial: tipos de datos, clases y objetos, arrays, cadenas de caracteres (strings), subprocesos
(threads), entrada/salida, propiedades del sistema, etc.
• Applets
• Manejo de la red (networking), E internacionalización
• Seguridad
• Componentes (JavaBeans)
• Persistencia (Object serialization)
• Conexión a bases de datos (JDBC)

Java proporciona también extensiones, por ejemplo define un API para 3D, para los servidores, telefonía,
reconocimiento de voz, etc.
• No hay manera de manipular de forma directa los punteros
• La JVM gestiona automáticamente el uso de la memoria, de modo que no queden
huecos.
• No se permiten realizar ciertas conversiones (casting) entre distintos tipos de
datos.

Por ejemplo, cuando el navegador encuentra una página web con un applet, pone en
marcha la JVM y proporciona la información que aparece en la etiqueta <APPLET > ...
</APPLET>. El cargador de clases dentro de la JVM ve que clases necesita el applet.
Dentro del proceso de carga, las clases se examinan mediante un verificador que asegura
que las clases contienen código válido y no malicioso. Finalmente, se ejecuta el applet.

Inconvenientes de las máquinas virtuales

Uno de los inconvenientes de las máquinas virtuales es que agregan gran complejidad al
sistema en tiempo de ejecución. Esto tiene como efecto la ralentización del sistema, es
decir, el programa no alcanzará la misma velocidad de ejecución que si se instalase
directamente en el sistema operativo "anfitrión" (host) o directamente sobre la plataforma
de hardware. Sin embargo, a menudo la flexibilidad que ofrecen compensa esta pérdida
de eficiencia.

Técnicas

Emulación del hardware subyacente (ejecución nativa)

La virtualización consiste emular el hardware mediante una aplicación llamada


"hypervisor", de tal forma que permita ejecutar uno o varios sistemas operativos, es decir,
desvincular la ejecución del sistema operativo y aplicaciones del hardware para
encapsularlo dentro de un entorno virtual simulado por software.

La virtualización empaqueta el hardware, sistema operativo, aplicaciones y datos de las


máquinas virtuales en ficheros, que como tales son trasportables de una máquina física a
otra. La virtualización es aplicable tanto a servidores como a equipos de escritorio.
La virtualización ofrece numerosas ventajas, tanto aplicada a servidores como a equipos
de escritorio, a costa de una pequeña carga de trabajo adicional en los host. Dado que
hoy en día el promedio de carga de los host ronda el 20%, el sacrificio claramente merece
la pena. En infraestructuras con varios servidores o múltiples equipos de escritorio, el
retorno de la inversión está asegurado en periodos de tiempo muy breves.

Se habla también de virtualización completa (full virtualization) del hardware, y se puede


implementar usando un Hypervisor o monitor de máquina virtual (virtual machine
monitor) 9 de Tipo 1 o de Tipo 2:

 El tipo 1 se ejecuta directamente sobre el hardware: También denominado nativo,


unhosted o sobre el metal desnudo (bare metal), es software que se ejecuta
directamente sobre el hardware, para ofrecer la funcionalidad descrita. Nótese en las
imágenes, que se puede hacer correr varios sistemas operativos sobre el sistema
operativo nativo, pero se comparten los recursos computacionales de todo el sistema
en sí.

9
Es una plataforma de virtualización que permite utilizar, al mismo tiempo, diferentes SO (sin modificar o
modificados en el caso de paravirtualización = software que permite virtualizar un SO. ) en una misma
computadora. Es una extensión de un término anterior, “supervisor”, que se aplicaba a kernel de sistemas
operativos.
 El tipo 2 se ejecuta sobre otro sistema operativo: También denominado hosted, es
software que se ejecuta sobre un sistema operativo para ofrecer la funcionalidad
descrita. Nótese que aun se puede compartir recursos computacionales vía red, por
medio de la máquina virtual.

Cada máquina virtual puede ejecutar cualquier sistema operativo soportado por el
hardware subyacente. Así los usuarios pueden ejecutar dos o más sistemas operativos
distintos simultáneamente en computadoras "privadas" virtuales.

Con la arquitectura VM, la mayor parte de usuarios controlan un SO monousuario


relativamente simple llamado CMS que se ejecuta en la máquina virtual VM.

Actualmente tanto Intel como AMD han introducido prestaciones a sus


procesadores x86 para permitir la virtualización de hardware.

Consolidación de hipervisores

La consolidación se refiere a ejecutar varias máquinas virtuales en un mismo servidor o


host, reduciendo así el número total de máquinas físicas. Dado que el promedio de carga
de trabajo de los host es de aproximadamente el 20%, con la consolidación podemos
reducir el número de máquinas físicas en un 500%.
Al reducir el número de máquinas físicas se reduce tanto su consumo eléctrico como su
mantenimiento, que habitualmente supera el coste de la propia máquina.

Disponibilidad de hipervisores

El tener las máquinas encapsuladas en ficheros y desligadas del hardware donde se


ejecutan permite gestionarlas con facilidad, moviéndolas de un host a otro para labores de
mantenimiento, sin necesidad de apagarlas, o arrancándolas automáticamente en otro
host en caso de que falle el que las ejecuta.

La virtualización reduce los tiempos de parada tanto planificados como no planificados,


aumentando la productividad.

Recuperación de desastres empleando hipervisores

La facilidad para mover máquinas virtuales de un host a otro no sólo sirve para mejorar la
disponibilidad, también simplifica enormemente las tareas de recuperación de desastres.

La recuperación de desastres se simplifica enormemente


ya que las máquinas se pueden mover de un host a otro
sin modificarlas.
En el siguiente cuadro se puede observar el contraste de un sistema sin virtualizar a uno
virtualizado.

Emulación de un sistema no nativo

Las máquinas virtuales también pueden actuar como emuladores de hardware,


permitiendo que aplicaciones y SOs concebidos para otras arquitecturas de procesador se
puedan ejecutar sobre un hardware que en teoría no soportan. Así, esta técnica permite
que cualquier computadora pueda ejecutar software escrito para la máquina virtual. Sólo
la máquina virtual en sí misma debe ser portada a cada una de las plataformas de
hardware.

Algunas máquinas virtuales emulan hardware que sólo existe como una especificación.
Por ejemplo: la máquina virtual de Java, la máquina virtual del entorno .NET. y la Open
Firmware.

VMware

VMware Inc., (VM de Virtual Machine) filial de


EMC Corporation proporciona la mayor parte del
software de virtualización disponible para
ordenadores compatibles X86. Entre este software
se incluyen VMware Workstation, y los gratuitos
VMware Server y VMware Player. El software de
VMware puede funcionar en Windows, Linux, y en
la plataforma Mac OS X que corre en procesadores
INTEL, bajo el nombre de VMware Fusion. El
nombre corporativo de la compañía es un juego de
palabras usando la interpretación tradicional de las
siglas «VM» en los ambientes de computación,
como máquinas virtuales (Virtual Machines).

VMware es un sistema de virtualización por


software. Un sistema virtual por software es un programa que simula un sistema físico (un
ordenador, un hardware) con unas características de hardware determinadas. Cuando se
ejecuta el programa (simulador), proporciona un ambiente de ejecución similar a todos los
efectos a un ordenador físico (excepto en el puro acceso físico al hardware simulado), con
CPU (puede ser más de una), BIOS, tarjeta gráfica, memoria RAM, tarjeta de red, sistema
de sonido, conexión USB, disco duro (pueden ser más de uno), etc.

Un virtualizador por software permite ejecutar (simular) varios ordenadores (sistemas


operativos) dentro de un mismo hardware de manera simultánea, permitiendo así el
mayor aprovechamiento de recursos. No obstante, y al ser una capa intermedia entre el
sistema físico y el sistema operativo que funciona en el hardware emulado, la velocidad
de ejecución de este último es menor, pero en la mayoría de los casos suficiente para
usarse en entornos de producción.

VMware es similar a su homólogo Virtual PC, aunque existen diferencias entre ambos
que afectan a la forma en la que el software interactúa con el sistema físico. El
rendimiento del sistema virtual varía dependiendo de las características del sistema físico
en el que se ejecute, y de los recursos virtuales (CPU, RAM, etc.) asignados al sistema
virtual.

Mientras que VirtualPC emula una plataforma x86, Vmware la virtualiza, de forma que la
mayor parte de las instrucciones en VMware se ejecutan directamente sobre el hardware
físico, mientras que en el caso de Virtual PC se traducen en llamadas al sistema operativo
que se ejecuta en el sistema físico.

Versiones Gratuitas

VMware Player

Es un producto gratuito que permite correr máquinas virtuales creadas con productos de
VMware. Las máquinas virtuales se pueden crear con productos más avanzados como
VMware Workstation, o con el propio VMware Player desde su versión 3.0 (las versiones
anteriores no incluyen dicha funcionalidad).

Desde la liberación de VMware Player, han surgido páginas web donde es posible crear
las máquinas virtuales, como Builder VMX Builder.

También es posible crear y redimensionar discos duros virtuales usando QEMU 10. Por
ejemplo, con la orden siguiente se creará una imagen de disco de 2Gb que puede ser
usado con VMware.

10
Es un emulador de procesadores basado en la traducción dinámica de binarios (conversión del código
binario de la arquitectura fuente en código entendible por la arquitectura huésped). QEMU también tiene
capacidades de Virtualización dentro de un sistema operativo, ya sea GNU/Linux, Windows, o cualquiera de
los sistemas operativos admitidos, (de hecho es la forma más común de uso). Esta máquina virtual puede
ejecutarse en cualquier tipo de Microprocesador o arquitectura (x86, x86-64, PowerPC, MIPS, SPARC, etc.).
Está licenciado en parte con la LGPL y la GPL de GNU.

El objetivo principal es emular un sistema operativo dentro de otro sin tener que reparticionar el disco duro,
empleando para su ubicación cualquier directorio dentro de éste.
qemu-img create -f vmdk mi-disco-duro-1.vmdk 2G

VMware ha establecido una comunidad alrededor de sus productos gratuitos, donde


proporciona acceso a una creciente lista de máquinas virtuales gratuitas, y de libre
disposición, con multitud de sistemas operativos y aplicaciones específicas pre
configuradas y listas para ejecutar.

También existen herramientas gratuitas para crear VMx, montar, manipular y convertir
discos y disquetes VMware, para que los usuarios de VMware Player puedan crear y
mantener VMs de manera gratuita, incluso para uso comercial.

VMware Server (antes GSX)

Actualmente es gratuita, en la que tiene


un mejor manejo y administración de
recursos; también corre dentro de un
sistema operativo (host), está pensada
para responder a una demanda mayor
que el Workstation. Otra diferencia entre
VMware Server y Workstation es que se
pueden ejecutar de manera concurrente
más máquinas virtuales soportando
servidores con hasta 32 procesadores y/o
64 GB de memoria, ofreciendo
funcionalidad de administración remota,
soporta una API avanzada y funcionalidad de scripting y se puede ejecutar en modo
headless.

VMware ESXi

Es una versión no permite instalar controladores (drivers) para hardware adicional (es
decir, si el ESXi no posee los controladores el hardware no puede ser utilizado); no
permite utilizar las funciones avanzadas de movimiento de maquinas virtuales encendidas
(ON) de un equipo físico a otro (VMOTION), ni hacerlo con el almacenamiento
(STORAGEMOTION).

Versiones Comerciales

VMware ESX Server

Esta versión es un sistema complejo de virtualización, que corre como SO dedicado al


manejo y administración de máquinas virtuales dado que no necesita un sistema operativo
host sobre el cual sea necesario instalarlo. Pensado para la centralización y virtualización
de servidores, esta versión no es compatible con una gran lista de hardware doméstico,

El programa no dispone de GUI, pero existe otro programa llamado QEMU manager que hace las veces de
interfaz gráfica si se utiliza QEMU desde Windows. También existe una versión para GNU/Linux llamado
qemu-launcher. En Mac OS X puede utilizarse el programa Q que dispone de una interfaz gráfica para crear y
administrar las máquinas virtuales.
por ejemplo no reconoce los discos IDE como unidades de almacenamiento. Es muy útil,
ya que solamente ocupa 10Mb de RAM y 55 de Disco Duro, aproximadamente. Para su
administración, hay que instalar un software en una máquina remota, que se conecta por
entorno web.

Funcionamiento

En el caso de la versión Workstation y Server, el funcionamiento es bastante similar a lo


siguiente:

Aplicación --> OS (virtual) --> Hardware (virtual) --> VMware --> (OS host) -->
hardware físico.

Esto afecta el rendimiento y desempeño de las máquinas virtuales, a diferencia de la


versión ESX que funciona más o menos de la siguiente manera.

Aplicación --> OS (virtual) --> Hardware (virtual) --> VMware --> hardware físico.

Pasos para instalación de la Máquina Virtual con VMWare

Debe hacer clic en el icono "New Virtual Machine"

Cuando aparezca la ventana "New Virtual Machine Wizard", dar clic en "Siguiente”
Da a elegir el tipo de máquina virtual. Se marca la opción "Typical" y luego "Siguiente"

Ahora nos deja elegir el SO que se instalará en la máquina virtual. Se puede elegir entre
Microsoft Windows, Linux, Novell NetWare, Sun Solaris, etc, que no están en la lista.

Si por ejemplo se quiere instalar Microsoft Windows XP Professional, se debe marcar


la opción Microsoft Windows, y en la lista desplegable que hay abajo, se cliquea y se
elige "Windows XP Professional", luego "Siguiente"
Ahora se elige el nombre que se le asignará a la máquina virtual, y dónde guardar los
archivos de configuración.

Se recomienda poner el nombre a la máquina virtual y no tocar nada más de ahí y hacer
clic en "Siguiente"

Ahora se elige el tipo de conexión a internet que tendrá la máquina virtual. Si tenemos
conexión directa con un módem, se elige "Use bridged networking". O si está usando un
router, se marca "Use network address translation (NAT)".

NOTA: Si no se quiere que nuestra máquina virtual tenga acceso a Internet, se marca la
opción "Do not use a network connection". Luego clic en "Siguiente"
En la pantalla que aparece ahora, se configura el espacio en disco que se dará a la
máquina virtual.- Se recomienda un mínimo de 3 o 4 GB para que Windows funcione bien.
Luego se da clic en el botón "Finalizar"

Fin. Ya se ha creado la máquina virtual.


Configurar la máquina virtual

Después de haber creado la máquina virtual, se procese a configurar cuanta memoria


RAM le asignaremos al S.O y de dónde se cargará la instalación de éste. Para ello, en la
zona "Devices",

Hacemos doble clic en "Memory" y le asignamos la


memoria RAM que la máquina virtual utilizará para el
sistema operativo instalado.

Luego "OK".

Antes de arrancar la máquina virtual, se debe elegir dónde cargará la instalación del SO.
Si tiene el DVD del SO que vaya a instalar, lo coloca en
la unidad lectora, o en caso de tener la imagen del SO
que quiera instalar, se da doble clic en "CD-ROM"
(Ubicado en la zona "Devices").

Se marca la opción "Use ISO image:" (VMware sólo


soporta .ISO) y se da clic en el botón "Browse..." para
elegir la imágen .ISO, y por último hacemos clic en
"OK".

Luego hacemos clic en "Start this virtual machine"

Para Hacer Imágenes (SnapShots)

Es muy útil cuando "juguemos" con virus y demás, si Windows de la máquina virtual, se
estropea, se puede volver a la imagen anterior que creamos. Para ello se pulsa la
siguiente combinación de teclas:

"CTRL+M", abre una ventana, para hacer una imagen del Windows, debemos hacer clic
en el icono "You Are Here" y clicamos en el botón "Take Snapshot..." y se creará una
imagen.
Cuando queramos volver a ella por si ocurre algo, pulsamos de nuevo la combinación
"CTRL+M", hacemos clic en la imagen que se creó y se pulsa el botón "Go To" entonces
VMware regresará a la imagen que creaste.

Para eliminar una imagen, oprimir "Delete".

Recomendaciones

Cuando estemos ejecutando Windows en la máquina virtual, y el O.S. se haya cargado


entero, hacemos clic en el menú "VM" de VMware, y elegimos "Install VMware Tools..."
Saldrá una advertencia avisándonos de que sólo se debe instalar cuando el sistema
operativo se esté ejecutando...etc...

Pulsamos "Install" y en la máquina virtual, se instalará VMware Tools, que son


herramientas para la máquina virtual. Nos dirá de reiniciar la máquina virtual; hacemos
clic en YES. Incluye drivers de pantalla, mouse, etc... Es muy recomendable instalarlo.

Trucos

Al haber terminado de instalar VMware Tools, se puede compartir ficheros del PC a la


máquina virtual y viceversa. Para ello, se arrastra el archivo que quiera transferir y soltarlo
en la máquina virtual. Si desea copiar un archivo de la máquina virtual a la PC,entonces
pulsa la tecla CTRL y hace clic en el archivo y moverlo hasta dejarlo en el escritorio del
PC. - Si los archivos son muy pesados en el tamaño, dependiendo de tu memoria RAM
tardará más o menos en copiar.

Otro truco es, que si queremos hacer el típico "CTRL+ALT+SUPR" para iniciar
"Administrador de Tareas" de Windows, en VMware deberemos pulsar la siguiente
combinación: "CTRL+ALT+INSERT"

Para hacer una captura de pantalla de la máquina virtual, nos vamos al menú "VM" de
VMware y hacemos clic en la opción "Capture Screen..."

Para capturar un vídeo, se debe


volver al menú "VM" y clickar en
"Capture Movie...", se abrirá una
ventana para que guardemos el
vídeo. Se puede elegir la calidad,
alta, media y baja.
NOTA:

- Para tomar posesión de la unidad virtual hay que dar un clic dentro de VMWare para
entrar al otro OS y para salir hay que teclear CTRL+ALT.
- Cuando apague la MV se libera la memoria RAM que estaba usando.
-Para CTLR+ALT+SUPR en la virtual se usa CTRL+ALT+INSERT.
-Para agrandar la pantalla usa CTRL+ALT+ENTER o F11

Página de VMWare = http://www.vmware.com/

VirtualBOX

Oracle VM VirtualBox es un software de


virtualización bajo la licencia GPL 2 para
arquitecturas x86. Por medio de esta aplicación es
posible instalar SO adicionales, conocidos como
«sistemas invitados», dentro de otro sistema
operativo «anfitrión», cada uno con su propio
ambiente virtual.

Entre los sistemas operativos soportados (en modo


anfitrión) se encuentran GNU/Linux, Mac OS X, OS/2
Warp , Microsoft Windows, y Solaris/OpenSolaris, y
dentro de ellos es posible virtualizar los sistemas
operativos FreeBSD, GNU/Linux, OPenBSD, OS/2
Warp, Windows, Solaris, MS-DOS y muchos otros.
Actualmente existe la versión propietaria Oracle VM VirtualBox, que es gratuita
únicamente bajo uso personal o de evaluación, y está sujeta a la licencia de "Uso
Personal y de Evaluación VirtualBox" (VirtualBox Personal Use and Evaluation License o
PUEL) y la versión Open Source, VirtualBox OSE, que es software libre, sujeta a la
licencia GPL.

VirtualBox ofrece algunas funcionalidades interesantes, como la ejecución de maquinas


virtuales de forma remota, por medio del Remote Desktop Protocol (RDP), soporte iSCSI,
aunque estas opciones no están disponibles en la versión OSE.

En cuanto a la emulación de hardware, los discos duros de los sistemas invitados son
almacenados en los sistemas anfitriones como archivos individuales en un contenedor
llamado Virtual Disk Image, incompatible con los demás software de virtualización.
Otra de las funciones que presenta es la de montar imágenes ISO 11 como unidades
virtuales ópticas de CD o DVD. Además, tiene un paquete de controladores que permiten
aceleración en 3D, pantalla completa, hasta 4 placas de red Gigabit, integración con
teclado y mouse.

A diferencia de otro virtualizadores que utilizan la combinación crtl + alt para volver el
teclado y el mouse a la máquina física, VirtualBox utiliza la tecla Ctrl de la derecha como
tecla host, por defecto, esta función puede ser personalizada a otra tecla o combinación
de teclas por el usuario.

Pasos para su instalación

Se ejecuta el programa y se abre la pantalla tal y como aparece:

Aparece la bienvenida e informa de que si

continuamos se instalara virtualbox en


nuestro sistema, pulsamos next y en la
siguiente pantalla deberemos aceptar el
contrato de licencia, aceptamos y
continuamos pulsando next de nuevo.

11
Imagen ISO es un archivo donde se almacena una copia o imagen exacta de un sistema de ficheros,
normalmente un disco óptico. Se rige por el estándar ISO 9660 que le da nombre. Algunos de los usos más
comunes incluyen la distribución de SO, tales como sistemas GNU/Linux, BSD o Live CDs.
En la siguiente pantalla nos dice la ubicación donde se va a instalar así como el espacio
que necesitara para su instalación si dejamos esa por defecto solo tendremos que pulsar
en next para pasar a la siguiente pantalla.

En esta pantalla se advierte que se van a copiar los archivos y se instalara el programa
pulsamos en install y esperaremos el final de la instalación.
Una ventana como esta nos dirá cómo va la instalación así que tendremos que esperar a
que finalice.

Esta es la ventana que nos avisa que el programa se ha instalado correctamente en


nuestro sistema y que está listo para ser usado.
INSTALACION DE UN SISTEMA OPERATIVO CON VIRTUALBOX

Cuando abrimos el programa no pedirá que nos registremos solo hay que poner un
nombre y una dirección de correo y confirmar.

El programa tiene un asistente que lo guiará en la instalación del sistema virtual. En este
caso se ha elegido el Windows vista ultímate.

Para empezar se pulsa en nueva y se abre el asistente que nos guiara en la instalación.

Pulsamos en siguiente para continuar


Ahora tendremos que dar un nombre al sistema que vamos a instalar y el sistema
operativo que es y pulsamos en siguiente para continuar.

En la siguiente pantalla pide que se le asigne la cantidad de memoria RAM que se


asignara a la maquina virtual. Es mejor que dejen el tamaño recomendado.

Pulsamos en siguiente para continuar


Ahora debemos crear el disco duro virtual en este caso lo crearemos nuevo

Al pulsar en nuevo entraremos en un asistente que nos guiara los pasos como en la
imagen que se muestra a continuación
Pulsamos en siguiente para llegar a la pantalla donde no pedirá el tipo de imagen que
queremos crear en este caso será de expansión dinámica pulsamos en siguiente para
continuar.

Ahora buscamos la ubicación donde se creará el disco virtual y su tamaño pulsando en


seleccionar se nos abrirá una nueva ventana.

Una vez seleccionamos la ubicación y pongamos el nombre solo queda guardar para
volver a la pantalla anterior con los cambios hechos.
Una vez seleccionamos la ubicación y pongamos el nombre solo quedara guardar para
volver a la pantalla anterior

Con los cambios hechos. Pulsamos en siguiente para continuar.


Pulsamos en terminar para crear la imagen del disco duro virtual

Con esto se puede continuar con la imagen de disco creado, se pulsa siguiente para
continuar
ya se tendrá todo preparado en la siguiente pantalla se pulsa en terminar.

Ya hemos creado nuestra máquina virtual, esta será la pantalla que aparece.
INSTALAR Windows Vista en la máquina virtual

Se procede a configurar la unidad DVD donde se colocará el DVD del programa de


windows. Se da en cd/dvd tal y como muestra la imagen.

En la pantalla que se abre, se selecciona la letra de la unidad donde hemos cargado la


vista y se marca unidad CD/dvd y pulsamos OK
Ahora pulsa en iniciar.

Tras ver la pantalla de bienvenida comenzara la instalación del Windows vista


Pongo tres capturas de la instalación para que observen que se instala correctamente.

Ya está instalado y por ende listo para entrar al sistema virtual


Links para descarga

http://www.taringa.net/posts/
downloads/5426246/VirtualB
ox.html
http://virtualbox.softonic.com/
http://virtualbox-
portable.softonic.com/
http://www.softonic.com/s/ma
quina-virtual-vmware

Lista de los videotutoriales


que pueden ser descargados
para complementar lo visto en este documento.

http://rapidshare.com/files/157239498/IntroducionVmware.rar
http://rapidshare.com/files/157252016/1.rar
http://rapidshare.com/files/157260352/2.rar
http://rapidshare.com/files/157270505/3.rar
http://rapidshare.com/files/157278090/4.rar
http://rapidshare.com/files/157286023/5.rar
HILO DE EJECUCIÓN 12

Un thread (hilo de ejecución), en sistemas operativos, es una característica que permite a


una aplicación realizar varias tareas a la vez (concurrentemente). Los distintos hilos de
ejecución comparten una serie de recursos tales como el espacio de memoria, los
archivos abiertos, situación de autenticación, etc. Esta técnica permite simplificar el diseño
de una aplicación que debe llevar a cabo distintas funciones simultáneamente.

“Un hilo es básicamente una tarea que puede ser ejecutada en paralelo con otra
tarea.”

Los hilos de ejecución que comparten los mismos recursos, sumados a estos recursos,
son en conjunto conocidos como un proceso. El hecho de que los hilos de ejecución de un
mismo proceso compartan los recursos hace que cualquiera de estos hilos pueda
modificar éstos. Cuando un hilo modifica un dato en la memoria, los otros hilos acceden a
ese dato modificado inmediatamente.

Lo que es propio de cada hilo es el contador de programa, la pila de ejecución y el estado


de la CPU (incluyendo el valor de los registros).

El proceso sigue en ejecución mientras al menos uno de sus hilos de ejecución siga
activo. Cuando el proceso finaliza, todos sus hilos de ejecución también han terminado.
Asimismo en el momento en el que todos los hilos de ejecución finalizan, el proceso no
existe más y todos sus recursos son liberados.

Algunos lenguajes de programación tienen características de diseño expresamente


creadas para permitir a los programadores lidiar con hilos de ejecución (como Java o
Delphi 13). Otros programas por no decir que la mayoría desconocen la existencia de hilos

12
Fuente de consulta secundaria. http://es.wikipedia.org/wiki/Hilo_de_ejecuci%C3%B3n

13
Es un entorno de desarrollo de software diseñado para la programación de propósito general con énfasis en
la programación visual. En Delphi se utiliza como lenguaje de programación una versión moderna de Pascal
de ejecución y éstos deben ser creados mediante llamadas de biblioteca especiales que
dependen del sistema operativo en el que estos lenguajes están siendo utilizados (como
es el caso del C y del C++).

Un ejemplo de la utilización de hilos es tener un hilo atento a la interfaz gráfica (iconos,


botones, ventanas), mientras otro hilo hace una larga operación internamente. De esta
manera el programa responde de manera más ágil a la interacción con el usuario.
También pueden ser utilizados por una aplicación servidor para dar servicio a múltiples
clientes.

Los hilos no pueden ejecutarse ellos solos; requieren la supervisión de un proceso padre
para correr.

Dentro de cada proceso hay varios hilos ejecutándose. Por ejemplo, Word puede tener un
hilo en background chequeando automáticamente la gramática de lo que se está
escribiendo, mientras otro hilo puede estar salvando automáticamente los cambios del
documento en el que se trabaja.

Como Word, cada aplicación (proceso) puede correr varios hilos los cuales están
realizando diferentes tareas. Esto significa que los hilos están siempre asociados con un
proceso en particular.

Los hilos a menudo son conocidos o llamados procesos ligeros. Un hilo, en efecto, es muy
similar a un proceso pero con la diferencia de que un hilo siempre corre dentro del
contexto de otro programa. Por el contrario, los procesos mantienen su propio espacio de
direcciones y entorno de operaciones.

Los hilos dependen de un programa padre en lo que se refiere a recursos de ejecución.


La siguiente figura muestra le relación entre hilos y procesos.

llamada Object Pascal. En sus diferentes variantes, permite producir archivos ejecutables para Windows,
GNU/Linux y la plataforma .NET.

Un uso habitual de Delphi, aunque no el único, es el desarrollo de aplicaciones visuales y de bases de datos
cliente-servidor y multicapas. Debido a que es una herramienta de propósito múltiple, se usa también para
proyectos de casi cualquier tipo, incluyendo aplicaciones de consola, aplicaciones de web (por ejemplo
servicios web, CGI, ISAPI, NSAPI, módulos para Apache), servicios COM y DCOM, y servicios del SO.
Entre las aplicaciones más populares actualmente destaca Skype, un programa de telefonía por IP.

Delphi inicialmente sólo producía ejecutables binarios para Windows: Delphi 1 para Win16 y con Delphi 2 se
introdujo Win32. En la actualidad da más posibilidades, como son:

• Delphi para Win32


• Delphi para .NET
• Delphi para PHP
• C# para .NET
• C++

Existe una versión de Delphi para sistemas Unix y Linux, denominada Kylix (de la cual existe una versión
gratuita, aunque limitada). Sin embargo Kylix fue congelado por Borland en su versión 3.00.
Un programa de flujo único o mono-hilvanado (single-thread) utiliza un único flujo de
control (thread) para controlar su ejecución. Muchos programas no necesitan la potencia o
utilidad de múltiples flujos de control. Sin necesidad de especificar explícitamente que se
quiere un único flujo de control, muchos de los applets y aplicaciones son de flujo único.

Por ejemplo, usando Java para la aplicación estándar de saludo:

public class HolaMundo


{
static public void main( String args[] )
{
System.out.println( "Hola Mundo!" );
}
}

Aquí, cuando se llama a main(), la aplicación imprime el mensaje y termina. Esto ocurre
dentro de un único thread.

La clase Thread

Es la clase que encapsula todo el control


necesario sobre los hilos de ejecución
(threads). Hay que distinguir claramente un
objeto Thread de un hilo de ejecución o thread.
Esta distinción resulta complicada, aunque se
puede simplificar si se considera al objeto Thread como el panel de control de un hilo de
ejecución (thread). La clase Thread es la única forma de controlar el comportamiento de
los hilos y para ello se sirve de los métodos que se exponen en las secciones siguientes.

Métodos de Clase

Estos son los métodos estáticos que deben llamarse de manera directa en la clase
Thread.

currentThread()

Este método devuelve el objeto thread que representa al hilo de ejecución que se está
ejecutando actualmente.

yield()

Este método hace que el intérprete cambie de contexto entre el hilo actual y el siguiente
hilo ejecutable disponible. Es una manera de asegurar que nos hilos de menor prioridad
no sufran inanición.

sleep( long )
El método sleep() provoca que el intérprete ponga al hilo en curso a dormir durante el
número de milisegundos que se indiquen en el parámetro de invocación. Una vez
transcurridos esos milisegundos, dicho hilo volverá a estar disponible para su ejecución.
Los relojes asociados a la mayor parte de los intérpretes de Java no serán capaces de
obtener precisiones mayores de 10 milisegundos, por mucho que se permita indicar hasta
nanosegundos en la llamada alternativa a este método.

Métodos de Instancia

Aquí no están recogidos todos los métodos de la clase Thread, sino solamente los más
interesantes, porque los demás corresponden a áreas en donde el estándar de Java no
está completo, y puede que se queden obsoletos en la próxima versión del JDK, por ello,
si se desea completar la información que aquí se expone se ha de recurrir a la
documentación del interfaz de programación de aplicación (API) del JDK.

start()

Este método indica al intérprete de


Java que cree un contexto del hilo
del sistema y comience a ejecutarlo.
A continuación, el método run() de
este hilo será invocado en el nuevo
contexto del hilo. Hay que tener
precaución de no llamar al método
start() más de una vez sobre un hilo
determinado.

run()

El método run() constituye el cuerpo de un hilo en ejecución. Este es el único método del
interfaz Runnable. Es llamado por el método start() después de que el hilo apropiado del
sistema se haya inicializado. Siempre que el método run() devuelva el control, el hilo
actual se detendrá.

stop()

Este método provoca que el hilo se detenga de manera inmediata. A menudo constituye
una manera brusca de detener un hilo, especialmente si este método se ejecuta sobre el
hilo en curso. En tal caso, la línea inmediatamente posterior a la llamada al método stop()
no llega a ejecutarse jamás, pues el contexto del hilo muere antes de que stop() devuelva
el control. Una forma más elegante de detener un hilo es utilizar alguna variable que
ocasione que el método run() termine de manera ordenada. En realidad, nunca se debería
recurrir al uso de este método.

suspend()

El método suspend() es distinto de stop(). suspend() toma el hilo y provoca que se


detenga su ejecución sin destruir el hilo de sistema subyacente, ni el estado del hilo
anteriormente en ejecución. Si la ejecución de un hilo se suspende, puede llamarse a
resume() sobre el mismo hilo para lograr que vuelva a ejecutarse de nuevo.
resume()

El método resume() se utiliza para revivir un hilo


suspendido. No hay garantías de que el hilo comience
a ejecutarse inmediatamente, ya que puede haber un
hilo de mayor prioridad en ejecución actualmente,
pero resume() ocasiona que el hilo vuelva a ser un
candidato a ser ejecutado.

setPriority( int )

El método setPriority() asigna al hilo la prioridad indicada por el valor pasado como
parámetro. Hay bastantes constantes predefinidas para la prioridad, definidas en la clase
Thread, tales como MIN_PRIORITY, NORM_PRIORITY y MAX_PRIORITY, que toman
los valores 1, 5 y 10, respectivamente. Como guía aproximada de utilización, se puede
establecer que la mayor parte de los procesos a nivel de usuario deberían tomar una
prioridad en torno a NORM_PRIORITY. Las tareas en segundo plano, como una
entrada/salida a red o el nuevo dibujo de la pantalla, deberían tener una prioridad cercana
a MIN_PRIORITY. Con las tareas a las que se fije la máxima prioridad, en torno a
MAX_PRIORITY, hay que ser especialmente cuidadosos, porque si no se hacen llamadas
a sleep() o yield(), se puede provocar que el intérprete Java quede totalmente fuera de
control.

getPriority()

Este método devuelve la prioridad del hilo de ejecución en curso, que es un valor
comprendido entre uno y diez.

setName( String )

Este método permite identificar al hilo con un nombre menmónico. De esta manera se
facilita la depuración de programas multihilo. El nombre mnemónico aparecerá en todas
las líneas de trazado que se muestran cada vez que el intérprete Java imprime
excepciones no capturadas.

getName()

Este método devuelve el valor actual, de tipo cadena, asignado como nombre al hilo en
ejecución mediante setName().

Diferencias entre hilos y procesos

Los hilos se distinguen de los tradicionales procesos en que los procesos son –
generalmente– independientes, llevan bastante información de estados, e interactúan sólo
a través de mecanismos de comunicación dados por el sistema. Por otra parte, muchos
hilos generalmente comparten otros recursos de forma directa. En muchos de los SO que
dan facilidades a los hilos, es más rápido cambiar de un hilo a otro dentro del mismo
proceso, que cambiar de un proceso a otro. Este fenómeno se debe a que los hilos
comparten datos y espacios de direcciones, mientras que los procesos, al ser
independientes, no lo hacen. Al cambiar de un proceso a otro, el SO (mediante el
dispatcher 14) genera lo que se conoce como overhead, que es tiempo desperdiciado por
el procesador para realizar un cambio de contexto (context switch), en este caso pasar del
estado de ejecución (running) al estado de espera (waiting) y colocar el nuevo proceso en
ejecución. En los hilos, como pertenecen a un mismo proceso, al realizar un cambio de
hilo el tiempo perdido es casi despreciable.

Al igual que los procesos, los hilos poseen un estado de ejecución y pueden sincronizarse
entre ellos para evitar problemas de compartimiento de recursos. Generalmente, cada hilo
tiene una tarea específica y determinada, como forma de aumentar la eficiencia del uso
del procesador.

Estados de un hilo

Los principales estados de los hilos son: Ejecución,


Listo y Bloqueado. No tiene sentido asociar estados
de suspensión de hilos ya que es un concepto de
proceso. En todo caso, si un proceso está expulsado
de la memoria principal (RAM), todos sus hilos
deberán estarlo ya que todos comparten el espacio
de direcciones del proceso.

Cambio de estados

• Creación: Cuando se crea un proceso se crea un hilo para ese proceso. Luego,
este hilo puede crear otros hilos dentro del mismo proceso, proporcionando un
puntero de instrucción y los argumentos del nuevo hilo. El hilo tendrá su propio
contexto y su propio espacio de la columna, y pasara a la final de los listos.

• Bloqueo: Cuando un hilo necesita esperar por un suceso, se bloquea (salvando


sus registros de usuario, contador de programa y punteros de pila). Ahora el
procesador podrá pasar a ejecutar otro hilo que esté en la final de los Listos
mientras el anterior permanece bloqueado.

• Desbloqueo: Cuando el suceso por el que el hilo se bloqueó se produce, el mismo


pasa a la final de los Listos.

• Terminación: Cuando un hilo finaliza se liberan tanto su contexto como sus


columnas.

Ventajas de los hilos contra procesos

Los hilos son generados a partir de la creación de un proceso, por ende, un proceso es un
hilo de ejecución o Monohilo. Las ventajas de los hilos se dan en los Multihilos, que es
cuando un proceso tiene múltiples hilos de ejecución los cuales realizan actividades
distintas, que pueden o no ser cooperativas entre sí. Los beneficios de los hilos se derivan
de las implicaciones de rendimiento, así:

14
Parte de un programa encargada de lanzar un proceso en el servidor de un entorno cliente/servidor.
1. Se tarda mucho menos tiempo en crear un hilo nuevo en un proceso existente que
en crear un proceso. Algunas investigaciones llevan al resultado que esto es así
en un factor de 10.
2. Se tarda mucho menos en terminar un hilo que un proceso, ya que cuando se
elimina un proceso se debe eliminar el BCP (Bloque de control del proceso, o
PCB (Process Control Block)) 15 del mismo, mientras que un hilo se elimina su
contexto y pila.
3. Se tarda mucho menos tiempo en cambiar entre dos hilos de un mismo proceso
4. Los hilos aumentan la eficiencia de la comunicación entre programas en ejecución.
En la mayoría de los sistemas en la comunicación entre procesos debe intervenir
el núcleo para ofrecer protección de los recursos y realizar la comunicación
misma. En cambio, entre hilos pueden comunicarse entre sí sin la invocación al

15
Es un registro especial donde el SO agrupa toda la información que necesita conocer respecto a un proceso
particular. Cada vez que se crea un proceso el SO crea el BCP correspondiente para que sirva como
descripción en tiempo de ejecución durante toda la vida del proceso.

Cuando el proceso termina, su BCP es borrado y el registro puede ser utilizado para otros procesos. Un
proceso resulta conocido para el SO y por tanto elegible para competir por los recursos del sistema sólo
cuando existe un BCP activo asociado a él. El bloque de control de proceso es una estructura de datos con
campos para registrar los diferentes aspectos de la ejecución del proceso y de la utilización de recursos. La
información almacenada en un BCP incluye típicamente algunos o todos los campos siguientes:

• Identificador del proceso (Process Identificator -PID-, de sus siglas en Inglés).


• Estado del proceso. Por ej. listo, en espera, bloqueado.
• Contador de Programa: Dirección de la próxima instrucción a ejecutar.
• Valores de registro de CPU. Se utilizan también en el cambio de contexto.
• Espacio de direcciones de memoria.
• Prioridad en caso de utilizarse dicho algoritmo para planificación de CPU.
• Lista de recursos asignados (incluyendo descriptores de archivos y sockets abiertos).
• Estadísticas del proceso.
• Datos del propietario (owner).
• Permisos asignados.
• Signals pendientes de ser servidos. (Almacenados en un mapa de bits)

Esta lista es simplemente indicativa, cada sistema operativo tiene su propio diseño de BCP, con el conjunto de
metadatos necesarios para la administración. Puede medir desde 32 bits a 1024. Su denominación cambia
según el sistema operativo, por ej. en IBM se designa PSW por palabra de estado de proceso. Difiere
significativamente entre los sistemas de procesamiento por lotes (BATCH) y los sistemas interactivos.

Algunos sistemas de multiprogramación incluyen información de mantenimiento con el propósito de facturar


a los usuarios individuales el tiempo de procesador, el almacenamiento, las operaciones de E/S y otras
utilizaciones de recursos.

Una vez creado, el BCP se rellena con los atributos definidos como parámetros que se hallan en la plantilla
del proceso o que son especificados como parámetros de la llamada al SO crear_proceso. En ese momento el
sistema operativo suele asignar valores a otros campos. Por ejemplo, cuando se crea un proceso, los registros
e indicadores hardware se fijan a los valores proporcionados por el cargador/enlazador. Cada vez que un
proceso queda suspendido, el contenido de los registros del procesador es generalmente guardado en la pila, y
el puntero al marco de la pila en cuestión se almacena en el BCP. De este modo los valores de los registros
son restaurados cuando el proceso es seleccionado para ejecutarse nuevamente.
núcleo. Por lo tanto, si hay una aplicación que debe implementarse como un
conjunto de unidades de ejecución relacionadas, es más eficiente hacerlo con una
colección de hilos que con una colección de procesos separados.

Sincronización de hilos

Todos los hilos comparten el mismo espacio de


direcciones y otros recursos como pueden ser
archivos abiertos. Cualquier modificación de un
recurso desde un hilo afecta al entorno del resto
de los hilos del mismo proceso. Por lo tanto, es
necesario sincronizar la actividad de los
distintos hilos para que no interfieran unos con
otros o corrompan estructuras de datos.

Una ventaja de la programación multihilo es que


los programas operan con mayor velocidad en
sistemas de computadores con múltiples CPUs
(sistemas multiprocesador o a través de grupo
de máquinas) ya que los hilos del programa se prestan verdaderamente para la ejecución
concurrente. En tal caso el programador necesita ser cuidadoso para evitar condiciones
de carrera (problema que sucede cuando diferentes hilos o procesos alteran datos que
otros también están usando), y otros comportamientos no intuitivos. Los hilos
generalmente requieren reunirse para procesar los datos en el orden correcto. Es posible
que los hilos requieran de operaciones atómicas para impedir que los datos comunes
sean cambiados o leídos mientras estén siendo modificados, para lo que usualmente se
utilizan los semáforos 16. El descuido de esto puede generar interbloqueo 17.

Formas de multihilos

Los sistemas operativos generalmente implementan hilos de dos maneras:

• Multihilo apropiativo: permite al sistema operativo determinar cuándo debe haber


un cambio de contexto. La desventaja de esto es que el sistema puede hacer un
cambio de contexto en un momento inadecuado, causando un fenómeno conocido
como inversión de prioridades y otros problemas.
16
Un semáforo es una variable especial (o tipo abstracto de datos) que constituye el método clásico para
restringir o permitir el acceso a recursos compartidos (por ejemplo, un recurso de almacenamiento del sistema
o variables del código fuente) en un entorno de multiprocesamiento (en el que se ejecutarán varios procesos
concurrentemente). Los semáforos pueden ser usados para diferentes propósitos, entre ellos:

• Implementar cierres de exclusión mutua o locks


• Barreras
• Permitir a un máximo de N threads (hilos) acceder a un recurso, inicializando el semáforo en N
• Notificación. Inicializando el semáforo en 0 puede usarse para comunicación entre threads sobre la
disponibilidad de un recurso

17
Es el bloqueo permanente de un conjunto de procesos o hilos de ejecución en un sistema concurrente que
compiten por recursos del sistema o bien se comunican entre ellos. A diferencia de otros problemas de
concurrencia de procesos, no existe una solución general para los interbloqueos.
• Multihilo cooperativo: depende del mismo hilo abandonar el control cuando llega a
un punto de detención, lo cual puede traer problemas cuando el hilo espera la
disponibilidad de un recurso.

El soporte de hardware para multihilo se encuentra disponible desde hace relativamente


poco tiempo. Esta característica fue introducida por Intel en el Pentium 4, bajo el nombre
de HyperThreading.

Usos más comunes

Los usos más comunes son en tecnologías SMPP


y SMS para la telecomunicaciones aquí hay
muchísimos procesos corriendo a la vez y todos
requiriendo de un servicio.

- Trabajo interactivo y en segundo plano

Por ejemplo, en un programa de hoja de cálculo un hilo puede estar visualizando los
menús y leer la entrada del usuario mientras que otro hilo ejecuta las órdenes y actualiza
la hoja de cálculo. Esta medida suele aumentar la velocidad que se percibe en la
aplicación, permitiendo que el programa pida la orden siguiente antes de terminar la
anterior.

- Procesamiento asíncrono

Los elementos asíncronos de un programa se pueden implementar como hilos. Un


ejemplo es como los softwares de procesamiento de texto guardan archivos temporales
cuando se está trabajando en dicho programa. Se crea un hilo que tiene como función
guardar una copia de respaldo mientras se continúa con la operación de escritura por el
usuario sin interferir en la misma.

- Aceleración de la ejecución

Se pueden ejecutar, por ejemplo, un lote mientras otro hilo lee el lote siguiente de un
dispositivo.

- Estructuración modular de los programas

Es un mecanismo eficiente para un programa que ejecuta una gran variedad de


actividades separadas mediante hilos que realizan cada una de ellas.
Implementaciones

Hay dos grandes categorías en la


implementación de hilos:

• Hilos a nivel de usuario o ULT


(user level thread).
• Hilos a nivel de kernel o KLT
(kernel level thread).

Hilos a nivel de usuario (ULT)

En una aplicación ULT pura, todo el trabajo de gestión de hilos lo realiza la aplicación y el
núcleo o kernel no es consciente de la existencia de hilos. Es posible programar una
aplicación como multihilo mediante una biblioteca de hilos. La misma contiene el código
para crear y destruir hilos, intercambiar mensajes y datos entre hilos, para planificar la
ejecución de hilos y para salvar y restaurar el contexto de los hilos.

Todas las operaciones descritas se llevan a cabo en el espacio de usuario de un mismo


proceso. El kernel continua planificando el proceso como una unidad y asignándole un
único estado (Listo, bloqueado, etc.).

Ventajas de los ULT

• El intercambio de los hilos no necesita los privilegios del modo kernel, porque
todas las estructuras de datos están en el espacio de direcciones de usuario de un
mismo proceso. Por lo tanto, el proceso no debe cambiar a modo kernel para
gestionar hilos. Se evita la sobrecarga de cambio de modo y con esto el
sobrecoste u overhead.
• Se puede realizar una planificación específica. Dependiendo de que aplicación
sea, se puede decidir por una u otra planificación según sus ventajas.
• Los ULT pueden ejecutar en cualquier sistema operativo. La biblioteca de hilos es
un conjunto compartido.

Desventajas de los ULT

• En la mayoría de los sistemas operativos las llamadas al sistema (System calls)


son bloqueantes. Cuando un hilo realiza una llamada al sistema, se bloquea el
mismo y también el resto de los hilos del proceso.
• En una estrategia ULT pura, una aplicación multihilo no puede aprovechar las
ventajas de los multiprocesadores. El núcleo asigna un solo proceso a un solo
procesador, ya que como el núcleo no interviene, ve al conjunto de hilos como un
solo proceso.

Una solución al bloqueo mediante a llamadas al sistema es usando la técnica de


jacketing, que es convertir una llamada bloqueante en no bloqueante.
Hilos a nivel de núcleo (KLT)

En una aplicación KLT pura, todo el trabajo de gestión de hilos lo realiza el kernel. En el
área de la aplicación no hay código de gestión de hilos, únicamente un API (interfaz de
programas de aplicación) para la gestión de hilos en el núcleo. Windows 2000, Linux y
OS/2 utilizan este método. Linux utiliza un método muy particular en el que no hace
diferencia entre procesos e hilos. Para Linux, si varios procesos creados con la llamada al
sistema "clone" comparten el mismo espacio de direcciones virtuales, el sistema operativo
los trata como hilos, y lógicamente son manejados por el kernel.

Ventajas de los KLT

• El kernel puede planificar simultáneamente múltiples hilos del mismo proceso en


múltiples procesadores.
• Si se bloquea un hilo, puede planificar otro del mismo proceso.
• Las propias funciones del kernel pueden ser multihilo

Desventajas de los KLT

• El paso de control de un hilo a otro precisa de un cambio de modo.

Combinaciones ULT y KLT

Algunos sistemas operativos ofrecen la


combinación de ULT y KLT, como Solaris.

La creación de hilos, así como la mayor parte de


la planificación y sincronización de los hilos de
una aplicación se realiza por completo en el
espacio de usuario. Los múltiples ULT de una
sola aplicación se asocian con varios KLT. El
programador puede ajustar el número de KLT
para cada aplicación y máquina para obtener el
mejor resultado global.

En un método combinado, los múltiples hilos de una aplicación se pueden ejecutar en


paralelo en múltiples procesadores y las llamadas al sistema bloqueadoras no necesitan
bloquear todo el proceso.
Taller 3

1. Instale cualquier máquina virtual, y probarla, esto se hace instalando


cualquier sistema operativo que deseen. Para la entrega, se precisan
pantallazos de lo que hacen, con la correspondiente explicación.
2. Ejecute el sistema operativo instalado sobre la máquina virtual, teniendo
presente que debe entregar pruebas de ello por medio de pantallazos. Abra
en ambos el icono de programas al mismo tiempo, y anexe el pantallazo
respectivo.
3. Instale algunos widgets en el sistema operativo nativo y el virtual (anexe
pruebas).
4. Con base en sus conocimientos en programación, desarrolle un programa
que aplique el concepto de threads, y relaciónelo con lo visto hasta ahora
en clase. Este programa debe estar debidamente documentado, debe
manejar por lo menos dos hilos. Usted lo puede desarrollar en el lenguaje
que maneje.

Nota. Este trabajo equivale a dos notas. La máquina virtual y el programa propiamente
dicho.

You might also like