sábado, 1 de diciembre de 2012

Práctica 8: Memoria Principal


I. Verificar la cantidad de la memoria RAM utilizada en un sistema operativo de la familia de Windows.

a)      Haga clic en el botón "Inicio" del menú en la barra de herramientas de Windows y haga clic derecho en "Equipo" (equipo) para abrir el menú contextual.


b)      Seleccione "Propiedades" en el menú contextual y busque la entrada "Memoria instalada (RAM)" para determinar la cantidad de memoria RAM que su computadora tiene instalada.


c)       Presione Ctrl + Alt + Supr y seleccione "Iniciar el Administrador de tareas" para abrir el Administrador de tareas.

d)      Haga clic en la pestaña "Rendimiento" en el Administrador de tareas. Revise el gráfico de "memoria" para determinar la cantidad de memoria RAM que la computadora está utilizando actualmente.

II. ¿Cómo saber qué memoria RAM aceptará su computadora?

Averiguar el módulo de memoria RAM correcta para su equipo puede ser confuso. Sin embargo, hay varias formas de comprobar que RAM funcionará con su computadora. Encontrar referencias con el manual de su equipo es la forma más sencilla de consultar los requisitos específicos de RAM. Sin embargo, si usted no tiene el manual de su computadora, también puede encontrarlos al leer la información impresa en el chip actual, utilizando el software de Windows, o visitando el sitio web del fabricante del equipo, en el que debería ser capaz de encontrar una versión en línea de su manual para comprobar la compatibilidad de hardware.

Instrucciones

Cosas que necesitará

·    Manual del equipo opcional
·    Conexión a Internet
·    Destornillador opcional


I. Usando Windows

1. Haga clic en el menú "Inicio" situado en la esquina inferior izquierda de la barra de herramientas de su computadora. Ahora escriba "dxdiag". Con ello se abre una ventana que muestra todos los detalles de la computadora.


2. Verifique la memoria y las especificaciones del sistema. Tome nota de la cantidad de memoria RAM que su computadora está usando actualmente. También anote el nombre del fabricante y el modelo del sistema, por ejemplo "Dell XPS5420".
· Memoria usada: 2523 MB usados, 5313 MB disponibles
· Fabricante del sistema: HP-Pavilion
· Modelo del sistema: NY525AA-ABM MS210la




3. Vaya a la página web del fabricante. Una vez que ha obtenido esta información, puede utilizar la página web del fabricante para saber la velocidad y el tamaño exacto de la RAM que usted necesita para su equipo. Si el sitio web del fabricante no dispone de información específica para su computadora, usted puede buscar en la Internet el nombre del modelo de su computadora para encontrar la RAM correcta.

· Página web del fabricante:
http://h10025.www1.hp.com/ewfrf/wc/document?cc=mx&destPage=document&docname=c01880883&jumpid=reg_r1002_mxes_c-001_title_r0001&lc=es&tmp_docname=c01880883



II. Verificación del hardware manualmente

1. Apague el ordenador. Antes de comprobar la memoria RAM del ordenador manualmente tendrá que apagar el ordenador. Asegúrese de desenchufar el cable de alimentación de la pared.




Primero apagué la computadora y desenchufe el cable de alimentación de la luz.


2. Abra la caja del ordenador. En función del modelo de su equipo, puede abrir la caja ya sea usando un destornillador o deslizando la caja abriéndola con las palancas de liberación.



Después procedí a abrir la tapa con un destornillador  para poder ver donde se encontraban las memorias RAM.

3. Localice la RAM. Una vez que la caja de la computadora está abierta usted tendrá que localizar los módulos de la RAM actualmente instalados en la placa madre. Los módulos de la memoria RAM parecen chips de computadora largos y delgados que sobresalen de la placa madre.



Una vez que localicé las memorias RAM instaladas en la computadora procedí a extraerlas para poder examinarlas. En las fotografías de abajo podemos observar las ranuras en donde se encontraban ubicadas las 2 memorias RAM en la computadora.



4. Verifique el tipo de memoria RAM. En la mayoría de los casos la RAM tendrá un sticker o una etiqueta en uno de los lados. Esta etiqueta dirá la velocidad y el tamaño de la memoria RAM. Esta es la información más importante que se necesita cuando se identifica el tipo correcto de RAM para el ordenador. Asegúrese de tomar nota también de las ranuras de RAM disponibles para ver si el equipo tiene suficientes huecos vacíos para una actualización de RAM, o si usted tendrá que reemplazar un chip de memoria RAM existente.


En las fotografías se pueden observar las memorias RAM y sus etiquetas, de las cuales pude obtener la siguiente información:
·         Velocidad de la RAM: 800 MHz
·         Tamaño de la RAM: 2 GB
La cantidad de ranuras para memoria RAM que tiene la computadora es de dos, así que como ya hay dos memorias RAM instaladas en la computadora ya no puedo agregar otra memoria RAM.

III. Capacidad del disco duro

a) Determine el tamaño de la unidad de disco duro (no olvide mostrar evidencia)

Como se puede observar el tamaño de la unidad del disco duro es de 298.09 GB


b) Determine el espacio libre y el utilizado de la unidad de disco duro (no olvide mostrar evidencia)

Como se pude observar el disco duro esta dividido en dos particiones:

1. HP-C:
· Espacio libre: 19.39 GB
· Espacio en uso: 267.84 GB

2. FACTORY_IMAGE-D:
· Espacio libre: 1.97 GB
· Espacio en uso: 8.79 GB

Lo que nos de un total de 21.36 GB de espacio libre y 276.63 GB de espacio utilizado en el disco duro.

c) Justifique, ¿Por qué son importantes el tamaño de la unidad de disco duro y el espacio utilizado?

Porque permite no sólo mantener los documentos del usuario de forma permanente, sino que permite también mantener un sistema operativo completo en éste.
También el disco duro es importante por su alta capacidad de almacenamiento, especialmente hoy en día que podemos llegar a manejar  archivos de video que pueden ocupar hasta 4 GB. También son más rápidos que otros medios de almacenamiento como CDs, DVDs o disquetes.
Sí hay mucho espacio utilizado en ele disco duro podemos tener problemas con el almacenamiento de nuestros archivos.

Reflexión

La memoria permite un mejor desempeño de la computadora ya que le da al software un espacio de direcciones mayor que la memoria principal utilizando espacio del disco duro para este fin.

Actividad 5: Políticas de administración de la memoria virtual


Contesta cuidadosamente lo siguiente ( a mano y con calidad, en cada respuesta indica la fuente consultada en formato APA).

1. Elabora un mapa conceptual en el cual expliques cada una de las políticas que definen el comportamiento de un sistema de memoria virtual



NOTA: En hojas de reciclaje, con calidad, usa colores.

2.- En la memoria virtual paginada se requiere de políticas de sustitución, cuando se usan estas políticas?

Cuando se produce un fallo de página y esta toda le memoria principal llena.

3.- Ilustra y explica paso a paso un ejemplo de los siguientes algoritmos de de sustitución ( reemplazo de páginas con: calidad, usando colores, a mano). Incluye las referencias consultadas en formato APA

  • FIFO
  • LRU
  • ÓPTIMO






Reflexión

Las políticas de administración de la memoria virtual son muy importantes para mantener a salvo nuestra información y de esta manera el sistema operativo asegura que el usuario no pierda su información.

Práctica 9: Memoria Virtual

I) Configuración actual de la memoria virtual

1. Seleccione Inicio

2. Haga clic en Equipo y con el botón derecho del mouse seleccione Propiedades, aparece la ventana con información básica del equipo, seleccionar la opción configuración avanzada del equipo, posteriormente opciones de rendimiento.



Conteste lo siguiente:

A. ¿Qué es un archivo de paginación?

Archivo oculto situado en ele disco duro el equipo utilizado como si fuera memoria de acceso aleatorio (RAM).

B. ¿Cuál es el tamaño total del archivo de paginación para todas las unidades?

4000 MB

C. ¿Cuál es el tamaño mínimo permitido y cuál el recomendado?

Mínimo; 16 MB
Recomendado: 5757 MB

D. ¿Cuántas unidades están disponibles, cuáles son?

Hay 2 unidades disponibles:
1. C: HP
2. D: FACTORY IMAGE

E. ¿Cuál es el espacio disponible para cada una de ellas?

C: HP--> 16171 MB
D: FACTORY IMAGE--> 2019 MB

F. ¿Porqué alterar el valor de la memoria virtual de Windows es algo que en muchos casos conviene hacer?

Por que así se puede optimizar el sistema y mejorar su rendimiento.

II. Diagnóstico de problemas de la memoria del equipo

3. ¿Cuándo se ejecuta la herramienta de diagnóstico de memoria?

Cuando se detectan posibles problemas relacionados con la memoria del equipo.

4. ¿Cómo se ingresa a esta herramienta? Describa los pasos

1. Clic en Inicio.
2. Clic en Panel de control.
3. A continuación hacer clic en Sistema y Seguridad.
4. Clic en Herramientas administartivas.
5. Por último clic en Diagnostico de memoria de Windows.

5. Reinicie y compruebe si existen problemas (ejecute la herramienta)



6. ¿Cuántas opciones se establecen y se pueden elegir el momento de ejecución de la herramienta?

3 opciones

¿Cuáles son éstas?

1. Mezcla de pruebas
2. Caché
3. Recuento de pasos

Reflexión

La memoria virtual permite un mejor desempeño de la computadora ya que le da al software un espacio de direcciones mayor que la memoria principal, utilizando espacio del disco duro para este fin.

lunes, 1 de octubre de 2012

Práctica 7: Algoritmos de Planificación


Explicación detallada del modelo diseñado

Simulación del algoritmo de Planificación:

Primero en llegar, primero en ser servido (First Come, First Served - FCFS).
Primero en entrar, primero en salir (First Input, First Output - FIFO).
Servicio por orden de llegada.

En la simulación del algoritmo, aparecerán una serie de procesos hasta llegar a un número de tres. Todos los procesos creados competirán por el procesador según el algoritmo F.I.F.O.

Los Procesos, para concluir su ejecución, tendrán que consumir un número de unidades de tiempo con el que parten desde el momento en el que se crean.

Irán pasando desde una cola de procesos listos hasta la figura que representa el procesador del sistema operativo y una vez allí podrán consumir su tiempo de ejecución o bien dormirse como consecuencia de una operación de entrada/salida o un bloqueo.

Los procesos que se duermen lo harán durante cierto tiempo. Una vez que pase cierto tiempo, se despertarán y pasarán de nuevo a formar parte de la cola de procesos listos.

Los procesos irán pasando por los distintos estados de su ciclo de vida reflejando cada estado con un letrero que indicara el estado en el que se encuentran.



Simulación del algoritmo de Planificación:

Round Robin (RR).
Asignación cíclica.
Planificación en rueda.
Planificación por turno circular.
Planificación por Turno Rotatorio.

En la simulación del algoritmo, irán apareciendo una serie de procesos hasta llegar a un número de dos.
Todos los procesos creados competirán por el procesador según el algoritmo de Planificación por Turno Rotatorio.

Los Procesos, para concluir su ejecución, tendrán que consumir un número de unidades de tiempo con el que parten desde el momento en el que se crean.

Irán pasando desde la cola de procesos listos hasta la figura que representa el procesador del sistema operativo, y una vez allí podrán consumir el tiempo especificado por el parámetro Quantum o bien dormirse como consecuencia de una operación de entrada/salida o un bloqueo.

Si el proceso consume todo el Quantum de tiempo, abandonará el procesador del sistema operativo y pasará a ocupar la última posición en la cola de procesos listos.

Si el proceso no consume todo el tiempo de su Quantum, este se dormirá durante una serie de unidades de tiempo. Los procesos que se duermen se desplazan a otra zona de la pantalla específica para ellos. Una vez que pase cierto tiempo, se despertarán y pasarán de nuevo a formar parte de la cola de procesos listos.

Los procesos irán pasando por los distintos estados de su ciclo de vida reflejando cada estado con un letrero que indicara el estado en el que se encuentran.



Cuestionario

A)

¿Qué es el planificador del CPU?

Cuando mas de un proceso es ejecutable, la porción del SO que debe decidir cual de ellos debe ejecutarse en primer término es el Planificador (Scheduler o Dispatcher).

¿Cuál es su importancia en el sistema?

Es importante ya que es el encargado de escoger los procesos correctos que van a ejecutarse y además de el depende el uso eficiente de la CPU.

En el contexto de la planificación del CPU, ¿se puede considerar el término planificador y despachador como sinónimos? Justifique su respuesta.

Tal vez, porque al hablar de planificador estamos diciendo que es el encargado ver cual proceso va a ser atendido o "despachado" primero y si habláramos de despachador diríamos que es el encargado de despachar a los procesos haciendo posible que usen el CPU, o sea que el planificador y el despachador en el contexto de la planificación del CPU pudieran ser sinónimos.

B)

¿Cuál es la finalidad de ejecutar un algoritmo de planificación?

La finalidad es lograr la equidad en los procesos, eficiencia, bajo tiempo de respuesta, un rendimiento alto y minimizar el tiempo de espera.

C)

¿Cuál es la diferencia entre una planificación apropiativa y no apropiativa?

La planificación apropiativa es aquella en la cual, una vez que a un proceso le toca su turno de ejecución ya no puede ser suspendido, ya no se le puede arrebatar el procesador.

Una planificación no apropiativa es aquella en que existe un reloj que lanza interrupciones periódicas en las cuales el planificador toma el control y se decide si el mismo proceso seguirá ejecutándose o se le da su turno a otro proceso.

D)

Defina el concepto ráfaga de CPU y ráfaga de E/S.

· Ráfaga de CPU: Intervalo de tiempo consecutivo que un proceso está ejecutándose en la CPU.
· Ráfaga de E/S: Intervalo de tiempo consecutivo que un proceso está realizando una E/S.

¿Qué consideraciones se deben tomar en cuenta al momento de seleccionar un algoritmo de planificación basándose en estos dos conceptos?

Se debe tener bien claro que es lo que queremos optimizar, por ejemplo, ay algoritmos de planificación que optimizan los tiempos medios de espera asignando de forma dinámica la longitud (duración) de la ráfaga de CPU de los procesos. También ay que tener muy en claro como la ejecución de un trabajo depende las longitudes de las ráfagas de CPU y de E/S, ningún algoritmo de planificación logra cubrir al 100% los objetivos deseados de la planificación, ya que si trata de optimizar algunos objetivos necesariamente debe descuidar otros, así que para seleccionar un algoritmo de planificación es necesario conocer el tipo de proceso a realizar y los tipos de criterios de planificación que se desean optimizar.

Algoritmos de Planificación elegidos para la simulación

FCFS (first come, firstserve)

Es un algoritmo apropiativo.


Es el algoritmo de planificación más sencillo. Esto es, el primer proceso en solicitar la CPU es el primero en recibir la asignación de la misma. La implementación del FCFS se realiza fácilmente mediante una cola FIFO. Cuando un proceso entra en la cola de preparados o listos para la ejecución (readyqueue), se lo coloca al final de la cola.

Cuando la CPU queda libre, ésta se le asigna al proceso situado al principio de la cola. Entonces el proceso en ejecución se elimina de la cola. FCFS rinde mucho mejor con procesos largos que con procesos cortos. Sin embargo, las prestaciones del FCFS son, con frecuencia, bastante malas.

Presenta problemas como que el tiempo medio de espera suele ser elevado, un bajo nivel de uso de la CPU, pobre tiempo de respuesta en procesos cortos en esquemas con mucha carga, tiende a favorecer los procesos con carga de CPU respecto a los que tienen carga de E/S, así como también un uso ineficiente de los dispositivos de E/S.


Round Robin

Es un algoritmo no apropiativo.


El algoritmo de planificación round-robin fue especialmente diseñado para sistemas de tiempo compartido. Requiere que se defina una pequeña unidad de tiempo común llamada quantum de tiempo o time slice, pequeño en magnitud de milisegundos. Los procesos se encolan en una cola de procesos listos que es tratada como una cola circular. El planificador recorre la cola asignando el procesador a cada proceso durante un intervalo de tiempo de hasta un quantum.

Para implementar la planificación round robin, la cola se mantiene como una cola de procesos FIFO. El planificador de la CPU selecciona el primer proceso de la cola, y únicamente puede salir del estado de ejecución por tres motivos:


  • Que termine su ejecución.
  • Que se proceda la llamada a una E/S y el proceso se quede bloqueado.
  • Que se genere una interrupción por haber superado un quantum de ejecución del proceso.
Si hay n procesos en la cola y el quantum de tiempo es q, entonces cada proceso obtiene 1/n del tiempo de CPU en fragmentos de al menos q unidades de tiempo cada vez. Cada proceso tiene que esperar no más de (n-1) x q unidades de tiempo hasta su quantum de tiempo siguiente.


El verdadero problema de esta implementación esta en la elección del quantum de tiempo para cada proceso. Si el quantum es muy pequeño, produce mucho overhead por la gran cantidad de cambios de contexto de ejecución que hace el sistema operativo. Si por el contrario, el quantum es muy grande produce un tiempo de reacción muy pobre porque los procesos en cola de listos esperan demasiado (si el tiempo de espera fuese infitino, este algoritmo se convertiría en un FCFS). Es decir que para que sea eficiente, la duración del contextswitch debe ser mucho menor que el quantum elegido.



Una desventaja del turno rotatorio es el tratamiento que hace si existe una mezcla de procesos limitados por CPU y procesos limitados por E/S. En este caso, sucedería lo siguiente: un proceso limitado por E/S utiliza el procesador durante un periodo corto y después se bloquea en la E/S, espera a que se complete la operación de E/S y entonces vuelve a la cola de listos. Por otro lado, un proceso limitado por procesador generalmente hace uso de un cuanto de tiempo completo cuando se ejecuta e inmediatamente retorna a la cola de listos. Así, los procesos con más carga de procesador que entrada/salida, tienden a recibir una porción desigual de tiempo de procesador, lo que origina un rendimiento pobre de los procesos con carga de E/S. Esto además, trae aparejado un mal aprovechamiento de los dispositivos de E/S y un incremento de la variabilidad del tiempo de respuesta.



Para solucionar este problema se implementa un variación del algoritmo llamada VRR (virtual round-robin). La nueva característica consiste en una cola FIFO auxiliar a la que se desplazan los procesos una vez que son liberados de la espera por E/S. Al tomar una decisión sobre el siguiente proceso a expedir, los procesos de la cola auxiliar tienen preferencia sobre los de la cola principal de listos. Cuando se expide un proceso desde la cola auxiliar, no se puede ejecutar más que un tiempo igual al cuanto básico menos el tiempo total de ejecución consumido desde que fue seleccionado por última vez en la cola de listos.



Conclusión

La planificación del procesador se refiere a la manera o técnicas que se usan para decidir cuánto tiempo de ejecución y cuando se le asignan a cada proceso del sistema.

Una buena estrategia de planificación debe buscar que los procesos obtengan sus turnos de ejecución apropiadamente, conjuntamente con un buen rendimiento y minimización de la overhead (sobrecarga) del planificador mismo. En general, se buscan cinco objetivos principales: Justicia o Imparcialidad en los procesos, Maximización de la finalización de procesos en el menor tiempo posible, Maximizar el tiempo de respuesta, Evitar la espera indefinida de tiempo para que los procesos ocupen la CPU, Evitar la inanición.

Para elegir el mejor algoritmo de planificación hay que conocer los tipos de procesos que se van a ejecutar y conocer los siguientes criterios de planificación: Utilización de CPU, Rendimiento, Tiempo de retorno o de estancia, Tiempo de espera y Tiempo de respuesta.

Actividad 4: Módulo de Planificación

Módulo del Sistema Operativo que realiza la planificación

El módulo del Sistema Operativo que realiza la planificación es el Planificador.


Planificación de procesos en Sistemas Operativos

Conjunto de políticas y mecanismos incorporados al sistema operativo, a través de un módulo denominado planificador, que debe decidir cuál de los procesos en condiciones de ser ejecutado conviene ser despachado primero y qué orden de ejecución debe seguirse. Esto debe realizarse sin perder de vista su principal objetivo que consiste en el máximo aprovechamiento del sistema, lo que implica proveer un buen servicio a los procesos existentes en un momento dado. 

Modo de decisión

Indica en qué instante en el tiempo se aplica la función de selección. Las decisiones del planificador deben efectuarse en una de las cinco circunstancias siguientes:

1ª. Cuando un proceso cambia del estado de ejecución al estado de bloqueado.
2ª. Cuando un proceso cambia del estado de ejecución al estado de listo.
3ª. Cuando un proceso cambia del estado de bloqueado al estado de listo.
4ª. Cuando llega un proceso nuevo. Del estado de nuevo al estado de listo.
5ª. Cuanto termina un proceso.  
        
Cuando la planificación tiene lugar únicamente en las situaciones 1ª y 5ª, decimos que el esquema de planificación es no apropiativo. Solo pierde el control del procesador cuando se bloquea por una operación de E/S o porque ha terminado.

En los otros casos decimos que tenemos un esquema de planificación apropiativo. Se le puede retirar el dominio del procesador a un proceso.


Algoritmos de Planificación

Primero en llegar primero en ser servido

Conocido como FCFS (First Come First Served). Este algoritmo emplea una cola de procesos, asignando un lugar a cada proceso por el orden de llegada. Cuando el proceso llega es puesto en su lugar en la cola después del que llegó antes que él y se pone en estado de listo. Cuando un proceso comienza a ejecutarse no se interrumpe su ejecución hasta que termina de hacerlo.

Prioridad al más corto

Su nombre es SJF (Shortest Job First). El proceso que se encuentra en ejecución cambiará de estado voluntariamente, o sea, no tendrá un tiempo de ejecución determinado para el proceso. A cada proceso se le asigna el tiempo que usará cuando vuelva a estar en ejecución, y se irá ejecutando el que tenga un menor tiempo asignado. Si se da el caso de que dos procesos tengan igual valor en ese aspecto emplea el algoritmo FCFS.

Round Robin

A cada proceso se le asigna un tiempo determinado para su ejecución, el mismo tiempo para todos. En caso de que un proceso no pueda ser ejecutado completamente en ese tiempo se continuará su ejecución después de que todos los procesos restantes sean ejecutados durante el tiempo establecido. Este es un algoritmo basado en FCFS que trata la cola de procesos que se encuentran en estado de listos como una cola circular.

Planificación por prioridad

En este tipo de planificación a cada proceso se le asigna una prioridad siguiendo un criterio determinado, y de acuerdo con esa prioridad será el orden en que se atienda cada proceso.

Planificación garantizada

Para realizar esta planificación el sistema tiene en cuenta el número de usuarios que deben ser atendidos. Para un número "n" de usuarios se asignará a cada uno un tiempo de ejecución igual a 1/n.

Planificación de Colas Múltiples

El nombre se deriva de MQS (Multilevel Queue Schedulling). En este algoritmo la cola de procesos que se encuentran en estado de listos es dividida en un número determinado de colas más pequeñas. Los procesos son clasificados mediante un criterio para determinar en qué cola será colocado cada uno cuando quede en estado de listo. Cada cola puede manejar un algoritmo de planificación diferente a las demás.





Práctica 6: Deadlock de Procesos en Java


Introducción

El interbloqueo (deadlock) se puede definir como el bloqueo permanente de un conjunto de procesos que compiten por los recursos del sistema o bien se comunican unos con otros. A diferencia de otros problemas de la gestión concurrente de procesos, no existe una solución eficiente para el caso general.

Todos los interbloqueos suponen necesidades contradictorias de recursos por parte de dos o más procesos.

A veces, los interbloqueos se denominan "abrazo mortal".

El interbloqueo puede definirse formalmente como sigue: Un conjunto de procesos está en interbloqueo si cada proceso del conjunto está esperando un evento que sólo otro proceso del conjunto puede causar. Puesto que todos los procesos están esperando, ninguno de ellos puede causar ninguno de los eventos que podrían despertar a cualquiera de los demás miembros del conjunto, y todos los procesos continúan esperando indefinidamente.

Código en Java Deadlock

Deadlock describe una situación en la que dos o más hilos están bloqueados constantemente, esperando a los demás. He aquí un ejemplo.

Alphonse y Gaston son amigos, y grandes creyentes de la cortesía. Una regla estricta de cortesía es que cuando haces reverencia a un amigo, debes permanecer inclinado hasta que tu amigo tenga la oportunidad de responder la reverencia. Desafortunadamente, esta regla no tiene en cuenta la posibilidad de que dos amigos hagan reverencia el uno al otro al mismo tiempo. Esta aplicación de ejemplo, Deadlock, modela esta posibilidad:

public class Deadlock {
    static class Friend {
        private final String name;
        public Friend(String name) {
            this.name = name;
        }
        public String getName() {
            return this.name;
        }
        public synchronized void bow(Friend bower) {
            System.out.format("%s: %s has bowed to me!%n",
                    this.name, bower.getName());
            bower.bowBack(this);
        }
        public synchronized void bowBack(Friend bower) {
            System.out.format("%s: %s has bowed back to me!%n",
                    this.name, bower.getName());
        }
    }

    public static void main(String[] args) {
        final Friend alphonse = new Friend("Alphonse");
        final Friend gaston = new Friend("Gaston");
        new Thread(new Runnable() {
            public void run() { alphonse.bow(gaston); }
        }).start();
        new Thread(new Runnable() {
            public void run() { gaston.bow(alphonse); }
        }).start();
    }
}

Cuando se ejecuta Deadlock, es muy probable que ambos hilos se bloqueen cuando intenten invocar bowBack. Ningún bloque nunca terminaría porque cada hilo está esperando a que el otro salga.

Ejecución del código


Comentario de los resultados de la ejecución del código

Casi siempre el programa nunca va terminar su ejecución ya que los procesos se quedan "atorados" y no avanzan, aunque puede darse el caso de que los procesos no se bloqueen entre sí y el programa logre terminar su ejecución.

Código en Java Deadlock con nombres


                                                      Ejecución del código con nombres


                        Comentario de los resultados de la ejecución del código con nombres

Ocurre lo mismo que en la primera ejecución del código, los procesos se quedan "atorados" y no avanzan, aunque puede darse el caso de que los procesos no se bloqueen entre sí y el programa logre terminar su ejecución.

Manera en la que se presenta el Deadlock en el programa

1. Cuando entra Alphonse.bow (gaston); Alphonse esta ahora bloqueado debido a la palabra clave “Synchronized".

2. Cuando entra gaston.bow (Alphonse); Gaston está ahora bloqueado.

3. No puede ejecutarse “bower.bow Back(thie); del primer método bow que se llama, porque gaston (bower) es bloqueado.

* Espera a que sea liberado el bloqueo.

4. No puede ejecutarse el bower.bowback(this) del segundo método llamado porque Alphonse(bower) esta bloqueado.

*Espera a que el bloqueo sea liberado.

En pocas palabras ambos hilos esperan el un o por el otro para que sea liberado el bloqueo.