Video Capítulo 7: Sincronização de Processos
Silberschatz, Galvin and Gagne Video Operating System Concepts Assuntos n Cenário n O problema da secção crítica n Hardware de sincronização n Semáfaro n Problemas clássicos de sincronização n Regiões críticas n Monitores
Silberschatz, Galvin and Gagne Video Operating System Concepts Cenário n Acesso concorrente a dados F Inconsistência n Manutenção da consistência F Mecanismos para ordenar execução de processos concorrentes n Exemplo: produtor/consumidor F Usando todo o buffer F Adiciona-se uma variável “counter” que dá o número de elementos no buffer
Silberschatz, Galvin and Gagne Video Operating System Concepts Armazenamento Limitado Dados compartilhados: #define BUFFER_SIZE 10 typedef struct {... } item; item buffer[BUFFER_SIZE]; int in = 0; int out = 0; int counter = 0;
Silberschatz, Galvin and Gagne Video Operating System Concepts Armazenamento Limitado Processo Produtor: item nextProduced; while (1) { while (counter == BUFFER_SIZE) ; /* do nothing */ buffer[in] = nextProduced; in = (in + 1) % BUFFER_SIZE; counter++; }
Silberschatz, Galvin and Gagne Video Operating System Concepts Armazenamento Limitado Processo Consumidor: item nextConsumed; while (1) { while (counter == 0) ; /* do nothing */ nextConsumed = buffer[out]; out = (out + 1) % BUFFER_SIZE; counter--; }
Silberschatz, Galvin and Gagne Video Operating System Concepts Armazenamento Limitado n As seguintes operações tem de ser atômicas counter++; counter--; n Uma operação é atômica se ela é executada inteiramente sem ser interrompida
Silberschatz, Galvin and Gagne Video Operating System Concepts Armazenamento Limitado n Em linguagem de máquina, as operações são implementadas da seguinte forma counter--; reg2 = counter reg2 = reg2 – 1 counter = reg2 counter++; reg1 = counter reg1 = reg1 + 1 counter = reg1
Silberschatz, Galvin and Gagne Video Operating System Concepts Armazenamento Limitado n Se ambos produtor e consumidor acessarem o contador simulaneamente, as instruções em linguagem de máquina podem se misturar n A ordem da mistura depende do escalonamento dos processos produtor e consumidor
Silberschatz, Galvin and Gagne Video Operating System Concepts Armazenamento Limitado n Assuma que counter = 5 F Counter pode ser 4 ou 6 F Valor correto: 5 produtor: reg1 = counter (reg1 = 5) produtor: reg1 = reg1 +1 (reg1 = 6) consumidor:reg2 = counter (reg2 = 5) consumidor:reg2 = reg2 –1 (reg2 = 4) produtor: counter = reg1 (counter = 6) consumidor:counter = reg2 (counter = 4)
Silberschatz, Galvin and Gagne Video Operating System Concepts Condições de Corrida n Resultado da operação depende da ordem de execução dos processos n Pare prevení-las, processos concorrentes tem de ser sincronizados
Silberschatz, Galvin and Gagne Video Operating System Concepts O Problema da Secção Crítica n Processos competindo pelo uso dos mesmos dados n Em cada processo uma parte do código faz o acesso aos dados compartilhados F Secção crítica n Problema: F Apenas um processo pode executar sua secção crítica por vez
Silberschatz, Galvin and Gagne Video Operating System Concepts Características da Solução n Exclusão mútua n Progresso n Espera limitada
Silberschatz, Galvin and Gagne Video Operating System Concepts Exclusão Mútua n Se um processo está executando sua secção crítica, nenhum outro pode estar também dentro de sua secção crítica (mesmo se nas filas de espera ou prontos)
Silberschatz, Galvin and Gagne Video Operating System Concepts Progresso n Se não há nenhum processo na secção crítica, um processo que deseje entrar em sua secção crítica não pode esperar indefinidamente
Silberschatz, Galvin and Gagne Video Operating System Concepts Espera Limitada n Se um processo pediu para entrar em sua secção crítica, existe um limite do número de vezes que outros processos entrem em sua (própria) região crítica antes que este consiga fazê-lo
Silberschatz, Galvin and Gagne Video Operating System Concepts Tentando Resolver... n Dois processos P0 e P1 n Estrutura dos processos do { entry section critical section exit section reminder section } while (1); n Processos compartilham variáveis para sincronização
Silberschatz, Galvin and Gagne Video Operating System Concepts Algoritmo 1 n Variáveis compartilhadas F int turn; inicialmente turn = 0 F turn - i P i entra na secção crítica n Processo P i do { while (turn != i) ; critical section turn = j; reminder section } while (1); n Satisfaz exclusão mútua, mas não progresso
Silberschatz, Galvin and Gagne Video Operating System Concepts Algoritmo 2 n Variáveis compartilhadas F boolean flag[2]; inicialmente flag [0] = flag [1] = false. F flag [i] = true P i pronto para entrar na região crítica
Silberschatz, Galvin and Gagne Video Operating System Concepts Algoritmo 2 Processo P i do { flag[i] := true; while (flag[j]) ; critical section flag [i] = false; remainder section } while (1); n Satisfaz exclusão mútua, mas não progresso
Silberschatz, Galvin and Gagne Video Operating System Concepts Algorítmo 3 n Combinação de 1 e 2 n Processo P i do { flag [i]:= true; turn = j; while (flag [j] and turn = j) ; critical section flag [i] = false; remainder section } while (1);
Silberschatz, Galvin and Gagne Video Operating System Concepts Algorítmo da Padaria n Cada processo recebe um número n O menor número dá acesso à secção crítica n Variáveis compartilhadas boolean choosing[n]; int number[n];
Silberschatz, Galvin and Gagne Video Operating System Concepts Algorítmo da Padaria do { choosing[i] = true; number[i] = max(number[0],number[1], …, number [n – 1])+1; choosing[i] = false; for (j = 0; j < n; j++) { while (choosing[j]) ; while ((number[j] != 0) && (number[j,j] < number[i,i])) ; } critical section number[i] = 0; remainder section } while (1);
Silberschatz, Galvin and Gagne Video Operating System Concepts Hardware de Sincronização n Testar e modificar atômico boolean TestAndSet(boolean &target) { boolean rv = target; tqrget = true; return rv; }
Silberschatz, Galvin and Gagne Video Operating System Concepts Exclusão mútua com TestAndSet n Variáveis compartilhadas boolean lock = false; n Processo P i do { while (TestAndSet(lock)) ; critical section lock = false; remainder section }
Silberschatz, Galvin and Gagne Video Operating System Concepts Hardware de Sincronização n Troca atômica de duas variáveis void Swap(boolean &a, boolean &b) { boolean temp = a; a = b; b = temp; }
Silberschatz, Galvin and Gagne Video Operating System Concepts Exclusão mútua com SWAP n Variáveis compartilhadas boolean lock; boolean waiting[n]; n Processo P i do { key = true; while (key == true) Swap(lock,key); critical section lock = false; remainder section }
Silberschatz, Galvin and Gagne Video Operating System Concepts Construções para Sincronização n Semáfaros n Regiões Críticas n Monitores
Silberschatz, Galvin and Gagne Video Operating System Concepts Semáfaros n Não requer busy-waiting n Semáfaro S é uma variável inteira n Duas operações atômicas wait (S): while S 0 do no-op; S--; signal (S): S++;
Silberschatz, Galvin and Gagne Video Operating System Concepts Usando Semáfaros Para Região Crítica de Vários Processos n Variáveis compartilhadas semaphore mutex; //mutex = 1 n Processo Pi: do { wait(mutex); critical section signal(mutex); remainder section } while (1);
Silberschatz, Galvin and Gagne Video Operating System Concepts Deadlock & Starvation n Deadlock – dois ou mais processos esperam indefinidamente por um evento que seria gerado por um deles n Starvation – bloqueio indefinido de um processo por outros
Silberschatz, Galvin and Gagne Video Operating System Concepts Problemas Clássicos n Produtor-Consumidor com área limitada n Escritor-Leitor n Filósofos “Jantantes” n Todos podem ser resolvidos por qualquer um dos métodos de sincronia
Silberschatz, Galvin and Gagne Video Operating System Concepts Região Crítica n Variáveis compartilhadas v: shared T n Variável acessível dentro da expressão region v when B do S n Enquanto S está sendo executado, nenhum outro processo pode acessar a variável v
Silberschatz, Galvin and Gagne Video Operating System Concepts Região Crítica n Regiões com a mesma variável são excludentes no tempo n Ao executar o “region”, se a variável B é falsa o processo espera até que seja verdadeiro F Nenhum outro processo está dentro da região crítica
Silberschatz, Galvin and Gagne Video Operating System Concepts Monitores n Permitem o compartilhamento seguro de tipos abstratos monitor monitor-name { shared variable declarations procedure body P1 (…) {... } procedure body P2 (…) {... } procedure body Pn (…) {... } { initialization code }
Silberschatz, Galvin and Gagne Video Operating System Concepts Monitores n São definidas variáveis de condição condition x, y; n Estas só podem ser usadas nas operações wait e signal
Silberschatz, Galvin and Gagne Video Operating System Concepts Visão Esquemática de um Monitor