SlideShare una empresa de Scribd logo
1 de 28
Sincronización de Procesos
Semáforos
Emely Arráiz
Ene-Mar 08
Conceptos
 Herramienta de sincronización (provista por el
SO).
 Un semáforo S es una variable de tipo entero, que
además de ser inicializada.
 Puede ser accedida a través de dos operaciones
atómicas y mutuamente excluyentes
– wait(S) o P(S) o down(S)
– signal(S) o V(S) o up(S)
 Para evitar busy-waiting, cuando un procesos
tiene que esperar, se pondra en una cola de
procesos bloqueados esperando un evento.
Conceptos
 Semáforo puede ser implementado como una
estructura con dos campos
– count : integer
– queue: list of processes
 Cuando un proceso debe esperar por un
semáforo S, el es bloqueado (block() ) y colocado
en la cola del semaforo.
 La operación de signal remueve (wakeup() )un
proceso desde la cola y lo coloca en la lista de
procesos ready.
Semáforos binarios y
semáforos generales
• Semáforo binario
– Solo puede tener dos valores, 0 y 1, y
es la forma más común de semáforo.
• Semáforo general
– Son semáforos que pueden tomar
muchos valores positivos.
Semáforos
type semaphore = record
count: integer;
queue: list of process
end;
var S: semaphore;
• Cuando un proceso debe esperar a un semáforo S, se
bloquea y se pone en la cola del semáforo S.
• La operación signal quita (con la política FIFO) un
proceso de la cola y lo pone en la cola de procesos
listos.
Observaciones de Semaforos
(Negativos)
• Si S.count >=0
– El número de procesos que pueden ejecutar
wait(S) sin que se bloqueen = S.count
• Si S.count<0
– el número de procesos que están esperando en S
es = S.count|
Semáforos sin busy-waiting
wait(S):
S.count- -;
if (S.count < 0) {
colocar este proceso en S.queue
block este proceso (block), o sleep el proceso
{
signal(S):
S.count++;
if (S.count < = 0){
remover el proceso de la cola
colocar este proceso en lista de ready (wakeup(P))
}
La magnitud del valor negativo es el numero de procesos en
waiting.
Operaciones
 Atomicidad y exclusión mutua implica que dos
procesos NO pueden estar en wait(S) y signal(S)
al mismo tiempo sobre el mismo S.
 Los bloques de código definidos por wait (S) y
signal (S) son secciones críticas.
 Las secciones críticas definidas por wait (S) y
signal (S) son muy cortas, típicamente 10
instrucciones.
Exclusión Mutua
 N procesos. S inicializado en 1.
 Un solo proceso le es permitido entrar en la SC.
 Proceso Pi:
repeat
wait(S)
SC
signal(S)
RS
until false
Sincronización
 Sea P1 y P2 dos procesos. La instr. S1 de P1
necesita ser ejecutada antes que la instr. S2 de
P2.
 Definimos un semáforo synch, el cual
inicializamos en cero. synch=0
 La sincronización la obtenemos
P1: S1;
signal(synch);
P2: wait(synch);
S2;
Synchronizing with SemaphoresSynchronizing with Semaphores
♥Mutual Exclusion:Mutual Exclusion:
wait(mutex);
critical section
signal(mutex);
♥Synchronization:Synchronization:
requirement: S2 executed after S1 is
completed
Synch = 0
P1: S1; P2: wait(Synch);(Synch);
signal(Synch);(Synch); S2;
deadlocks with Semaphores...deadlocks with Semaphores...
♥Two processes p0 and p1
♥Two semaphores QQ and SS
p0 : p1:
wait(S);(S); wait(Q);wait(Q);
wait(Q);wait(Q); wait(S);wait(S);
…….. …..…..
signal(S);signal(S); signal(Q);signal(Q);
signal(Q);signal(Q); signal(S);signal(S);
♥ p0 does the first line, then p1 and so on...
More on Synchronization...More on Synchronization...
Three processes p1; p2; p3
semaphores s1 = 1, s2 = 0s1 = 1, s2 = 0;
p1p1 p2p2 p3p3
wait(s1s1); wait(s2s2); wait(s2s2);
.. code .. .. code .. .. code ..
signal(s2s2); signal(s2s2); signal(s1s1);
the ordering of the processes isthe ordering of the processes is
((p1(p2*(p3)))*p1(p2*(p3)))*
What’s wrong with busy waitingWhat’s wrong with busy waiting
♥Wastes cpu time by waiting
♥Side effects:
♦Two processes with different priorities arrive
at their critical section in an order inverse to
their priorities
♦The higher priority process gets time-slices
♦The lower priority process cannot complete its
processing of its critical section and leave !
Priority Inversion
Semaforos Binarios
 Los semaforos que hemos estudiado son
llamados contadores o enteros.
 Tenemos tambien semáforos binarios.
– Similar a los anteriores solo que count tiene valor
boolean
Spinlocks
 Son semáforos enteros que usan busy waiting,
en lugar de blocking.
 Util sobre multiprocesadores …..
 Se gasta tiempo de CPU pero salvamos switch
entre procesos
wait(S): S--;
while S< 0 do{}
signal(S): S++;
Problemas Clásicos.
Sincronización
 Bounded- Buffer
 Readers and Writers
 Dining - philosophers
Bounded - Buffer
N :buffer de un items cada uno.
mutex :semáforo inicializado en 1.
Full : semáforo inicializado en 0. (contador)
Empty : semáforo inicializado en N. (contador)
La estructura del proceso
Productor
while (TRUE) { (Obs: el productor por Empty >0
produce item; para poder anadir items.
wait(Empty);
wait(mutex);
añade item al buffer;
signal(mutex);
signal(Full);
}
Bounded- Buffer (cont)
La estructura del proceso
consumidor
while (TRUE) { (Obs: El consumidor espera por Full>0)
wait(Full);
wait(mutex);
remueve item del buffer;
signal(mutex);
signal(Empty);
consume item;
}
Readers - Writers
Data es compartida entre diferentes procesos concurrentes.
Lectores: leen solamente. No ejecutan modificaciones.
Escritores: leen y escriben
Problema: permitir múltiples lectores pero solamente un escritor.
Procesos lectores nunca esperan a menos que un escritor esté en su
sección crítica.
Data compartida
Conjunto de datos.
mutex :semáforo inicializado en 1.
wrt : semáforo inicializado en 1.
readcount : entero inicializado 0.
Readers-Writers (cont.)
Writer[1..n]
La estructura del proceso
escritor
while (TRUE) {
wait(wrt);
escribo;
signal(wrt);
}
Readers-Writers (cont.)
La estructura del proceso. Reader[1..m]
lector
while (TRUE) {
wait(mutex);
readcount++;
if (readcount == 1) wait(wrt);
signal(mutex);
ejecuta lectura;
wait(mutex);
readcount-- ;
if (readcount == 0) signal(wrt);
signal(mutex);
}
Dining Philosophers
Clásico
Problema
de
Sincroniza
ción.
Datos compartidos
1 bowl de Rice
semaforos tenedor[5]
inicializado 1
1 semaforo
5
4
3
Problema
 Cada filósofo es un proceso.
 Un semáforo por tenedor
fork: array[0..4] of semáfores.
Para todo i inicializar fork[i].count=1
Filósofos - Solución
Process Pi
repeat
think;
wait(fork[i]);
wait(fork[(i+1) mod 5]);
eat;
signal(fork[(i+1) mod 5]);
signal(fork[i]);
until false
Problema : Deadlock
Filósofos - Solución
#define N 5
#define RIGHT(i) (((i)+1) %N)
#define LEFT(i) (((i)== N) ? 0 : (i)+1)
Typedef enum { THINKING, HUNGRY, EATING } phil_state;
phil_state state [N] ;
Semaphore mutex = 1;
Semaphore s [N] ;
void test (int i) {
if (state [i] == HUNGRY &&
state [LEFT(i)] != EATING &&
state [RIGHT(i)] != EATING ) { state [i] == EATING; signal(s[i]); }
}
void get_forks(int i) {
wait(mutex);
state [i] == HUNGRY;
test(i);
signal(mutex);
wait(s[i]);
}
Filósofos – Solución (cont.)
void put_forks(int i) {
wait(mutex);
state [i] == THINKING;
test(LEFT(i));
test(RIGHT(i));
signal(mutex);
}
void philosopher(int i) {
while(1) {
think();
get_forks(process);
eat();
put_forks(process);
}
}
Problemas con Semáforos
 Semáforos son herramientas poderosas para
exclusión mutua y coordinación de procesos.
 Difícil entender sus efectos cuando los wait(S) y
signal(S) están esparcidos entre varios
procesadores.
 Uso debe ser correcto en todos los
procesadores. Es fácil cometer errores en la
programación de los semáforos
 El tiempo durante el cual un proceso está
bloqueado en un semáforo no está limitado.

Más contenido relacionado

La actualidad más candente

Electrónica digital: maquinas de estado con VHDL
Electrónica digital: maquinas de estado con VHDLElectrónica digital: maquinas de estado con VHDL
Electrónica digital: maquinas de estado con VHDLSANTIAGO PABLO ALBERTO
 
Ejemplos De Timer E Interrupcion
Ejemplos De Timer E InterrupcionEjemplos De Timer E Interrupcion
Ejemplos De Timer E InterrupcionLuis Zurita
 
Guía de ejercicios resueltos y propuestos tema 4
Guía de ejercicios resueltos y propuestos tema 4Guía de ejercicios resueltos y propuestos tema 4
Guía de ejercicios resueltos y propuestos tema 4Luis Zurita
 
Disparo de los Flip Flop
Disparo de los Flip FlopDisparo de los Flip Flop
Disparo de los Flip FlopCesia Rebeca
 
Proyecto no7
Proyecto no7Proyecto no7
Proyecto no7andrevmd
 
Principios de Diseño Lógico Secuencial
Principios de Diseño Lógico Secuencial Principios de Diseño Lógico Secuencial
Principios de Diseño Lógico Secuencial Luoren Centeno
 
Circuitos secuenciales ejemplos
Circuitos secuenciales ejemplosCircuitos secuenciales ejemplos
Circuitos secuenciales ejemplosLuis Sanchez
 
Examen 4 intensivo micro
Examen 4 intensivo microExamen 4 intensivo micro
Examen 4 intensivo microLuis Zurita
 
Informe Practico (proyecto)
Informe  Practico (proyecto)Informe  Practico (proyecto)
Informe Practico (proyecto)Angel D Garcia P
 
Unidad1 sd2
Unidad1 sd2Unidad1 sd2
Unidad1 sd2haibsel
 
circuitos digitales secuenciales
circuitos digitales secuenciales circuitos digitales secuenciales
circuitos digitales secuenciales maxijose
 
Lógica secuencial asignatura electrónica digital para ingeniería electromecánica
Lógica secuencial asignatura electrónica digital para ingeniería electromecánicaLógica secuencial asignatura electrónica digital para ingeniería electromecánica
Lógica secuencial asignatura electrónica digital para ingeniería electromecánicaIsrael Magaña
 

La actualidad más candente (20)

Electrónica digital: maquinas de estado con VHDL
Electrónica digital: maquinas de estado con VHDLElectrónica digital: maquinas de estado con VHDL
Electrónica digital: maquinas de estado con VHDL
 
CONTADORES
CONTADORES CONTADORES
CONTADORES
 
C ircuitosintegrados
C ircuitosintegradosC ircuitosintegrados
C ircuitosintegrados
 
Ejemplos De Timer E Interrupcion
Ejemplos De Timer E InterrupcionEjemplos De Timer E Interrupcion
Ejemplos De Timer E Interrupcion
 
electronica digital
electronica digitalelectronica digital
electronica digital
 
Guía de ejercicios resueltos y propuestos tema 4
Guía de ejercicios resueltos y propuestos tema 4Guía de ejercicios resueltos y propuestos tema 4
Guía de ejercicios resueltos y propuestos tema 4
 
Disparo de los Flip Flop
Disparo de los Flip FlopDisparo de los Flip Flop
Disparo de los Flip Flop
 
Trabajo sobre Flip Flop
Trabajo sobre Flip FlopTrabajo sobre Flip Flop
Trabajo sobre Flip Flop
 
Proyecto no7
Proyecto no7Proyecto no7
Proyecto no7
 
ciruitos digitales
ciruitos digitalesciruitos digitales
ciruitos digitales
 
Trabajo flip flop
Trabajo flip flopTrabajo flip flop
Trabajo flip flop
 
Logica secuencial
Logica secuencialLogica secuencial
Logica secuencial
 
Principios de Diseño Lógico Secuencial
Principios de Diseño Lógico Secuencial Principios de Diseño Lógico Secuencial
Principios de Diseño Lógico Secuencial
 
Circuitos secuenciales ejemplos
Circuitos secuenciales ejemplosCircuitos secuenciales ejemplos
Circuitos secuenciales ejemplos
 
Examen 4 intensivo micro
Examen 4 intensivo microExamen 4 intensivo micro
Examen 4 intensivo micro
 
Informe Practico (proyecto)
Informe  Practico (proyecto)Informe  Practico (proyecto)
Informe Practico (proyecto)
 
Diseño de controladores con aplicación flip flop
Diseño de controladores con aplicación flip flopDiseño de controladores con aplicación flip flop
Diseño de controladores con aplicación flip flop
 
Unidad1 sd2
Unidad1 sd2Unidad1 sd2
Unidad1 sd2
 
circuitos digitales secuenciales
circuitos digitales secuenciales circuitos digitales secuenciales
circuitos digitales secuenciales
 
Lógica secuencial asignatura electrónica digital para ingeniería electromecánica
Lógica secuencial asignatura electrónica digital para ingeniería electromecánicaLógica secuencial asignatura electrónica digital para ingeniería electromecánica
Lógica secuencial asignatura electrónica digital para ingeniería electromecánica
 

Similar a Semaforos

Blog
BlogBlog
Blogdgzz
 
Blog
BlogBlog
Blogdgzz
 
So 07-concurrencia-6x1
So 07-concurrencia-6x1So 07-concurrencia-6x1
So 07-concurrencia-6x1DIEGODIEGO23
 
2.4 concepto-de-semaforo-exclusion-mutua-y-seccion-critica
2.4 concepto-de-semaforo-exclusion-mutua-y-seccion-critica2.4 concepto-de-semaforo-exclusion-mutua-y-seccion-critica
2.4 concepto-de-semaforo-exclusion-mutua-y-seccion-criticalupita zume
 
Programacion concurrente
Programacion concurrenteProgramacion concurrente
Programacion concurrentepuracastillo
 
PLC: Sistemas lógicos y secuenciales
PLC: Sistemas lógicos y secuenciales PLC: Sistemas lógicos y secuenciales
PLC: Sistemas lógicos y secuenciales SANTIAGO PABLO ALBERTO
 
documento de ingieneria electronica .pdf
documento de ingieneria electronica .pdfdocumento de ingieneria electronica .pdf
documento de ingieneria electronica .pdfsergioandresrinconca1
 
PROGRAMACIÓN DE PLCS: LENGUAJE ESCALERA
PROGRAMACIÓN DE PLCS: LENGUAJE ESCALERA PROGRAMACIÓN DE PLCS: LENGUAJE ESCALERA
PROGRAMACIÓN DE PLCS: LENGUAJE ESCALERA EquipoSCADA
 
Analisis Clase2
Analisis  Clase2Analisis  Clase2
Analisis Clase2luzenith_g
 
Electrónica digital: Maquina de estado finito
Electrónica digital: Maquina de estado finito Electrónica digital: Maquina de estado finito
Electrónica digital: Maquina de estado finito SANTIAGO PABLO ALBERTO
 
ARDUINO - GRAFCET - IMPLEMENTACIÓN DE LA METODOLOGÍA PARA TRADUCIR AL ...
ARDUINO  - GRAFCET  -  IMPLEMENTACIÓN   DE LA  METODOLOGÍA PARA TRADUCIR  AL ...ARDUINO  - GRAFCET  -  IMPLEMENTACIÓN   DE LA  METODOLOGÍA PARA TRADUCIR  AL ...
ARDUINO - GRAFCET - IMPLEMENTACIÓN DE LA METODOLOGÍA PARA TRADUCIR AL ...Jovanny Duque
 
T02_GRAFCET metodologia de diseño secuencial.pdf
T02_GRAFCET metodologia de diseño secuencial.pdfT02_GRAFCET metodologia de diseño secuencial.pdf
T02_GRAFCET metodologia de diseño secuencial.pdfssuserba269c
 
Estructura bassicas (1)
Estructura bassicas (1)Estructura bassicas (1)
Estructura bassicas (1)gabyeb1
 
Sistemas de primer orden, segundo orden y orden superior.
Sistemas de primer orden,  segundo orden y orden superior.Sistemas de primer orden,  segundo orden y orden superior.
Sistemas de primer orden, segundo orden y orden superior.ReiberArias
 

Similar a Semaforos (20)

Blog
BlogBlog
Blog
 
Blog
BlogBlog
Blog
 
Práctica04.Programando Arduino
Práctica04.Programando ArduinoPráctica04.Programando Arduino
Práctica04.Programando Arduino
 
So 07-concurrencia-6x1
So 07-concurrencia-6x1So 07-concurrencia-6x1
So 07-concurrencia-6x1
 
17961921.ppt
17961921.ppt17961921.ppt
17961921.ppt
 
2.4 concepto-de-semaforo-exclusion-mutua-y-seccion-critica
2.4 concepto-de-semaforo-exclusion-mutua-y-seccion-critica2.4 concepto-de-semaforo-exclusion-mutua-y-seccion-critica
2.4 concepto-de-semaforo-exclusion-mutua-y-seccion-critica
 
Programacion concurrente
Programacion concurrenteProgramacion concurrente
Programacion concurrente
 
PLC: Sistemas lógicos y secuenciales
PLC: Sistemas lógicos y secuenciales PLC: Sistemas lógicos y secuenciales
PLC: Sistemas lógicos y secuenciales
 
10 registros
10 registros10 registros
10 registros
 
documento de ingieneria electronica .pdf
documento de ingieneria electronica .pdfdocumento de ingieneria electronica .pdf
documento de ingieneria electronica .pdf
 
SIMATIC S7
SIMATIC S7SIMATIC S7
SIMATIC S7
 
Monitores
MonitoresMonitores
Monitores
 
PROGRAMACIÓN DE PLCS: LENGUAJE ESCALERA
PROGRAMACIÓN DE PLCS: LENGUAJE ESCALERA PROGRAMACIÓN DE PLCS: LENGUAJE ESCALERA
PROGRAMACIÓN DE PLCS: LENGUAJE ESCALERA
 
Analisis Clase2
Analisis  Clase2Analisis  Clase2
Analisis Clase2
 
Electrónica digital: Maquina de estado finito
Electrónica digital: Maquina de estado finito Electrónica digital: Maquina de estado finito
Electrónica digital: Maquina de estado finito
 
ARDUINO - GRAFCET - IMPLEMENTACIÓN DE LA METODOLOGÍA PARA TRADUCIR AL ...
ARDUINO  - GRAFCET  -  IMPLEMENTACIÓN   DE LA  METODOLOGÍA PARA TRADUCIR  AL ...ARDUINO  - GRAFCET  -  IMPLEMENTACIÓN   DE LA  METODOLOGÍA PARA TRADUCIR  AL ...
ARDUINO - GRAFCET - IMPLEMENTACIÓN DE LA METODOLOGÍA PARA TRADUCIR AL ...
 
T02_GRAFCET metodologia de diseño secuencial.pdf
T02_GRAFCET metodologia de diseño secuencial.pdfT02_GRAFCET metodologia de diseño secuencial.pdf
T02_GRAFCET metodologia de diseño secuencial.pdf
 
Estructura bassicas (1)
Estructura bassicas (1)Estructura bassicas (1)
Estructura bassicas (1)
 
Automatas
AutomatasAutomatas
Automatas
 
Sistemas de primer orden, segundo orden y orden superior.
Sistemas de primer orden,  segundo orden y orden superior.Sistemas de primer orden,  segundo orden y orden superior.
Sistemas de primer orden, segundo orden y orden superior.
 

Más de David Lilue

Más de David Lilue (11)

Principios de diseño de Interfaces
Principios de diseño de InterfacesPrincipios de diseño de Interfaces
Principios de diseño de Interfaces
 
Historia de las Interfaces
Historia de las InterfacesHistoria de las Interfaces
Historia de las Interfaces
 
Memoria2
Memoria2Memoria2
Memoria2
 
Filesystem2
Filesystem2Filesystem2
Filesystem2
 
Disco
DiscoDisco
Disco
 
Memvirtual
MemvirtualMemvirtual
Memvirtual
 
Sincronizacion Procesos
Sincronizacion ProcesosSincronizacion Procesos
Sincronizacion Procesos
 
Planificacion
PlanificacionPlanificacion
Planificacion
 
Thread
ThreadThread
Thread
 
Proceso
ProcesoProceso
Proceso
 
Deadlock
DeadlockDeadlock
Deadlock
 

Semaforos

  • 2. Conceptos  Herramienta de sincronización (provista por el SO).  Un semáforo S es una variable de tipo entero, que además de ser inicializada.  Puede ser accedida a través de dos operaciones atómicas y mutuamente excluyentes – wait(S) o P(S) o down(S) – signal(S) o V(S) o up(S)  Para evitar busy-waiting, cuando un procesos tiene que esperar, se pondra en una cola de procesos bloqueados esperando un evento.
  • 3. Conceptos  Semáforo puede ser implementado como una estructura con dos campos – count : integer – queue: list of processes  Cuando un proceso debe esperar por un semáforo S, el es bloqueado (block() ) y colocado en la cola del semaforo.  La operación de signal remueve (wakeup() )un proceso desde la cola y lo coloca en la lista de procesos ready.
  • 4. Semáforos binarios y semáforos generales • Semáforo binario – Solo puede tener dos valores, 0 y 1, y es la forma más común de semáforo. • Semáforo general – Son semáforos que pueden tomar muchos valores positivos.
  • 5. Semáforos type semaphore = record count: integer; queue: list of process end; var S: semaphore; • Cuando un proceso debe esperar a un semáforo S, se bloquea y se pone en la cola del semáforo S. • La operación signal quita (con la política FIFO) un proceso de la cola y lo pone en la cola de procesos listos.
  • 6. Observaciones de Semaforos (Negativos) • Si S.count >=0 – El número de procesos que pueden ejecutar wait(S) sin que se bloqueen = S.count • Si S.count<0 – el número de procesos que están esperando en S es = S.count|
  • 7. Semáforos sin busy-waiting wait(S): S.count- -; if (S.count < 0) { colocar este proceso en S.queue block este proceso (block), o sleep el proceso { signal(S): S.count++; if (S.count < = 0){ remover el proceso de la cola colocar este proceso en lista de ready (wakeup(P)) } La magnitud del valor negativo es el numero de procesos en waiting.
  • 8. Operaciones  Atomicidad y exclusión mutua implica que dos procesos NO pueden estar en wait(S) y signal(S) al mismo tiempo sobre el mismo S.  Los bloques de código definidos por wait (S) y signal (S) son secciones críticas.  Las secciones críticas definidas por wait (S) y signal (S) son muy cortas, típicamente 10 instrucciones.
  • 9. Exclusión Mutua  N procesos. S inicializado en 1.  Un solo proceso le es permitido entrar en la SC.  Proceso Pi: repeat wait(S) SC signal(S) RS until false
  • 10. Sincronización  Sea P1 y P2 dos procesos. La instr. S1 de P1 necesita ser ejecutada antes que la instr. S2 de P2.  Definimos un semáforo synch, el cual inicializamos en cero. synch=0  La sincronización la obtenemos P1: S1; signal(synch); P2: wait(synch); S2;
  • 11. Synchronizing with SemaphoresSynchronizing with Semaphores ♥Mutual Exclusion:Mutual Exclusion: wait(mutex); critical section signal(mutex); ♥Synchronization:Synchronization: requirement: S2 executed after S1 is completed Synch = 0 P1: S1; P2: wait(Synch);(Synch); signal(Synch);(Synch); S2;
  • 12. deadlocks with Semaphores...deadlocks with Semaphores... ♥Two processes p0 and p1 ♥Two semaphores QQ and SS p0 : p1: wait(S);(S); wait(Q);wait(Q); wait(Q);wait(Q); wait(S);wait(S); …….. …..….. signal(S);signal(S); signal(Q);signal(Q); signal(Q);signal(Q); signal(S);signal(S); ♥ p0 does the first line, then p1 and so on...
  • 13. More on Synchronization...More on Synchronization... Three processes p1; p2; p3 semaphores s1 = 1, s2 = 0s1 = 1, s2 = 0; p1p1 p2p2 p3p3 wait(s1s1); wait(s2s2); wait(s2s2); .. code .. .. code .. .. code .. signal(s2s2); signal(s2s2); signal(s1s1); the ordering of the processes isthe ordering of the processes is ((p1(p2*(p3)))*p1(p2*(p3)))*
  • 14. What’s wrong with busy waitingWhat’s wrong with busy waiting ♥Wastes cpu time by waiting ♥Side effects: ♦Two processes with different priorities arrive at their critical section in an order inverse to their priorities ♦The higher priority process gets time-slices ♦The lower priority process cannot complete its processing of its critical section and leave ! Priority Inversion
  • 15. Semaforos Binarios  Los semaforos que hemos estudiado son llamados contadores o enteros.  Tenemos tambien semáforos binarios. – Similar a los anteriores solo que count tiene valor boolean
  • 16. Spinlocks  Son semáforos enteros que usan busy waiting, en lugar de blocking.  Util sobre multiprocesadores …..  Se gasta tiempo de CPU pero salvamos switch entre procesos wait(S): S--; while S< 0 do{} signal(S): S++;
  • 17. Problemas Clásicos. Sincronización  Bounded- Buffer  Readers and Writers  Dining - philosophers
  • 18. Bounded - Buffer N :buffer de un items cada uno. mutex :semáforo inicializado en 1. Full : semáforo inicializado en 0. (contador) Empty : semáforo inicializado en N. (contador) La estructura del proceso Productor while (TRUE) { (Obs: el productor por Empty >0 produce item; para poder anadir items. wait(Empty); wait(mutex); añade item al buffer; signal(mutex); signal(Full); }
  • 19. Bounded- Buffer (cont) La estructura del proceso consumidor while (TRUE) { (Obs: El consumidor espera por Full>0) wait(Full); wait(mutex); remueve item del buffer; signal(mutex); signal(Empty); consume item; }
  • 20. Readers - Writers Data es compartida entre diferentes procesos concurrentes. Lectores: leen solamente. No ejecutan modificaciones. Escritores: leen y escriben Problema: permitir múltiples lectores pero solamente un escritor. Procesos lectores nunca esperan a menos que un escritor esté en su sección crítica. Data compartida Conjunto de datos. mutex :semáforo inicializado en 1. wrt : semáforo inicializado en 1. readcount : entero inicializado 0.
  • 21. Readers-Writers (cont.) Writer[1..n] La estructura del proceso escritor while (TRUE) { wait(wrt); escribo; signal(wrt); }
  • 22. Readers-Writers (cont.) La estructura del proceso. Reader[1..m] lector while (TRUE) { wait(mutex); readcount++; if (readcount == 1) wait(wrt); signal(mutex); ejecuta lectura; wait(mutex); readcount-- ; if (readcount == 0) signal(wrt); signal(mutex); }
  • 23. Dining Philosophers Clásico Problema de Sincroniza ción. Datos compartidos 1 bowl de Rice semaforos tenedor[5] inicializado 1 1 semaforo 5 4 3
  • 24. Problema  Cada filósofo es un proceso.  Un semáforo por tenedor fork: array[0..4] of semáfores. Para todo i inicializar fork[i].count=1
  • 25. Filósofos - Solución Process Pi repeat think; wait(fork[i]); wait(fork[(i+1) mod 5]); eat; signal(fork[(i+1) mod 5]); signal(fork[i]); until false Problema : Deadlock
  • 26. Filósofos - Solución #define N 5 #define RIGHT(i) (((i)+1) %N) #define LEFT(i) (((i)== N) ? 0 : (i)+1) Typedef enum { THINKING, HUNGRY, EATING } phil_state; phil_state state [N] ; Semaphore mutex = 1; Semaphore s [N] ; void test (int i) { if (state [i] == HUNGRY && state [LEFT(i)] != EATING && state [RIGHT(i)] != EATING ) { state [i] == EATING; signal(s[i]); } } void get_forks(int i) { wait(mutex); state [i] == HUNGRY; test(i); signal(mutex); wait(s[i]); }
  • 27. Filósofos – Solución (cont.) void put_forks(int i) { wait(mutex); state [i] == THINKING; test(LEFT(i)); test(RIGHT(i)); signal(mutex); } void philosopher(int i) { while(1) { think(); get_forks(process); eat(); put_forks(process); } }
  • 28. Problemas con Semáforos  Semáforos son herramientas poderosas para exclusión mutua y coordinación de procesos.  Difícil entender sus efectos cuando los wait(S) y signal(S) están esparcidos entre varios procesadores.  Uso debe ser correcto en todos los procesadores. Es fácil cometer errores en la programación de los semáforos  El tiempo durante el cual un proceso está bloqueado en un semáforo no está limitado.