SlideShare una empresa de Scribd logo
1 de 24
Semáforos Cecilia Hernández 2007-1
Semáforos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Implementación de Semáforos typedef struct { int value; struct hebra *L; } semaphore; void wait(semaphore S) { S.value--; if (S.value < 0){ agregar hebra a S.L; block(); } } void signal(semaphore S){ S.value++; if (S.value  <= 0){ remover hebra T de S.L; wakeup(T); } }
Exclusión mutua vs planificación Sección crítica lock unlock ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],tiempo
Ejemplo planificación ,[object Object],[object Object],[object Object],[object Object],[object Object],tiempo H1. imprime A H2. imprime B H3. imprime C
Tipos de Semáforos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ejemplos Clásicos de Sincronización ,[object Object],[object Object],[object Object],[object Object],[object Object],P C out in Productor Agrega item usando puntero in Consumidor Remueve item usando puntero out
Algoritmo Productor/Consumidor int contador = 0;  //indica número de items en buffer Tipo buffer[N]; int in = 0; int out = 0; Productor while (true) { /* produce un item en proxProd */ while (contador == N); //espera buffer[in] = proxProd; in = (in + 1) % N; contador++; } Consumidor while (true) { while (contador == 0); //espera proxCons = buffer[out]; out = (out + 1) % N; contador--; /* consume prodCons */ }
Cómo resolver problema? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Cómo resolver problema? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Solución Productor/Consumidor usando locks Productor while (true) { /* produce un item en proxProd */ lock(mutex); while(contador == N){ unlock(mutex); yield(); } buffer[in] = proxProd; in = (in + 1) % N; contador++; unlock(lock); } Consumidor While(true){ lock(mutex); while(contador == 0){ unlock(mutex); yield(); } proxCons = buffer[out]; out = (out + 1) % N; contador--; unlock(mutex); /* consume proxCons */  } int contador = 0;  //indica número de items en buffer char buffer[N]; int in = 0; int out = 0; lock_t mutex;
Solución usando semáforos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Solución usando semáforos Productor while (true) { /* produce un item en proxProd */ wait(vacio); wait(mutex); buffer[in] = proxProd; in = (in + 1) % N; contador++; signal(mutex); signal(lleno); } Consumidor While(true){ wait(lleno); wait(mutex); proxCons = buffer[out]; out = (out + 1) % N; contador--; signal(mutex); signal(vacio); /* consume proxCons */  } int contador = 0;  //indica número de items en buffer char buffer[N]; int in = 0; int out = 0; sem mutex=1;  sem vacio = N;   sem lleno = 0;
Ejemplos ,[object Object],[object Object],[object Object],[object Object]
Problema lectores/escritor ,[object Object],[object Object],[object Object],E L L Registro BD
Cómo resolver problema? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Algoritmo usando semáforos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Notas sobre Lectores/Escritores ,[object Object],[object Object],[object Object],[object Object],[object Object]
Otro ejemplo clásico ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Problema de Filósofos comensales
Problemas que pueden surgir con mala sincronización ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ejemplo deadlock con productor/consumidor Productor while (true) { /* produce un item en proxProd */ wait(mutex); wait(vacio); buffer[in] = proxProd; in = (in + 1) % N; contador++; signal(mutex); signal(lleno); } Consumidor While(true){ wait(lleno); wait(mutex); proxCons = buffer[out]; out = (out + 1) % N; contador--; signal(mutex); signal(vacio); /* consume proxCons */  } int contador = 0;  //indica número de items en buffer char buffer[N]; int in = 0; int out = 0; sem mutex=1;  sem vacio = N;   sem lleno = 0; Que sucede aquí?
Problemas con Semáforos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Resumen ,[object Object],[object Object],[object Object],[object Object],[object Object]

Más contenido relacionado

La actualidad más candente

El procesador y sus registros internos
El procesador y sus registros internosEl procesador y sus registros internos
El procesador y sus registros internosromo91
 
PROBLEMA DE LECTORES Y ESCRITORES DE UNA IPC
PROBLEMA DE LECTORES Y ESCRITORES DE UNA IPCPROBLEMA DE LECTORES Y ESCRITORES DE UNA IPC
PROBLEMA DE LECTORES Y ESCRITORES DE UNA IPCfalco87
 
Procesador caracteristicas
Procesador caracteristicasProcesador caracteristicas
Procesador caracteristicasaletzuco1
 
Mapa conceptual sobre
Mapa conceptual sobre Mapa conceptual sobre
Mapa conceptual sobre Juan Anaya
 
Sistemas operativos procesos
Sistemas operativos procesosSistemas operativos procesos
Sistemas operativos procesossistoperativos
 
Lenguajes de interfaz
Lenguajes de interfazLenguajes de interfaz
Lenguajes de interfazXavi Flores
 
Registros de control y estados de la CPU
Registros de control y estados de la CPURegistros de control y estados de la CPU
Registros de control y estados de la CPUIvan Porras
 
Arquitectura de memorias RAM, ROM Y CACHE
Arquitectura de memorias RAM, ROM Y CACHEArquitectura de memorias RAM, ROM Y CACHE
Arquitectura de memorias RAM, ROM Y CACHEYESENIA CETINA
 
Lenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretesLenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretesIsrael Castillo Cruz
 
POO: Encapsulamiento, principio de ocultación, recolección de basura
POO: Encapsulamiento, principio de ocultación, recolección de basuraPOO: Encapsulamiento, principio de ocultación, recolección de basura
POO: Encapsulamiento, principio de ocultación, recolección de basura1da4
 
Lenguaje Ensamblador
Lenguaje EnsambladorLenguaje Ensamblador
Lenguaje Ensambladorgbermeo
 
Interrupciones
InterrupcionesInterrupciones
Interrupcioneshandresrm
 
Gestion de memoria
Gestion de memoriaGestion de memoria
Gestion de memoriaALASBLANKS
 

La actualidad más candente (20)

El procesador y sus registros internos
El procesador y sus registros internosEl procesador y sus registros internos
El procesador y sus registros internos
 
PROBLEMA DE LECTORES Y ESCRITORES DE UNA IPC
PROBLEMA DE LECTORES Y ESCRITORES DE UNA IPCPROBLEMA DE LECTORES Y ESCRITORES DE UNA IPC
PROBLEMA DE LECTORES Y ESCRITORES DE UNA IPC
 
Interrupciones
InterrupcionesInterrupciones
Interrupciones
 
Procesador caracteristicas
Procesador caracteristicasProcesador caracteristicas
Procesador caracteristicas
 
Tipos Primitivos y Elementos Léxicos de Java
Tipos Primitivos y Elementos Léxicos de JavaTipos Primitivos y Elementos Léxicos de Java
Tipos Primitivos y Elementos Léxicos de Java
 
Mapa conceptual sobre
Mapa conceptual sobre Mapa conceptual sobre
Mapa conceptual sobre
 
Sistemas operativos procesos
Sistemas operativos procesosSistemas operativos procesos
Sistemas operativos procesos
 
Lenguajes de interfaz
Lenguajes de interfazLenguajes de interfaz
Lenguajes de interfaz
 
Registros de control y estados de la CPU
Registros de control y estados de la CPURegistros de control y estados de la CPU
Registros de control y estados de la CPU
 
Recursividad
RecursividadRecursividad
Recursividad
 
Principios programacion
Principios programacionPrincipios programacion
Principios programacion
 
Arquitectura de memorias RAM, ROM Y CACHE
Arquitectura de memorias RAM, ROM Y CACHEArquitectura de memorias RAM, ROM Y CACHE
Arquitectura de memorias RAM, ROM Y CACHE
 
Lenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretesLenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretes
 
POO: Encapsulamiento, principio de ocultación, recolección de basura
POO: Encapsulamiento, principio de ocultación, recolección de basuraPOO: Encapsulamiento, principio de ocultación, recolección de basura
POO: Encapsulamiento, principio de ocultación, recolección de basura
 
Lenguaje Ensamblador
Lenguaje EnsambladorLenguaje Ensamblador
Lenguaje Ensamblador
 
Interrupciones
InterrupcionesInterrupciones
Interrupciones
 
Lenguaje Ensamblador
Lenguaje EnsambladorLenguaje Ensamblador
Lenguaje Ensamblador
 
Memorias semiconductoras
Memorias semiconductorasMemorias semiconductoras
Memorias semiconductoras
 
Gestion de memoria
Gestion de memoriaGestion de memoria
Gestion de memoria
 
Diseño de interfaces
Diseño de interfacesDiseño de interfaces
Diseño de interfaces
 

Destacado

Destacado (20)

Semáforos
SemáforosSemáforos
Semáforos
 
Capitulo7 semaforos
Capitulo7 semaforosCapitulo7 semaforos
Capitulo7 semaforos
 
Problema de los Filosofos
Problema de los FilosofosProblema de los Filosofos
Problema de los Filosofos
 
Hilos semaforos
Hilos semaforosHilos semaforos
Hilos semaforos
 
Semáforos, monitores y paso de mensajes
Semáforos, monitores y paso de mensajesSemáforos, monitores y paso de mensajes
Semáforos, monitores y paso de mensajes
 
Monitores
MonitoresMonitores
Monitores
 
Monitores-sistemas operativos
Monitores-sistemas operativosMonitores-sistemas operativos
Monitores-sistemas operativos
 
Ingenieria de sotware
Ingenieria de sotwareIngenieria de sotware
Ingenieria de sotware
 
Hilos en java
Hilos en javaHilos en java
Hilos en java
 
Sistemas Operativos - Semáforos
Sistemas Operativos - SemáforosSistemas Operativos - Semáforos
Sistemas Operativos - Semáforos
 
Sistema operativos semáforos
Sistema operativos  semáforosSistema operativos  semáforos
Sistema operativos semáforos
 
Audio cassete taller #7
Audio cassete taller #7Audio cassete taller #7
Audio cassete taller #7
 
Diapositivas de practica
Diapositivas de practicaDiapositivas de practica
Diapositivas de practica
 
Sistemas control
Sistemas controlSistemas control
Sistemas control
 
Filósofos
FilósofosFilósofos
Filósofos
 
Hackaton Urbano- Ciclo-inclusion
Hackaton Urbano- Ciclo-inclusionHackaton Urbano- Ciclo-inclusion
Hackaton Urbano- Ciclo-inclusion
 
semaforos
semaforossemaforos
semaforos
 
Semaforos
SemaforosSemaforos
Semaforos
 
Hackaton Urbano- Medidor de accidentes en semáforos
Hackaton Urbano- Medidor de accidentes en semáforosHackaton Urbano- Medidor de accidentes en semáforos
Hackaton Urbano- Medidor de accidentes en semáforos
 
Sem plc
Sem plcSem plc
Sem plc
 

Similar a Semaforos (20)

Blog
BlogBlog
Blog
 
Bloqueos Mortales
Bloqueos MortalesBloqueos Mortales
Bloqueos Mortales
 
Monitores
MonitoresMonitores
Monitores
 
Manual mind+
Manual mind+Manual mind+
Manual mind+
 
Examen 2 s,o,
Examen 2 s,o,Examen 2 s,o,
Examen 2 s,o,
 
SICRONIZACION DE PROCESOS
SICRONIZACION DE PROCESOSSICRONIZACION DE PROCESOS
SICRONIZACION DE PROCESOS
 
Sincronizacion de procesos
Sincronizacion de procesosSincronizacion de procesos
Sincronizacion de procesos
 
Procesos
ProcesosProcesos
Procesos
 
Semaforos
SemaforosSemaforos
Semaforos
 
Fundamentos de Analisi y Diseño de Algoritmos FADA
Fundamentos de Analisi y Diseño de Algoritmos FADAFundamentos de Analisi y Diseño de Algoritmos FADA
Fundamentos de Analisi y Diseño de Algoritmos FADA
 
Diapositivas clase.pptx
Diapositivas clase.pptxDiapositivas clase.pptx
Diapositivas clase.pptx
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
PROGRAMACIÓN WEB INTRODUCCIÓN
PROGRAMACIÓN WEB INTRODUCCIÓNPROGRAMACIÓN WEB INTRODUCCIÓN
PROGRAMACIÓN WEB INTRODUCCIÓN
 
7 manual software pseint
7 manual software pseint7 manual software pseint
7 manual software pseint
 
Pseint
PseintPseint
Pseint
 
Diapo04
Diapo04Diapo04
Diapo04
 
Semaforos
SemaforosSemaforos
Semaforos
 
Lenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptosLenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptos
 
Excel - Variables y condicionales
Excel - Variables y condicionalesExcel - Variables y condicionales
Excel - Variables y condicionales
 

Más de Stefano Salvatori (20)

Salida a Volcán Copahue Febrero 2011
Salida a Volcán Copahue Febrero 2011Salida a Volcán Copahue Febrero 2011
Salida a Volcán Copahue Febrero 2011
 
Salida a Aguas Calientes abril 2011
Salida a Aguas Calientes abril 2011Salida a Aguas Calientes abril 2011
Salida a Aguas Calientes abril 2011
 
Sistema de capas
Sistema de capasSistema de capas
Sistema de capas
 
Enumeracion de Goedel
Enumeracion de GoedelEnumeracion de Goedel
Enumeracion de Goedel
 
Maquinas Abstractas
Maquinas AbstractasMaquinas Abstractas
Maquinas Abstractas
 
Intro
IntroIntro
Intro
 
Pipelining
PipeliningPipelining
Pipelining
 
Memoria I I
Memoria  I IMemoria  I I
Memoria I I
 
I S A
I S AI S A
I S A
 
C P U Uniciclo
C P U  UnicicloC P U  Uniciclo
C P U Uniciclo
 
Mips1
Mips1Mips1
Mips1
 
Exc Int
Exc IntExc Int
Exc Int
 
DesempeñO
DesempeñODesempeñO
DesempeñO
 
Mips
MipsMips
Mips
 
Memoria I
Memoria  IMemoria  I
Memoria I
 
Codificacion
CodificacionCodificacion
Codificacion
 
Multiciclo
MulticicloMulticiclo
Multiciclo
 
Hebras
HebrasHebras
Hebras
 
Planificacion Procesos Gral
Planificacion Procesos GralPlanificacion Procesos Gral
Planificacion Procesos Gral
 
Memoria Soporte Hw
Memoria Soporte HwMemoria Soporte Hw
Memoria Soporte Hw
 

Último

How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 

Último (10)

How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 

Semaforos

  • 2.
  • 3. Implementación de Semáforos typedef struct { int value; struct hebra *L; } semaphore; void wait(semaphore S) { S.value--; if (S.value < 0){ agregar hebra a S.L; block(); } } void signal(semaphore S){ S.value++; if (S.value <= 0){ remover hebra T de S.L; wakeup(T); } }
  • 4.
  • 5.
  • 6.
  • 7.
  • 8. Algoritmo Productor/Consumidor int contador = 0; //indica número de items en buffer Tipo buffer[N]; int in = 0; int out = 0; Productor while (true) { /* produce un item en proxProd */ while (contador == N); //espera buffer[in] = proxProd; in = (in + 1) % N; contador++; } Consumidor while (true) { while (contador == 0); //espera proxCons = buffer[out]; out = (out + 1) % N; contador--; /* consume prodCons */ }
  • 9.
  • 10.
  • 11. Solución Productor/Consumidor usando locks Productor while (true) { /* produce un item en proxProd */ lock(mutex); while(contador == N){ unlock(mutex); yield(); } buffer[in] = proxProd; in = (in + 1) % N; contador++; unlock(lock); } Consumidor While(true){ lock(mutex); while(contador == 0){ unlock(mutex); yield(); } proxCons = buffer[out]; out = (out + 1) % N; contador--; unlock(mutex); /* consume proxCons */ } int contador = 0; //indica número de items en buffer char buffer[N]; int in = 0; int out = 0; lock_t mutex;
  • 12.
  • 13. Solución usando semáforos Productor while (true) { /* produce un item en proxProd */ wait(vacio); wait(mutex); buffer[in] = proxProd; in = (in + 1) % N; contador++; signal(mutex); signal(lleno); } Consumidor While(true){ wait(lleno); wait(mutex); proxCons = buffer[out]; out = (out + 1) % N; contador--; signal(mutex); signal(vacio); /* consume proxCons */ } int contador = 0; //indica número de items en buffer char buffer[N]; int in = 0; int out = 0; sem mutex=1; sem vacio = N; sem lleno = 0;
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 21.
  • 22. Ejemplo deadlock con productor/consumidor Productor while (true) { /* produce un item en proxProd */ wait(mutex); wait(vacio); buffer[in] = proxProd; in = (in + 1) % N; contador++; signal(mutex); signal(lleno); } Consumidor While(true){ wait(lleno); wait(mutex); proxCons = buffer[out]; out = (out + 1) % N; contador--; signal(mutex); signal(vacio); /* consume proxCons */ } int contador = 0; //indica número de items en buffer char buffer[N]; int in = 0; int out = 0; sem mutex=1; sem vacio = N; sem lleno = 0; Que sucede aquí?
  • 23.
  • 24.