A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo.

Apresentações semelhantes


Apresentação em tema: "Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo."— Transcrição da apresentação:

1 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo

2 6.2 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Capítulo 6: Sincronismo de processo  Base  O problema da seção crítica  Solução de Peterson  Hardware de sincronismo  Semáforos  Problemas clássicos de sincronismo  Monitores  Exemplos de sincronismo  Transações indivisíveis

3 6.3 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Base  Acesso concorrente aos dados compartilhados pode resultar em inconsistência de dados  Manutenção da consistência dos dados requer mecanismos para garantir a execução ordenada dos processos em cooperação  Suponha que queiramos oferecer uma solução para um problema de consumidor-produtor que preencha todos os buffers. Podemos fazer isso com um contador inteiro que acompanha o número de buffers cheios. Inicialmente, o contador é definido como 0. Ele é incrementado pelo produtor depois de produzir um novo buffer e é decrementado pelo consumidor depois de consumir um buffer.

4 6.4 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Produtor

5 6.5 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Consumidor

6 6.6 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Condição de race  count++ poderia ser implementado como register1 = count register1 = register1 + 1 count = register1  count-- poderia ser implementado como register2 = count register2 = register2 - 1 count = register2  Considere esta execução intercalando com “count = 5” inicialmente: S0: produtor executa register1 = count {register1 = 5} S1: produtor executa register1 = register1 + 1 {register1 = 6} S2: consumidor executa register2 = count {register2 = 5} S3: consumidor executa register2 = register2 - 1 {register2 = 4} S4: produtor executa count = register1 {count = 6 } S5: consumidor executa count = register2 {count = 4}

7 6.7 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Solução do problema de seção critica 1.Exclusão mútua – Se o processo P i estiver executando em sua seção crítica, então nenhum outro processo poderá estar executando em suas seções críticas. 2.Progresso – Se nenhum processo estiver executando em sua seção crítica e houver alguns processos que queiram entrar em sua seção crítica, então a seleção dos processos que entrarão na seção crítica em seguida não poderá ser adiada indefinidamente. 3.Espera limitada - É preciso haver um limite sobre o número de vezes que outros processos têm permissão para entrar em suas seções críticas depois que um processo tiver feito uma solicitação para entrar em sua seção crítica e antes que essa solicitação seja concedida Suponha que cada processo seja executado em uma velocidade diferente de zero Nenhuma suposição referente à velocidade relativa dos N processos

8 6.8 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problema de seção crítica 1. Condição race – Quando há acesso simultâneo aos dados compartilhados e o resultado final depende da ordem de execução. 2. Seção crítica – Seção do código onde os dados compartilhados são acessados. 3. Seção de entrada - Código que solicita permissão para entrar em sua seção crítica. 4. Seção de saída – Código executado após a saída da seção crítica.

9 6.9 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Estrutura de um processo típico

10 6.10 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Solução de Peterson  Solução em dois processos  Suponha que as instruções LOAD e STORE sejam indivisíveis; ou seja, não podem ser interrompidas.  Os dois processos compartilham duas variáveis: int turn; Boolean flag[2]  A variável turn indica de quem é a vez de entrar na seção crítica.  O array flag é usado para indicar se um processo está pronto para entrar na seção crítica. flag[i] = true implica que o processo P i está pronto!

11 6.11 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Algoritmo para o processo P i

12 6.12 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Seção crítica usando locks

13 6.13 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Hardware de sincronismo  Muitos sistemas oferecem suporte do hardware pra o código da seção crítica  Uniprocessadores – poderiam desativar interrupções Código atualmente em execução poderia ser executado sem preempção Geralmente muito ineficaz em sistemas multiprocessadores  Sistemas operacionais usando isso não são totalmente escaláveis  Máquinas modernas oferecem instruções de hardware especiais indivisíveis  Indivisível = não interrompida Ou testa word da memória e define valor Ou troca conteúdo de duas words da memória

14 6.14 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Estrutura de dados para soluções de hardware

15 6.15 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Solução usando GetAndSet

16 6.16 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Solução usando Swap

17 6.17 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Semáforo  Ferramenta de sincronismo que não exige espera ocupada  Semáforo S – variável inteira  Duas operações padrão modificam S: acquire() e release() Originalmente chamadas P() e V()  Menos complicado  Só pode ser acessado por duas operações indivisíveis

18 6.18 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Semáforo como ferramenta geral de sincronismo  Semáforo de contagem – valor inteiro pode variar por um domínio irrestrito  Semáforo binário – valor inteiro só pode variar entre 0 e 1; pode ser mais simples de implementar Também conhecidos como locks mutex

19 6.19 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Exemplo Java usando semáforos

20 6.20 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Exemplo Java usando semáforos

21 6.21 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Implementação de semáforo  Precisa garantir que dois processos não poderão executar acquire () e release () no mesmo semáforo ao mesmo tempo  Assim, a implementação se torna o problema de seção crítica onde o código de espera e sinal são colocados na seção crítica. Agora poderia ter espera ocupada na implementação da seção crítica  Mas o código de implementação é curto  Pouca espera ocupada se a seção crítica raramente for ocupada  Observe que as aplicações podem gastar muito tempo nas seções críticas e, portanto, essa não é uma boa solução.

22 6.22 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Implementação de semáforo sem espera ocupada  Com cada semáforo existe uma fila de espera associada. Cada entrada em uma fila de espera possui dois itens de dados: valor (do tipo integer) ponteiro para próximo registro na lista  Duas operações: block – coloca o processo que chama a operação na fila de espera apropriada. wakeup – remove um dos processos na fila de espera e o coloca na fila de prontos.

23 6.23 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Implementação de semáforo sem espera ocupada (cont.)  Implementação de acquire():  Implementação de release():

24 6.24 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Deadlock e starvation  Deadlock – dois ou mais processos estão esperando indefinidamente por um evento que só pode ser causado somente por um dos processos esperando  Sejam S e Q dois semáforos inicializados com 1 P 0 P 1 S.acquire(); Q.acquire(); Q.acquire(); S.acquire();. S.release(); Q.release(); Q.release(); S.release();  Starvation – lock indefinido. Um processo pode nunca ser removido da fila de semáforo em que ele é suspenso.

25 6.25 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problemas clássicos de sincronismo  Problema de buffer limitado  Problema de leitores-escritores  Problema do jantar dos filósofos

26 6.26 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problema de buffer limitado  N buffers, cada um podendo manter um item  Mutex de semáforo inicializado com o valor 1  Semáforo cheio inicializado com o valor 0  Semáforo vazio inicializado com o valor N.

27 6.27 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problema de buffer limitado

28 6.28 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problema de buffer limitado Método insert()

29 6.29 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problema de buffer limitado Método remove()

30 6.30 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problema de buffer limitado (cont.)  A estrutura do processo produtor

31 6.31 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problema de buffer limitado (cont.)  A estrutura do processo consumidor

32 6.32 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problema de buffer limitado (cont.)  A Factory

33 6.33 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problema de leitores-escritores  Um conjunto de dados é compartilhado entre diversos processos concorrentes Leitores – só lêem o conjunto de dados; eles não realizam quaisquer atualizações Escritores – podem ler e escrever.  Problema – permite que vários leitores leiam ao mesmo tempo. Apenas um único escritor pode acessar os dados compartilhados de uma só vez.  Dados compartilhados Conjunto de dados Mutex de semáforo inicializado com 1. db de semáforo inicializado com 1. readerCount inteiro inicializado com 0.

34 6.34 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problema de leitores-escritores Interface para locks de leitura-escrita

35 6.35 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problema de leitores-escritores Métodos chamados por escritores.

36 6.36 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problema de leitores-escritores  A estrutura de um processo escritor

37 6.37 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problema de leitores-escritores  A estrutura de um processo leitor

38 6.38 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problema do jantar dos filósofos  Dados compartilhados Tigela de arroz (conjunto de dados) Semáforo chopStick [5] inicializado com 1

39 6.39 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problema do jantar dos filósofos (cont.)  A estrutura do Filósofo i:

40 6.40 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Problemas com semáforos  Uso correto das operações de semáforo: mutex.acquire() …. mutex.release() mutex.wait() … mutex.wait() Omissão de mutex.wait () ou mutex.release() (ou ambos)

41 6.41 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Monitores  Uma abstração de alto nível que oferece um mecanismo conveniente e eficaz para o sincronismo de processo  Somente um processo pode estar ativo dentro do monitor em determinado momento

42 6.42 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sintaxe de um monitor

43 6.43 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Visão esquemática de um monitor

44 6.44 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Variáveis de condição  Condição x, y;  Duas operações em uma variável de condição: x.wait () – um processo que invoca a operação é suspenso. x.signal () – retoma um dos processos (se houver) que invocou x.wait ()

45 6.45 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Monitor com variáveis de condição

46 6.46 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Solução do jantar dos filósofos

47 6.47 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Solução do jantar dos filósofos (cont.)  Cada filósofo I invoca as operações takeForks(i) e returnForks(i) na seqüência a seguir: dp.takeForks (i) COMER dp.returnForks (i)

48 6.48 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo em Java  Java oferece sincronismo em nível de linguagem.  Cada objeto Java possui um lock associado.  Esse lock é adquirido pela invocação de um método sincronizado.  Esse lock é liberado na saída do método sincronizado.  Os threads esperando para adquirir o lock do objeto são colocados no conjunto de entrada para o lock do objeto.

49 6.49 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo em Java Cada objeto possui um conjunto de entrada associado.

50 6.50 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo em Java Métodos sincronizados insert() e remove()

51 6.51 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo em Java: wait/notify()  Quando um thread invoca wait(): 1. O thread libera do lock do objeto; 2. O estado do thread é definido como Blocked; 3. O thread é colocado no conjunto de espera para o objeto.  Quando um thread invoca notify(): 1. Um thread qualquer T do conjunto de espera é selecionado; 2. T é movido da espera para o conjunto de entrada; 3. O estado de T é definido como Runnable.

52 6.52 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo em Java Entrada e conjuntos de espera

53 6.53 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo em Java – buffer limitado

54 6.54 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo em Java - buffer limitado

55 6.55 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo em Java  A chamada a notify() seleciona um thread qualquer do conjunto de espera. É possível que o thread selecionado não esteja de fato esperando pela condição para a qual foi notificado.  A chamada notifyAll() seleciona todos os threads no conjunto de espera e os move para o conjunto de entrada.  Em geral, notifyAll() é uma estratégia mais conservadora do que notify().

56 6.56 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo em Java – leitores- escritores

57 6.57 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo em Java – leitores- escritores Métodos chamados pelos leitores

58 6.58 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo em Java – leitores- escritores Métodos chamados pelos escritores

59 6.59 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo em Java Ao invés de sincronizar um método inteiro, blocos de código podem ser declarados como sincronizados

60 6.60 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo em Java Sincronismo de bloco usando wait()/notify()

61 6.61 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Recursos de concorrência em Java 5 Semáforos

62 6.62 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Recursos de concorrência em Java 5 Uma variável de condição é criada primeiro pela criação de ReentrantLock e chamada do seu método newCondition(): Quando isso é feito, é possível invocar os métodos await() e signal().

63 6.63 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Exemplos de sincronismo  Solaris  Windows XP  Linux  Pthreads

64 6.64 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo no Solaris  Implementa uma série de locks para dar suporte à multitarefa, multithreading (incluindo threads em tempo real) e multiprocessamento  Usa mutexes adaptativos por eficiência ao proteger dados de segmentos de código curtos  Usa variáveis de condição e locks de leitores- escritores quando seções de código maiores precisam de acesso aos dados  Usa turnstiles para ordenar a lista de threads esperando para adquirir um mutex adaptativo ou lock de leitor-escritor

65 6.65 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo no Windows XP  Usa máscaras de interrupção para proteger o acesso aos recursos globais em sistemas de uniprocessador  Usa spinlocks em sistemas de multiprocessador  Também oferece objetos despachantes que podem atuar como mutexes e semáforos  Objetos despachantes também podem fornecer eventos Um evento atua de modo semelhante a uma variável de condição

66 6.66 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo no Linux  Linux: Desativa interrupções para implementar seções críticas curtas  Linux oferece: semáforos spin locks

67 6.67 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Sincronismo Pthreads  API Pthreads é independente do OS  Ela oferece: locks de mutex variáveis de condição  Extensões não portáveis incluem: locks de leitura-escrita spin locks

68 6.68 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Transações indivisíveis  Modelo do sistema  Recuperação baseada em log  Pontos de verificação  Transações indivisíveis simultâneas

69 6.69 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Modelo do sistema  Garante que as operações acontecem como uma única unidade lógica de trabalho, em sua inteireza, ou não acontecem  Relacionado ao campo de sistemas de banco de dados  Desafio é assegurar a indivisibilidade apesar das falhas do sistema de computação  Transação – coleção de instruções ou operações que realiza única função lógica Aqui, nos preocupamos com mudanças no armazenamento estável – disco A transação é uma série de operações read e write Terminado com operação commit (transação bem sucedida) ou abort (transação falhou) Transação abortada deve ser rolled back para desfazer quaisquer mudanças que ele realiza

70 6.70 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Tipos de meio de armazenamento  Armazenamento volátil – informação armazenada aqui não sobrevive a falhas do sistema Exemplo: memória principal, cache  Armazenamento não volátil – A informação normalmente sobrevive a falhas Exemplo: disco e fita  Armazenamento estável – Informação nunca se perde Não é realmente possível, e por isso é aproximado pela replicação ou RAID para dispositivos com modos de falha independentes Objetivo é garantir indivisibilidade da transação onde as falhas causam perda de informações no armazenamento volátil

71 6.71 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Recuperação baseada em log  Registro de informações em armazenamento estável sobre todas as modificações feitas por uma transação  Mais comum é o logging write-ahead Log em armazenamento estável, cada registro de log descreve operação de escrita de única transação, incluindo  Nome da transação  Nome do item de dados  Valor antigo  Valor novo escrito no log quando a transação T i inicia escrito quando T i confirma  Entrada de log precisa alcançar o armazenamento estável antes que a operação ocorra

72 6.72 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Algoritmo de recuperação baseado em log  Usando o log, o sistema pode tratar de quaisquer erros de memória volátil Undo(T i ) restaura o valor de todos os dados atualizados por T i Redo(T i ) define valores de todos os dados na transação T i para novos valores  Undo(T i ) e redo(T i ) devem ser idempotentes Múltiplas execuções devem ter o mesmo resultado que uma execução  Se o sistema falhar, restaura estado de todos os dados atualizados em log Se log contém sem, undo(T i ) Se log contém e, redo(T i )

73 6.73 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Pontos de verificação  Log poderia se tornar longo, e recuperação poderia levar muito tempo  Pontos de verificação encurtam log e tempo de recuperação.  Esquema de ponto de verificação: 1. Enviar todos os registradores de log atualmente no armazenamento volátil para o armazenamento estável 2. Enviar todos os dados modificados do armazenamento volátil para o estável 3. Enviar um registro de log para o log no armazenamento estável  Agora a recuperação só inclui Ti, tal que Ti iniciou a execução antes do ponto de verificação mais recente, e todas as transações após Ti. Todas as outras transações já estão em armazenamento estável

74 6.74 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Transações concorrentes  Devem ser equivalentes à execução serial - serialização  Poderiam executar todas as transações na seção crítica Ineficiente, muito restritivo  Algoritmos de controle de concorrência oferecem serialização

75 6.75 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 serialização  Considere dois itens de dados A e B  Considere as transações T 0 e T 1  Execute T 0, T 1 de forma indivisível  Seqüência de execução chamada schedule  Ordem de transação executada de forma indivisível chamada schedule serial  Para N transações, existem N! schedules seriais válidos

76 6.76 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Schedule 1: T 0 depois T 1

77 6.77 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Schedule não serial  Schedule não serial permite execução sobreposta Execução resultante não necessariamente incorreta  Considere schedule S, operações O i, O j Conflito se acessar mesmo item de dados, com pelo menos uma escrita  Se O i, O j consecutivos e operações de diferentes transações & O i e O j não em conflito Então S’ com ordem trocada O j O i equivalente a S  Se S puder se tornar S’ via swapping de operações não em conflito S é seriável em conflito

78 6.78 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Schedule 2: Schedule seriável simultâneo

79 6.79 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Protocolo de lock  Garante serialização pela associação de lock a cada item de dados Segue protocolo de lock para controle de acesso  locks Compartilhado – T i tem lock de modo compartilhado (S) no item Q, T i pode ler Q mas não escrever Q Exclusivo – Ti tem lock em modo exclusivo (X) em Q, T i pode ler e escrever Q  Exige que cada transação no item Q adquira lock apropriado  Se lock já for mantido, nova solicitação pode ter que esperar Semelhante ao algoritmo de leitores-escritores

80 6.80 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Protocolo de lock em duas fases  Geralmente, garante serialização em conflito  Cada transação emite solicitações de lock e unlock em duas fases Crescimento – obtendo locks Encolhimento – liberando locks  Não impede deadlock

81 6.81 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Protocolos baseados em estampa de tempo  Selecione a ordem entre transações com antecedência – ordenação por estampa de tempo  Transação T i associada à estampa de tempo TS(T i ) antes que T i inicie TS(T i ) < TS(T j ) se T i entrou no sistema antes de T j TS pode ser gerado pelo clock do sistema ou como contador lógico incrementado em cada entrada de transação  Estampas de tempo determinam a ordem de serialização Se TS(T i ) < TS(T j ), sistema deve garantir schedule produzido equivalente a schedule serial, onde T i aparece antes de T j

82 6.82 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Implementação do protocolo baseado em estampa de tempo  Item de dados Q recebe duas estampas de tempo estampa-W(Q) – maior estampa de tempo de qualquer transação que executou write(Q) com sucesso estampa-R(Q) – maior estampa de tempo de read(Q) bem sucedido Atualizado sempre que read(Q) ou write(Q) é executado  Protocolo de ordenação por estampa de tempo garante que qualquer read e write em conflito sejam executados na ordem da estampa de tempo  Suponha que Ti execute read(Q) Se TS(T i ) < estampa-W(Q), Ti precisa ler valor de Q que já foi modificado  operação read rejeitada e T i cancelada Se TS(T i ) ≥ estampa-W(Q)  read executado, estampa-R(Q) definido como max(estampa-R(Q), TS(T i ))

83 6.83 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Protocolo de ordenação de estampa de tempo  Suponha que Ti execute write(Q) If TS(T i ) < estampa-R(Q), valor Q produzido por T i foi necessário anteriormente e T i assumiu que nunca seria produzido  Operação write rejeitada, T i cancelada Se TS(T i ) < estampa-W(Q), T i tentando escrever valor obsoleto de Q  Operação write rejeitada e T i cancelada Caso contrário, write executado  Qualquer transação cancelada T i recebe nova estampa de tempo e é reiniciada  Algoritmo garante serialização por conflito e ausência de deadlock

84 6.84 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7 a edição, 15/11/2006 Schedule possível sob protocolo de estampa de tempo

85 Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Final do Capítulo 6


Carregar ppt "Silberschatz, Galvin e Gagne ©2007 Conceitos de Sistema Operacional com Java – 7a edição, 15/11/2006 Capítulo 6: Sincronismo de processo."

Apresentações semelhantes


Anúncios Google