23
Semáforos Variáveis compartilhadas são globais Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa Exige consulta a todo o programa para entender como as variáveis compartilhadas são usadas A cada novo processo, é preciso verificar se ele usa as variáveis corretamente Mesma estrutura é usada para exclusão mútua e sincronização de condição

Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Embed Size (px)

Citation preview

Page 1: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Semáforos

Variáveis compartilhadas são globais Acesso a variáveis ocorre em procedimentos,

mas podem estar espalhados pelo programa Exige consulta a todo o programa para

entender como as variáveis compartilhadas são usadas

A cada novo processo, é preciso verificar se ele usa as variáveis corretamente

Mesma estrutura é usada para exclusão mútua e sincronização de condição

Page 2: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Modularização ADT – Abstract Data type

Abstração de dados: esconde a representação de dados

Dados são manipulados apenas pelas operações disponibilizadas pelo tipo de dados

Concentra dados e operações em um único lugar

Permite que a implementação seja modificada, desde que a interface e funcionamento continuem os mesmos.

Page 3: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Monitores

Utilizam o coceito de ADT Processos interagem apenas através de

chamadas aos procedimentos do monitor Modularização abstrai os processos da

implementação do procedimento Permite ignorar como e onde os

procedimentos do monitor são usados: o monitor estará correto independentemente do número de processos que o utilizam.

Page 4: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Monitores Podem ser implementados eficientemente Exclusão mútua implícita entre

procedimentos do monitor Variáveis de condição são usadas para

sincronização de condição Permite o desenvolvimento por equipes

independentes dos processos e monitores Facilita o desenvolvimento e entendimento

dos programas concorrentes

Page 5: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Produtor-Consumidor monitor Producer_Consumer_Monitor {

int B [0..N-1];int In_Ptr = 0; int Out_Ptr = 0;int Count = 0;Condition Not_Full, Not_Empty;void Append(int I) { while (Count == N) {wait(Not_Full)}; B [In_Ptr] = I; Count = Count + 1; In_Ptr = (In_Ptr + 1) % N; signal(Not_Empty);}

Page 6: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Produtor-Consumidor

void Take(int I) { while (Count == 0) {wait(Not_Empty)}; I = B[Out_Ptr]; Count = Count - 1; Out_Ptr = (Out_Ptr + 1) % N; signal(Not_Full);}}

Page 7: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Produtor-Consumidor

Producer () { int I; while (TRUE) { Produce(I); Append(I); }}

Consumer { int I; while (TRUE) { Take(I); Consume(I); } }

Page 8: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Diferenças

3 Semáforos Um para exclusão mútua, e dois

(Not_empty e Not_Full) para sincronização Monitores:

exclusão mútua: implícita entre os procedimentos do monitor

sincronização: através de variáveis de condição

Page 9: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Operações sobre Variáveis de Condição wait(C)

suspende processo em uma fila FIFO associada a C, e libera a exclusão mútua.

signal(C) se a fila de C não está vazia, acorda o

processo no início da fila, caso contrário não faz nada.

empty(C) true se a fila de C está vazia

Page 10: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Operações sobre Variáveis de Condição wait(C,rank)

Semelhante ao wait, mas processos são acordados em ordem crescente de rank

minrank(C) Retorna o rank do primeiro processo da

fila Signal_all(C)

Acorda todos os processos suspensos em C

Page 11: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Shortest-job-next monitor ShortestJobNext {

BOOL free = TRUE;Condition turn;void request (int time) { if (free) {free = FALSE} else {wait(turn, time)};}void release () { if (empty(turn)) {free = TRUE;} else {signal(turn);};}

Page 12: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Revendo o problema dos Leitores e Escritores Leitores não precisam se excluir

mutuamente Escritores precisam excluir todos os

outros processos

Page 13: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Leitores e Escritores

Reader () { while (TRUE) { Start_Read; Read_the_Data; End_Read; }}

Writer () { while (TRUE) { Start_Write; Write_the_Data; End_Write; }}

Page 14: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Monitor

Variáveis de status Readers

# de leitores lendo

Writing true quando o processo está escrevendo

Variáveis de condição OK_to_Read OK_to_Write

Page 15: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Monitor Monitor Reader_Writer_Monitor {

int Readers = 0;BOOL Writing = False;Condition OK_to_Read, OK_to_Write;

void Start_Read { while (Writing) {wait(OK_to_Read);}; Readers = Readers + 1;}

void End_Read { Readers = Readers - 1; if (Readers==0) {signal(OK_to_Write);};}

Page 16: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Monitor void Start_Write {

if (Readers > 0 || Writing) {wait(OK_to_Write);}; Writing = True;}

void End_Write { Writing := False; signal(OK_to_Write); signal_all(OK_to_Read);}}

Page 17: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Emulação de semáforos por monitores monitor Semaphore_Emulation {

int S = 0;Condition Not_Zero;procedure P { while (S==0) {wait(Not_Zero);}; S = S - 1;}procedure V { S = S + 1; signal(Not_Zero);}}

Page 18: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Emulação de semáforos por monitores (2) monitor Semaphore_Emulation {

int S = 0;Condition Not_Zero;procedure P { if (S > 0) {S = S – 1;} else {wait(Not_Zero);};}procedure V { if (empty(Not_Zero) {S = S + 1} else {signal(Not_Zero)};}}

Page 19: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

O Problema do barbeiro que dorme Semelhante a problemas de

escalonamento de disco Relacionamento cliente-servidor rendezvous

Page 20: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

O Problema do barbeiro que dorme Barbearia com duas portas (entrada e

saída) e algumas cadeiras (espera) Barbeiro atende um cliente de cada vez Se faltam clientes, o barbeiro dorme Se um cliente chega, ele acorda o

barbeiro para que corte seu cabelo Cliente dorme nas cadeiras de espera

se o barbeiro está ocupado

Page 21: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

O Problema do barbeiro que dorme Clientes e barbeiros são processos Barbearia é o monitor Relação cliente/servidor(barbeiro)

Page 22: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Procedimentos do monitor

get_haircut get_next_custumer finished_cut

Page 23: Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta

Leitores e Escritores

Reader () { while (TRUE) { Start_Read; Read_the_Data; End_Read; }}

Writer () { while (TRUE) { Start_Write; Write_the_Data; End_Write; }}