SlideShare una empresa de Scribd logo
1 de 7
Descargar para leer sin conexión
PROBLEMAS CLÁSICOS DE COMUNICACIÓN DE
PROCESOS “EL BARBERO DORMILÓN”
“Palma Steven”, “Ramírez Inés”, “Rocafuerte Andrea”, “Torres Joselyn”, “Vera Jonathan”
Facultad de Sistemas y Telecomunicaciones
Carrera de Electrónica y Telecomunicaciones
Universidad Estatal Península de Santa Elena
La Libertad – Ecuador
“steven_palma2013@hotmail.com”, “inesol1@hotmail.com”, “andrearg2212@hotmail.com”,
“joselyntorresgonzalez@hotmail.com”, “jonathan_51194@hotmail.com”
dquirumbay@upse.edu.ec
SISTEMAS OPERATIVOS
Resumen
El propósito de esta aplicación, es el de mostrar el funcionamiento de un
algoritmo de administración de procesos, los cuales se adentran en los
problemas clásicos del barbero dormilón, aquí se dará a conocer las
variedades de la ejecución de este proceso.
I. INTRODUCCIÓN
Prácticamente esta teoría está
basada en lo que es la vida real
porque es un problema de
sincronización, hace esta
comparación por lo que
encontramos siempre tipos de
procesos de los cuales hay que
esperar que se termine uno para
que empiece a procesar otro o más
bien que se encargue cada uno de
que estén ordenados y esperando
un determinado tiempo para
avanzar.
II. DESARROLLO
 El barbero dormilón
El problema consiste en una
barbería en la que trabaja, un
barbero tiene un único sillón de
barbero y varias sillas para esperar.
Cuando no hay clientes, el barbero
se sienta en una silla y se duerme,
cuando llega un nuevo cliente, éste
o bien despierta al barbero o si el
barbero esta afeitado a otro cliente
se sienta en una silla o se va si
todas las sillas están ocupadas por
clientes esperando. El problema
consiste en realizar la actividad del
barbero sin que ocurran condiciones
de carrera. La solución implica el
uso de semáforos y objetos de
exclusión mutua para proteger la
sección crítica.
Un semáforo es una variable
protegida que constituye el método
clásico para restringir o permitir el
acceso a recursos compartidos
como por el ejemplo un recurso de
almacenamiento, en un entorno de
multiprocesamiento, esto fue
inventado por Edsger Dijkstra en
1971 y se usó por primera vez en el
sistema operativo THEOS.
Se emplean dos variables
semáforos: Un mutex de no dejar
que un cliente tome la silla del
barbero, si esta se encuentra
ocupada. La otra variable cuenta el
número de clientes que esperan al
barbero, si hay más de 5 no deja
entrar otro cliente a la barbería,
hasta que se desocupe una silla.
En electrónica y en programación
concurrente, se conoce como
condición de carrera al error que se
produce en los programas o
circuitos lógicos que se han
construido adecuadamente para su
ejecución simultánea con otros
procesos. Fig. Nº 1
Fig. Nº 1
 Administración de buffers
Fig. Nº2
 Tendencia a llenarse de los
buffers (TCP windowing).
 Buffering reduce Loss,
introduce Delay.
 Overflow de buffers => se
descartan paquetes o frames.
 Para garantizar QoS se
deben pre alocar y reservar.
¿Qué hacer?
 Sobredimensionamiento
(Overprovisioning).
 Diseñar.
 Controlar y evitar. Fig. Nº 2
Soluciones
La presencia de congestión
significa que la carga 8 a
veces en forma temporaria es
mayor que los recursos.
Desde otro punto de vista
que podemos hacer:
 Incrementar los recursos BW
, Buffers.
 Decremento la carga.
 Implementación
Fig. Nº 3
Podemos encontrar una codificación
en java y en C++. Fig. Nº 3
 Codificación en c++.
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#define TRUE 1
#define FALSE 0
#define CHAIRS 3 //Sillas
Disponibles
#define CANT_CUST 5 //Cantidad
de Clientes
#define T_CUST 0 //Tiempo de
llegada de Clientes
#define T_CORTE 3 //Tiempo de
corte de pelo
typedef int semaphore;
//Prototipo de funciones
void *customer (void *);
void *barber (void *);
void up (semaphore *);
void down (semaphore *);
semaphore sem_barber=0,
sem_customer=0,sem_mutex=1;
int waiting=0;
//Main function
int main (void) {
pthread_t
barb_t,cust_t[CANT_CUST];
int i;
pthread_create(&barb_t,NULL,barbe
r,NULL)…
for (i=0;i<CANT_CUST;i++){
sleep(T_CUST);
pthread_create(&cust_t[i],NULL,cust
omer,…
}
pthread_join(barb_t,NULL);
return(0);
}
void *customer (void *n) {
printf ("Customer:entrando hay %d
esperandon",waiting);
down (&sem_mutex);
if (waiting < CHAIRS) {
waiting++;
up (&sem_customer);
up (&sem_mutex);
down (&sem_barber);
printf ("Customer:Me estan cortando
el pelo.n");
}
else {
up (&sem_mutex);
printf ("Customer:Me fui no hay
lugar.n");
}
}
void *barber (void *j) {
printf ("Barber:Empiezo a
trabajarn");
while (TRUE) {
down (&sem_customer);
down (&sem_mutex);
waiting--;
up (&sem_barber);
up (&sem_mutex);
printf ("Barber:Comienzo el corte de
pelo de un cliente quedan %d
esperando.n",waiting);
sleep (T_CORTE);
printf ("Barber:Termine de cortar el
pelo de un cliente quedan %d
esperando.n",waiting);
}
}
void up (semaphore *sem) {
*sem+=1;
}
void down (semaphore *sem) {
while (*sem<=0){};
*sem-=1;
}
 Codificación en java
package pbarberodormilon;
import
java.util.concurrent.Semaphore;
import java.util.Random;
public class PBarberoDormilon {
static int SILLAS=5;
public static Semaphore
clientes=new Semaphore(0);
public static Semaphore
barberos=new Semaphore(0);
public static Semaphore mutex
=new Semaphore(1);
public static int
clientesesperando=0;
public static Cliente c[]=new
Cliente[SILLAS];
public static Barbero b=new
Barbero();
private static Random r=new
Random();
public static class Barbero
extends Thread {
@Override
public void run(){
while (true) {
try {
clientes.acquire();
mutex.acquire();
clientesesperando--;
barberos.release();
mutex.release();
int aux=r.nextInt(1000);
Thread.sleep(aux);
System.out.println("Bar
bero cortando el pelo.");
} catch
(InterruptedException ex){
ex.printStackTrace();
}
}
}
}
public static class Cliente extends
Thread {
private int id;
public Cliente(int id){
this.id=id;
}
@Override
public void run(){
try {
mutex.acquire();
if(clientesesperando<SI
LLAS) {
clientesesperando++;
clientes.release();
mutex.release();
barberos.acquire();
System.out.println("C
liente " + id + " siendo pelado.
Clientes
esperando:"+clientesesperando);
} else {
mutex.release();
}
} catch
(InterruptedException ex){
ex.printStackTrace();
}
}
}
public static void main(String[]
args) throws InterruptedException {
for(int i=0;i<SILLAS;i++){
c[i]=new Cliente(i);
c[i].start();
}
b.start();
for(int i=0;i<SILLAS;i++){
try {
c[i].join();
} catch (InterruptedException
ex) {
ex.printStackTrace();
}
}
b.join();
}
}
III. CONCLUSIÓN
El problema del peluquero
dormilón, es un clásico de
la programación, se
propone la discusión
sobre cómo gestionar el
”tránsito'' por una
pequeña peluquería, por
parte de dos tipos de
procesos: el peluquero y
los clientes durante la
ejecución la interacción
entre el peluquero y un
cliente se puede producir
muy a menudo y que, por
tanto, deben establecerse
los mecanismos de
sincronización adecuados
para evitar que los dos
“colisionen'' dentro la
peluquería; es decir,
asegurar que uno sólo es
el que se mueve en cada
momento.
IV. REFERENCIAS
(pdf, 2013)
(PDF, 2014)
(TAREAS, 2014)
(WEB, 2006)
 Bibliografía
pdf. (2013). Obtenido de
http://tuxtor.shekalug.org/compartido/sopes1/manual%20barbero%20dor
milon.pdf
PDF. (2014). Obtenido de
lml.ls.fi.upm.es/pc/Anteriores/Examenes/1993sep/node4.html
TAREAS, B. (9 de SEPTIEMBRE de 2014). Obtenido de
http://www.buenastareas.com/materias/codigo-barbero-dormilon-y-
filosofos/0
WEB. (3 de DICIEMBRE de 2006). Obtenido de
http://unambaayquipacelestino.blogspot.com/

Más contenido relacionado

La actualidad más candente

Sistema de-maquina-virtual
Sistema de-maquina-virtualSistema de-maquina-virtual
Sistema de-maquina-virtualkerlly villon
 
Sistemas paralelos vs distribuidos
Sistemas paralelos vs distribuidosSistemas paralelos vs distribuidos
Sistemas paralelos vs distribuidosJesús Navarro
 
Topicos Avanzados de Programacion - Unidad 3 componentes y librerias
Topicos Avanzados de Programacion - Unidad 3 componentes y libreriasTopicos Avanzados de Programacion - Unidad 3 componentes y librerias
Topicos Avanzados de Programacion - Unidad 3 componentes y libreriasJosé Antonio Sandoval Acosta
 
Algoritmos de dekker
Algoritmos de dekkerAlgoritmos de dekker
Algoritmos de dekkernerexi
 
Simulación y Tipos de Modelos
Simulación y Tipos de ModelosSimulación y Tipos de Modelos
Simulación y Tipos de Modelosvokii
 
Introduccion a la administracion de los procesos y el procesador (S.O)
Introduccion a la administracion de los procesos y el procesador (S.O)Introduccion a la administracion de los procesos y el procesador (S.O)
Introduccion a la administracion de los procesos y el procesador (S.O)Javier Alvarez
 
2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automataJacqui Venegas
 
Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Osiris Mirerus
 
Mecanismo de sincronización de procesos
Mecanismo de sincronización de procesosMecanismo de sincronización de procesos
Mecanismo de sincronización de procesosjulio izaguirre
 
Sistemas Operativos Gestion de E/S y Planificacion de Disco
Sistemas Operativos Gestion de E/S y Planificacion de DiscoSistemas Operativos Gestion de E/S y Planificacion de Disco
Sistemas Operativos Gestion de E/S y Planificacion de DiscoVictor Prieto
 
Metricas del proyecto de Software - introduccion
Metricas del proyecto de Software - introduccionMetricas del proyecto de Software - introduccion
Metricas del proyecto de Software - introduccionJose Diaz Silva
 
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasTópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasJosé Antonio Sandoval Acosta
 
Estructuras (CAPAS) de un sistema operativo
Estructuras (CAPAS) de un sistema operativoEstructuras (CAPAS) de un sistema operativo
Estructuras (CAPAS) de un sistema operativoMarvin Romero
 
Bitácora de base de datos
Bitácora de base de datosBitácora de base de datos
Bitácora de base de datosLalo Osorio
 

La actualidad más candente (20)

Sistema de-maquina-virtual
Sistema de-maquina-virtualSistema de-maquina-virtual
Sistema de-maquina-virtual
 
Sistemas paralelos vs distribuidos
Sistemas paralelos vs distribuidosSistemas paralelos vs distribuidos
Sistemas paralelos vs distribuidos
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
Topicos Avanzados de Programacion - Unidad 3 componentes y librerias
Topicos Avanzados de Programacion - Unidad 3 componentes y libreriasTopicos Avanzados de Programacion - Unidad 3 componentes y librerias
Topicos Avanzados de Programacion - Unidad 3 componentes y librerias
 
Lenguajes de simulación
Lenguajes de simulaciónLenguajes de simulación
Lenguajes de simulación
 
Algoritmos de dekker
Algoritmos de dekkerAlgoritmos de dekker
Algoritmos de dekker
 
Div, idiv, Neg ensamblador
Div, idiv, Neg ensambladorDiv, idiv, Neg ensamblador
Div, idiv, Neg ensamblador
 
Simulación y Tipos de Modelos
Simulación y Tipos de ModelosSimulación y Tipos de Modelos
Simulación y Tipos de Modelos
 
Introduccion a la administracion de los procesos y el procesador (S.O)
Introduccion a la administracion de los procesos y el procesador (S.O)Introduccion a la administracion de los procesos y el procesador (S.O)
Introduccion a la administracion de los procesos y el procesador (S.O)
 
Estándares para el Modelado de Procesos de Negocios
Estándares para el Modelado de Procesos de NegociosEstándares para el Modelado de Procesos de Negocios
Estándares para el Modelado de Procesos de Negocios
 
2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata
 
PROBLEMA DE LA MOCHILA
PROBLEMA DE LA MOCHILAPROBLEMA DE LA MOCHILA
PROBLEMA DE LA MOCHILA
 
Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1
 
Mecanismo de sincronización de procesos
Mecanismo de sincronización de procesosMecanismo de sincronización de procesos
Mecanismo de sincronización de procesos
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
Sistemas Operativos Gestion de E/S y Planificacion de Disco
Sistemas Operativos Gestion de E/S y Planificacion de DiscoSistemas Operativos Gestion de E/S y Planificacion de Disco
Sistemas Operativos Gestion de E/S y Planificacion de Disco
 
Metricas del proyecto de Software - introduccion
Metricas del proyecto de Software - introduccionMetricas del proyecto de Software - introduccion
Metricas del proyecto de Software - introduccion
 
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y libreriasTópicos Avanzados de Programación - Unidad 2 componentes y librerias
Tópicos Avanzados de Programación - Unidad 2 componentes y librerias
 
Estructuras (CAPAS) de un sistema operativo
Estructuras (CAPAS) de un sistema operativoEstructuras (CAPAS) de un sistema operativo
Estructuras (CAPAS) de un sistema operativo
 
Bitácora de base de datos
Bitácora de base de datosBitácora de base de datos
Bitácora de base de datos
 

Similar a PROBLEMAS CLÁSICOS DEL BARBERO DORMILÓN

Similar a PROBLEMAS CLÁSICOS DEL BARBERO DORMILÓN (20)

Teoría de colas
Teoría de colas Teoría de colas
Teoría de colas
 
Eva
EvaEva
Eva
 
Teoria de colas
Teoria de colasTeoria de colas
Teoria de colas
 
Teoria de colas
Teoria de colasTeoria de colas
Teoria de colas
 
Java básico
Java  básicoJava  básico
Java básico
 
Manual.es
Manual.esManual.es
Manual.es
 
Aplicacion de las_simulacion
Aplicacion de las_simulacionAplicacion de las_simulacion
Aplicacion de las_simulacion
 
Tda cola
Tda colaTda cola
Tda cola
 
Informe compilador divisor
Informe compilador divisorInforme compilador divisor
Informe compilador divisor
 
Manual Tecnico
Manual TecnicoManual Tecnico
Manual Tecnico
 
P1
P1P1
P1
 
Documentación de pruebas del software
Documentación de pruebas del softwareDocumentación de pruebas del software
Documentación de pruebas del software
 
Tarea
TareaTarea
Tarea
 
Problemas basicos de comunicación
Problemas basicos de comunicaciónProblemas basicos de comunicación
Problemas basicos de comunicación
 
Manual Tecnico
Manual TecnicoManual Tecnico
Manual Tecnico
 
Programación en lenguaje C
Programación en  lenguaje C Programación en  lenguaje C
Programación en lenguaje C
 
Php04 estructuras control
Php04 estructuras controlPhp04 estructuras control
Php04 estructuras control
 
Teoría de colas
Teoría de colasTeoría de colas
Teoría de colas
 
Taller concurrencia y exclusión mutua.
Taller concurrencia y exclusión mutua.Taller concurrencia y exclusión mutua.
Taller concurrencia y exclusión mutua.
 
teoría de colas o fenómenos de espera
teoría de colas o fenómenos de esperateoría de colas o fenómenos de espera
teoría de colas o fenómenos de espera
 

PROBLEMAS CLÁSICOS DEL BARBERO DORMILÓN

  • 1. PROBLEMAS CLÁSICOS DE COMUNICACIÓN DE PROCESOS “EL BARBERO DORMILÓN” “Palma Steven”, “Ramírez Inés”, “Rocafuerte Andrea”, “Torres Joselyn”, “Vera Jonathan” Facultad de Sistemas y Telecomunicaciones Carrera de Electrónica y Telecomunicaciones Universidad Estatal Península de Santa Elena La Libertad – Ecuador “steven_palma2013@hotmail.com”, “inesol1@hotmail.com”, “andrearg2212@hotmail.com”, “joselyntorresgonzalez@hotmail.com”, “jonathan_51194@hotmail.com” dquirumbay@upse.edu.ec SISTEMAS OPERATIVOS Resumen El propósito de esta aplicación, es el de mostrar el funcionamiento de un algoritmo de administración de procesos, los cuales se adentran en los problemas clásicos del barbero dormilón, aquí se dará a conocer las variedades de la ejecución de este proceso.
  • 2. I. INTRODUCCIÓN Prácticamente esta teoría está basada en lo que es la vida real porque es un problema de sincronización, hace esta comparación por lo que encontramos siempre tipos de procesos de los cuales hay que esperar que se termine uno para que empiece a procesar otro o más bien que se encargue cada uno de que estén ordenados y esperando un determinado tiempo para avanzar. II. DESARROLLO  El barbero dormilón El problema consiste en una barbería en la que trabaja, un barbero tiene un único sillón de barbero y varias sillas para esperar. Cuando no hay clientes, el barbero se sienta en una silla y se duerme, cuando llega un nuevo cliente, éste o bien despierta al barbero o si el barbero esta afeitado a otro cliente se sienta en una silla o se va si todas las sillas están ocupadas por clientes esperando. El problema consiste en realizar la actividad del barbero sin que ocurran condiciones de carrera. La solución implica el uso de semáforos y objetos de exclusión mutua para proteger la sección crítica. Un semáforo es una variable protegida que constituye el método clásico para restringir o permitir el acceso a recursos compartidos como por el ejemplo un recurso de almacenamiento, en un entorno de multiprocesamiento, esto fue inventado por Edsger Dijkstra en 1971 y se usó por primera vez en el sistema operativo THEOS. Se emplean dos variables semáforos: Un mutex de no dejar que un cliente tome la silla del barbero, si esta se encuentra ocupada. La otra variable cuenta el número de clientes que esperan al barbero, si hay más de 5 no deja entrar otro cliente a la barbería, hasta que se desocupe una silla. En electrónica y en programación concurrente, se conoce como condición de carrera al error que se produce en los programas o circuitos lógicos que se han construido adecuadamente para su ejecución simultánea con otros procesos. Fig. Nº 1
  • 3. Fig. Nº 1  Administración de buffers Fig. Nº2  Tendencia a llenarse de los buffers (TCP windowing).  Buffering reduce Loss, introduce Delay.  Overflow de buffers => se descartan paquetes o frames.  Para garantizar QoS se deben pre alocar y reservar. ¿Qué hacer?  Sobredimensionamiento (Overprovisioning).  Diseñar.  Controlar y evitar. Fig. Nº 2 Soluciones La presencia de congestión significa que la carga 8 a veces en forma temporaria es mayor que los recursos. Desde otro punto de vista que podemos hacer:  Incrementar los recursos BW , Buffers.  Decremento la carga.  Implementación Fig. Nº 3 Podemos encontrar una codificación en java y en C++. Fig. Nº 3
  • 4.  Codificación en c++. #include <stdio.h> #include <unistd.h> #include <pthread.h> #define TRUE 1 #define FALSE 0 #define CHAIRS 3 //Sillas Disponibles #define CANT_CUST 5 //Cantidad de Clientes #define T_CUST 0 //Tiempo de llegada de Clientes #define T_CORTE 3 //Tiempo de corte de pelo typedef int semaphore; //Prototipo de funciones void *customer (void *); void *barber (void *); void up (semaphore *); void down (semaphore *); semaphore sem_barber=0, sem_customer=0,sem_mutex=1; int waiting=0; //Main function int main (void) { pthread_t barb_t,cust_t[CANT_CUST]; int i; pthread_create(&barb_t,NULL,barbe r,NULL)… for (i=0;i<CANT_CUST;i++){ sleep(T_CUST); pthread_create(&cust_t[i],NULL,cust omer,… } pthread_join(barb_t,NULL); return(0); } void *customer (void *n) { printf ("Customer:entrando hay %d esperandon",waiting); down (&sem_mutex); if (waiting < CHAIRS) { waiting++; up (&sem_customer); up (&sem_mutex); down (&sem_barber); printf ("Customer:Me estan cortando el pelo.n"); } else { up (&sem_mutex); printf ("Customer:Me fui no hay lugar.n"); } } void *barber (void *j) { printf ("Barber:Empiezo a trabajarn"); while (TRUE) { down (&sem_customer); down (&sem_mutex); waiting--; up (&sem_barber); up (&sem_mutex); printf ("Barber:Comienzo el corte de pelo de un cliente quedan %d esperando.n",waiting); sleep (T_CORTE); printf ("Barber:Termine de cortar el pelo de un cliente quedan %d esperando.n",waiting); } } void up (semaphore *sem) { *sem+=1; } void down (semaphore *sem) { while (*sem<=0){}; *sem-=1; }
  • 5.  Codificación en java package pbarberodormilon; import java.util.concurrent.Semaphore; import java.util.Random; public class PBarberoDormilon { static int SILLAS=5; public static Semaphore clientes=new Semaphore(0); public static Semaphore barberos=new Semaphore(0); public static Semaphore mutex =new Semaphore(1); public static int clientesesperando=0; public static Cliente c[]=new Cliente[SILLAS]; public static Barbero b=new Barbero(); private static Random r=new Random(); public static class Barbero extends Thread { @Override public void run(){ while (true) { try { clientes.acquire(); mutex.acquire(); clientesesperando--; barberos.release(); mutex.release(); int aux=r.nextInt(1000); Thread.sleep(aux); System.out.println("Bar bero cortando el pelo."); } catch (InterruptedException ex){ ex.printStackTrace(); } } } } public static class Cliente extends Thread { private int id; public Cliente(int id){ this.id=id; } @Override public void run(){ try {
  • 6. mutex.acquire(); if(clientesesperando<SI LLAS) { clientesesperando++; clientes.release(); mutex.release(); barberos.acquire(); System.out.println("C liente " + id + " siendo pelado. Clientes esperando:"+clientesesperando); } else { mutex.release(); } } catch (InterruptedException ex){ ex.printStackTrace(); } } } public static void main(String[] args) throws InterruptedException { for(int i=0;i<SILLAS;i++){ c[i]=new Cliente(i); c[i].start(); } b.start(); for(int i=0;i<SILLAS;i++){ try { c[i].join(); } catch (InterruptedException ex) { ex.printStackTrace(); } } b.join(); } } III. CONCLUSIÓN El problema del peluquero dormilón, es un clásico de la programación, se propone la discusión sobre cómo gestionar el ”tránsito'' por una pequeña peluquería, por parte de dos tipos de procesos: el peluquero y los clientes durante la ejecución la interacción entre el peluquero y un cliente se puede producir muy a menudo y que, por tanto, deben establecerse los mecanismos de sincronización adecuados
  • 7. para evitar que los dos “colisionen'' dentro la peluquería; es decir, asegurar que uno sólo es el que se mueve en cada momento. IV. REFERENCIAS (pdf, 2013) (PDF, 2014) (TAREAS, 2014) (WEB, 2006)  Bibliografía pdf. (2013). Obtenido de http://tuxtor.shekalug.org/compartido/sopes1/manual%20barbero%20dor milon.pdf PDF. (2014). Obtenido de lml.ls.fi.upm.es/pc/Anteriores/Examenes/1993sep/node4.html TAREAS, B. (9 de SEPTIEMBRE de 2014). Obtenido de http://www.buenastareas.com/materias/codigo-barbero-dormilon-y- filosofos/0 WEB. (3 de DICIEMBRE de 2006). Obtenido de http://unambaayquipacelestino.blogspot.com/