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
Son programas que se ejecutan en un servidor Web y construyen páginas Web. 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.
3 2

recursos de TI. componentes:

Estructuralmente, una infraestructura virtual consta de los siguientes

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
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. 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: representa los costes iniciales Formula aritmética , donde: Vf representa la inversión final, y Vi representa la inversión inicial. , donde: B representa los beneficios, y Ci
6 5

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

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)

8

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í.

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.

9

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 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%. prestaciones a sus

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.

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.

10

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.

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.

11

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://virtualboxportable.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

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

13

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

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)

15

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.

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

16

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.

17

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.

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

-

Trabajo interactivo y en segundo plano

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 combinación de ULT y KLT, como Solaris. la

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.

Sign up to vote on this title
UsefulNot useful