Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
VIRTUALIZACIÓN y MULTIHILOS 1
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.
Virtualización de plataforma
1
Fuente de consulta. http://es.wikipedia.org/wiki/Virtualizaci%C3%B3n
Tipos de Virtualización de plataforma
Virtualización completa
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
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 de Plataforma
Virtualización de Red
Virtualización de Aplicaciones
Infraestructura virtual
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:
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
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
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.
La virtualización de almacenamiento
Particionamiento
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
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.
MÁQUINA VIRTUAL 7
Compatibilidad
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
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
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
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:
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.
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
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.
Consolidación de hipervisores
Disponibilidad de 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.
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 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
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 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
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
Aplicación --> OS (virtual) --> Hardware (virtual) --> VMware --> (OS host) -->
hardware físico.
Aplicación --> OS (virtual) --> Hardware (virtual) --> VMware --> hardware físico.
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.
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"
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").
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.
Recomendaciones
Trucos
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 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
VirtualBOX
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.
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.
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.
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.
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 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
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
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 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.
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.
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++).
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.
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:
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.
Aquí, cuando se llama a main(), la aplicación imprime el mensaje y termina. Esto ocurre
dentro de un único thread.
La clase Thread
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()
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()
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().
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
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.
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:
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.
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
Formas de multihilos
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.
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
- Aceleración de la ejecución
Se pueden ejecutar, por ejemplo, un lote mientras otro hilo lee el lote siguiente de un
dispositivo.
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.
• 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.
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.
Nota. Este trabajo equivale a dos notas. La máquina virtual y el programa propiamente
dicho.