MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com...

24
Introdu¸c˜ ao Implementa¸c˜ ao com sem´ aforos ultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco Islene Calciolari Garcia Segundo Semestre de 2013

Transcript of MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com...

Page 1: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

MC504/MC514 - Sistemas OperacionaisBarbeiro dorminhoco

Islene Calciolari Garcia

Segundo Semestre de 2013

Page 2: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Sumario

1 Introducao

2 Implementacao com semaforos

3 Multiplos barbeiros

Page 3: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Barbeiro Dorminhoco

Tanenbaum: Figura 1.20

Page 4: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Barbeiro Dorminhoco

Se nao ha clientes, o barbeiro adormece;

Se a cadeira do barbeiro estiver livre, um cliente pode seratendido imediatamente;

O cliente espera pelo barbeiro se houver uma cadeira deespera vazia.

Se nao tive onde sentar, o cliente vai embora...

Page 5: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Cadeiras da sala de espera

Se nao tiver onde sentar, o cliente vai embora...

Esta abordagem funciona?

semaforo cadeiras = 5;wait(cadeiras);

Page 6: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Cadeiras da sala de espera

Esta abordagem funciona?

semaforo cadeiras = 5;if (sem_getvalue(cadeiras) > 0)

wait(cadeiras);

Page 7: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Cadeiras da sala de espera

sem_t mutex;int cadeiras = 5;

wait(mutex);if (cadeiras > 0)

cadeiras--;signal(mutex);entra_na_barbearia();

elsesignal(mutex);desiste_de_cortar_o_cabelo();

Page 8: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Clientes so esperam nas cadeiras

semaforo cadeiras = 5;

if (trywait(cadeiras) == 0)entra_na_barbearia();

elsedesiste_de_cortar_o_cabelo();

Page 9: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Disputa pela cadeira do barbeiro

semaforo cadeiras = 5;semaforo cad_barbeiro = 1;

if (trywait(cadeiras) == 0)wait(cad_barbeiro);

Todo cliente precisa passar pela sala de espera?

Page 10: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Disputa pela cadeira do barbeiro

semaforo cadeiras = 5;semaforo cad_barbeiro = 1;

if (trywait(cad_barbeiro) == 0)if (trywait(cadeiras) == 0)

wait(cad_barbeiro);

Esta abordagem e justa?

Page 11: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Iniciando o corte

semaforo cadeiras = 5;semaforo cad_barbeiro = 1;

if (trywait(cadeiras) == 0)wait(cad_barbeiro);

Como avisar o barbeiro que voce esta esperando?

Page 12: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Iniciando o corte

semaforo cadeiras = 5;semaforo cad_barbeiro = 1;

if (trywait(cadeiras) == 0)wait(cad_barbeiro);

Como avisar o barbeiro que voce esta esperando?

Page 13: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Iniciando o corte

semaforo cadeiras = 5;semaforo cad_barbeiro = 1;semaforo cliente_cadeira = 0;

if (trywait(cadeiras) == 0)wait(cad_barbeiro);signal(cliente_cadeira);

E os outros clientes?

Page 14: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Cortando o cabelo

semaforo cadeiras = 5;semaforo cad_barbeiro = 1;semaforo cliente_cadeira = 0;

if (trywait(cadeiras) == 0)wait(cad_barbeiro);signal(cadeiras);signal(cliente_cadeira);

Quem decide que o corte acabou?

Page 15: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Cliente

if (trywait(cadeiras) == 0)wait(cad_barbeiro);signal(cadeiras);signal(cliente_cadeira);wait(cabelo_cortado);signal(cad_barbeiro);

Page 16: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Barbeiro

semaforo cabelo_cortado = 0;semaforo cliente_cadeira = 0;

while (true)wait(cliente_cadeira);corta_cabelo();signal(cabelo_cortado);

Veja o codigo barbeiro.c

Como implementar um cineminha?

Page 17: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Multiplos Barbeiros Dorminhocos

Page 18: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Multiplos Barbeiros Dorminhocos

Varios semaforos semelhantes ao problema anterior

semaforo cadeiras = N_CADEIRAS_ESPERA;semaforo cad_barbeiro[N_BARBEIROS] =

{0, 0, 0, ..., 0};semaforo cabelo_cortado[N_BARBEIROS] =

{0, 0, 0, ..., 0};semaforo cliente_cadeira[N_BARBEIROS] =

{0, 0, 0, ..., 0};

Page 19: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Multiplos Barbeiros Dorminhocos

O cliente precisa saber qual e o identificador do barbeirodisponıvel.

Problema analogo a fila unica em bancos com painel parachamar os clientes.

Page 20: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Modelando o painel

Variavel para armazenar identificadores:

int painel;

Barbeiros executam escritas:

um barbeiro so pode escrever se o barbeiro anterior ja recebeuum cliente;

Clientes executam leituras:

apenas um cliente pode ser atendido de cada vez.

Como controlar?

Page 21: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Multiplos Barbeiros Dorminhocos

Barbeiros executam escritas:

um barbeiro so pode escrever se o barbeiro anterior ja recebeuum cliente;

Clientes executam leituras:

apenas um cliente pode ser atendido de cada vez.

semaforo escreve_painel = 1;semaforo le_painel = 0;int painel;

Page 22: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Barbeiro

while (true)wait(escreve_painel);painel = id_barbeiro;signal(le_painel);wait(cliente_cadeira[id_barbeiro]);corta_cabelo();signal(cabelo_cortado[id_barbeiro]);

Page 23: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Cliente

if (trywait(cadeiras) == 0)signal(cadeiras);wait(le_painel);minha_cadeira = painel;signal(escreve_painel);wait(cad_barbeiro[minha_cadeira]);signal(cliente_cadeira[minha_cadeira]);wait(cabelo_cortado[minha_cadeira]);signal(cad_barbeiro[minha_cadeira]);

Podemos eliminar cad barbeiro?

Page 24: MC504/MC514 - Sistemas Operacionaisislene/2s2013-mc514/barbeiro/...Introdu˘c~aoImplementa˘c~ao com sem aforosMultiplos barbeiros MC504/MC514 - Sistemas Operacionais Barbeiro dorminhoco

Introducao Implementacao com semaforos Multiplos barbeiros

Multiplos Barbeiros Dorminhocos

Como implementar um cineminha?

Como voce implementaria este problema utilizando locks evariaveis de condicao?