Modelagem e implementação de programas concorrentes

Documentos relacionados
Sistemas Distribuídos

Gerenciamento de Transações em Banco de Dados

Sistemas Operacionais. Prof. André Y. Kusumoto

Contato. professorluisleite.wordpress.com

INE5645 Programação Paralela e Distribuída - Prova 1 22/10/2012 Aluno: Parte 1 Controle de Concorrência Conceitos Básicos (2,5)

Comunicação entre processos

Linguagens de Programação

Fundamentos de Sistemas Operacionais

SISTEMAS OPERACIONAIS

Sincronização e Comunicação entre Processos. Adão de Melo Neto

Sistemas Distribuídos Aula 7

Capítulo 3. Programação Concorrente. Conteúdo. Objetivos. Recordando. Recordando. Objetivos de sistema operacional. DCA-108 Sistemas Operacionais

Introdução Aplicações Concorrentes Especificação de Concorrência em Programas Problemas de Compartilhamento de Recursos Exclusão Mútua Sincronização

Aula 7. Problemas Clássicos de Sincronização. 1.1 O Jantar dos Filósofos. 1.2 Leitores e Escritores. 1.3 O Barbeiro Dorminhoco

DEADLOCKS IMPASSES. Vinícius Pádua

Algoritmos e Programação

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

LINGUAGEM C: COMANDOS DE REPETIÇÃO

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 11 - Threads e Concorrência

Sistemas Operacionais

Sistemas Operacionais. Rodrigo Rubira Branco

Sincronização e Comunicação entre Processos

Sistemas Operacionais

Roteiro. Introdução Sincronização de Relógio Físico Sincronização de Relógio Lógico Exclusão Mútua

Sistemas Operacionais

Prof. Silvana Rossetto 9 de julho de DCC/IM/UFRJ

Sistemas Distribuídos Aula 17

LINGUAGEM C: COMANDOS DE CONTROLE CONDICIONAL

Universidade Estadual de Mato Grosso do Sul UEMS Curso de Ciência da Computação Disciplina de Algoritmos Paralelos e Distribuídos

Sistemas Operacionais

Sistemas Operativos. Objetivo. Entrega do Questionário. Exercício 1. Exercício 2. Exercício 3. Exercício 4. Grupo 1 Introdução

Capítulo 2 Processos e Threads

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO IM DCC CURSO DE CIÊNCIA DA COMPUTAÇÃO SISTEMAS OPERACIONAIS I 2010/2 PROGRAMA DA DISCIPLINA

Comunicação entre Processos

Animação do funcionamento de um núcleo de sistema operacional. Marco Antonio Ruthes dos Santos Orientador : Mauro Marcelo Mattos

SISTEMAS OPERACIONAIS. Sincronização e Comunicação entre Processos UNIBAN

Fundamentos de Sistemas Operacionais

Algoritmos Computacionais

Sistemas Operacionais Sincronização e Comunicação entre Processos

Conceitos básicos de programação

Deadlocks. Sistemas Operacionais - Professor Machado

ALGORITMOS DISTRIBUÍDOS Deadlock

Conceito de Processo. Estados de Processos. Diagrama de Estados de Processos

Resumo: Sistemas Operacionais Abertos

Aula 4 Estruturas de Controle

Exame de 1ª Época Introdução à Programação IGE e ETI 2003/02/25-1º semestre de 2002/2003 ISCTE

Capítulo 2: Procedimentos e algoritmos

Programação Concorrente. 2º Semestre 2010

UFRJ IM - DCC. Sistemas Operacionais I. Unidade II Concorrência

Sistemas Operacionais

ESTRUTURAS DE REPETIÇÃO - PARTE 1

Modelo de Programação Paralela

Sincronização e comunicação entre processos

Introdução ao Fortran 90. Aula 3

Aula 4 Objetivos if/else while

Paradigmas de Computação Paralela (UCE Computação Paralela Distribuída)

Modelos de Programação de Tempo Real

Sistemas Operacionais. Sincronização: Semáforos Problema dos Leitores/Escritores

Replicação. Modelos de Consistência.

Organização de Computadores

Monitores. Paulo Sérgio Almeida. Grupo de Sistemas Distribuídos Departamento de Informática Universidade do Minho

Resolução de sistemas de equações lineares: Método de eliminação de Gauss - estratégias de pivotamento

(Model Checking) Estes slides são baseados nas notas de aula da Profa. Corina

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

EXPRESSÕES ARITMÉTICAS PARTE 1

7 Comandos e Estruturas de Controle

A resposta apresentada em aula, no quadro, (em Chapin e/ou Português Estruturado) está correta?

Programação Paralela e Distribuída Lista de Exercícios P2 2008/1

Processos e Threads e em sistemas distribuídos. Prof. Me. Hélio Esperidião

Introdução à Lógica de Programação. Adaptação de Luis Otavio Alvares

Unidade VI. Técnicas de Teste de Software Teste Estrutural. Profa. Dra. Sandra Fabbri

Sistemas Distribuídos

Juliana Kaizer Vizzotto. Universidade Federal de Santa Maria. Disciplina de Teoria da Computação

Programação Aplicada à Engenharia

Sistemas Operacionais

Sistemas Operacionais. DeadLock. Edeyson Andrade Gomes.

Matemática para Ciência de Computadores

Computação 1 - Python Aula 8 - Teórica: Estrutura de Repetição : for 1/ 10

Processamento de Transações. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

12 Indicador de Passagem

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de única origem. Subestrutura ótima. Propriedades de caminhos mais curtos

a) Defina uma função que recebe como argumento um número natural n e devolve o número de divisores desse número.

PCS-2529 Introdução aos Processadores. Prof. Dr. Paulo Sérgio Cugnasca

UFRJ IM - DCC. Sistemas Operacionais I. Unidade IV Gerência de Recursos Entrada e Saída. 02/12/2014 Prof. Valeria M. Bastos

Controle de Transação

Sistemas Operacionais

Projeto e Análise de Algoritmos NP Completude Parte 2. Prof. Humberto Brandão

Algoritmos I Aula 13 Linguagem de Programação Java

CAPÍTULO V. Estruturas de Repetição CAPÍTULO V ESTRUTURAS DE REPETIÇÃO. Estrutura de Repetição com Teste no Início: E QUA TO-FAÇA...

Redes de Petri. 1 Introdução. José de Oliveira Guimarães DC-UFSCar

5 Comando de Seleção Simples e Composta

Programação Concorrente

Sistemas Operacionais

GERENCIAMENTO DE TAREFAS. Prof. Me. Hélio Esperidião

Análise e Projeto Orientados a Objetos Aula III Concepção Visão Geral do Sistema. Prof. Bruno E. G. Gomes IFRN

Controle de Fluxo. Laços e Desvios incondicionais

Expressões e enunciados

1 a Questão Unidade I e II (45 pontos)

Capítulo 2. Orientação a Objetos

Transcrição:

Modelagem e implementação de programas concorrentes Aula 5 DCC-UFMG 2010

Bibliograa A de sempre + The Mutual Exclusion Problem Part I: A Theory of Interprocess Communication L. Lamport

Interferencia Interferência: instruções executadas por um processo invalidam asserções em outro. Aparece por causa das variáveis compartilhadas A ação a não interfere com a asserção C se {C pre(a)} a {C} é sempre Verdadeiro (C é invariante respeito a execução de a) Exemplo: x = 1; // y = 2; z = x+y; z = x-y; Que podemos fazer ao respeito da interferência?

Interferencia 1. variables disjuntas processos independentes Sobreposição (interação de processos): 1. asserções enfraquecidas armamos menos do que poderiamos na execução isolada 2. invariantes globais predicados que são Verdadeiros em todos os estados visíveis 3. sincronização esconde estados (exclusão mutua <S>) ou demora a execução (sincronização por condição <await B S>)

Seção crítica Precedencia, ver Herlihy Chapter 2

Seção crítica Seção crítica: seqüência de ações envolvida no acesso a variáveis compartilhadas Problema da seção crítica: N processos executam em um loop innito uma sequencia de instruções dividida em 2 subsequencias: a seção critica e a seção nao-critica. <S i > CSEnter S i CSExit. Os processos não podem parar dentro da CS (em algum momento saem) A solução ao problema da seção crítica deve satisfazer 3 regras: Exclusão mutua Progresso (deadlock-freedom) Espera limitada

Seção crítica Exclusão mutua: Se o processo P 1 está executando na sua seção crítica, então nenhum outro processo pode ser executado nessa seção crítica (não pode ter dois processos na seção crítica ao mesmo tempo);

Seção crítica Progresso (deadlock-freedom?): Se um processo está tentando entrar na seção crítica, então algum processo (não necessariamente o mesmo) em algum momento entra a seção crítica. Estado ruim: varios processos esperando por condições que nunca irão ocorrer (deadlock se refere a uma condição especíca em que dois ou mais processos estão esperando porque o outro libere um recurso, ou mais de 2 processos estão esperando por recursos em uma cadeia circular);

Seção crítica Espera limitada (Bounded waiting) (starvation freedom?): Deve existir um limite no número de vezes que outros processos são permitidos de entrar na seção crítica, após a requisição de um processo de entrar na seção critica e antes de que esse pedido é satisfeito (starvation (inanição): a um processo se lhe negam perpetuamente recursos necessários)

Problema da seção crítica Como resolver o problema CS usando instruções de máquina diretamente (sem primitivas de sincronização)? Problema enunciado para N processos, mas começamos por 2! Note: somente existem 2 estados: ninguem na sua CS in1 = false in2 = false alguem na sua CS in1 = true in2 = true

Solução do problema da seção crítica in1 = false; in2 = false; { (in1 in2)} Processo 1 Processo 2 while (true) { while (true) { { (in1 in2)} in1 = true; in2 = true; { (in1 in2)}?? } CS1 in1 = false; NCS1 CS2 in2 = false; NCS2 Exclusão Mutua valendo sempre? Qualquer um entra na seção critica ainda que tenha outro dentro!! Sincronização!

Solução do problema da seção crítica in1 = false; in2 = false; Processo 1 Processo 2 while (true) { while (true) { <await not in2>; <await not in1>; --continua quando not in1 --continua quando not in1 in1 = true; in2 = true; { (in1 in2)}?? } CS1 in1 = false; NCS1 CS2 in2 = false; NCS2 Exclusão Mutua valendo sempre? Não! A leitura e a atribuição precisam ser atômicas!

Solução do problema da seção crítica in1 = false; in2 = false; Processo 1 Processo 2 while (true) { while (true) { <await not in2; <await not in1; in1 = true;> in2 = true;> { (in1 in2)} } CS1 in1 = false; NCS1 CS2 in2 = false; NCS2 Exclusão Mutua valendo sempre? Sim! A invariante (in1 in2) é verdadeira sempre.

Não deadlock Assumir que deadlock é possível, então ambos os processos estão bloqueados no await, ou seja, o processo 1 está no estado: P: { in1 in2} e o processo 2 está no estado: Q: {in1 in2} Mas o predicado P Q não pode ser verdadeiro (Veja teorema de exclusão de congurações no Andrews) porque não pode acontecer ao mesmo tempo de in1 ser verdadeiro e falso e in2 ser verdadeiro e falso Contradição! Portanto, o algoritmo é deadlock-free. Mas, como implementamos o await??

Operações atômicas comuns Test-and-set(TS) Swap Fetch-and-increment Compare-and-swap (CAS) Load-link/Store-conditional Read-modify-write Exemplo: CSenter: while (TS(lock)) skip; CS CSexit: lock = false # exemplo do Andrews

Seção crítica Mas, será possível implementar o await usando somente registros atômicos? Registros atômicos de leitura/escrita (read/write atomic registers): Objetos compartilhados que suportam operações de leitura e escrita atômicas.

Apresentação Herlihy: Algoritmo 1 em Java

Algoritmo 1 Cada processo anuncia que quer entrar na CS: flag1 = false; flag2 = false; Processo 1 Processo 2 while (true) { while (true) { flag1 = true flag2 = true while (flag2); while (flag1); CS1 CS2 flag1 = false; flag2 = false; } }

Algoritmo 1, exclusão mutua Assumindo que os intervalos não se sobrepõem, ou seja, CS j CS k A B e CS k CS j B A então: write A (A = true) read A (B = false) CS A write B (B = true) read B (A = false) CS B Assumindo B o último a ler o ag do outro: write A (A = true) read A (B = false) write B (B = true) read B (A = false) Chegamos a uma contradição: A==true e A==false sem nova atribuição (ela somente acontece na saida da CS e por hipótese o A ainda está na seção crítica).

Algoritmo 1, Deadlock-free? Não. O predicado {ag1 ag2} pode ser verdadeiro.

Algoritmo 2 Cada processo deixa passar ao outro primeiro: int victim; Processo A Processo B while (true) { while (true) { victim = A; --Cede a vez-- victim = B; while (victim==a); while (victim==b); CS1 CS2 } }

Algoritmo 2 Provar Exclusão mutua: pelo absurdo. Assumimos: CS j CS k A B e CS k CS j B A então: write A (victim = A) read A (victim = B) CS A write B (victim = B) read B (victim = A) CS B Assumindo A o último a ler o ag do outro: write B (victim = B) read B (victim = A) read A (victim = B) Chegamos a uma contradição: A não pode ter lido victim=b pois victim=a, não tem outra atribuição de victim=b até o B entrar de novo na CS e os registros são atômicos.

Algoritmo 2 Deadlock: Tem, processo A cede a vez a B, B executa e não volta a tentar entrar na CS.

Algoritmo de Peterson Misturar o melhor de cada um. Anuncio de intenção de entrada na CS e ceder a vez para evitar deadlock. flaga = false; flagb = false; Processo A Processo B while (true) { while (true) { flaga = true; flagb = true; victim = A; victim = B; while(flagb && victim = A); CSA flaga = false; } } while(flaga && victim = B); CSB flagb = false;

Algoritmo de Peterson flaga = false; flagb = false; Processo A Processo B while (true) { while (true) { flaga = true; flagb = true; victim = A; victim = B; while(flagb && victim = A); CSA flaga = false; } } while(flaga && victim = B); CSB flagb = false; Condição do await: agb && victim = A ca enquanto eu seja a vitima B esteja executando. Se o B já tiver tentado entrar (não sou mais a vítima) e B não esta dentro do CS posso entrar. Se o B não entrou ainda posso entrar. A condição agb (victim = A) exclui os casos em que agb victim=b (gera deadlock) e agb victim=a valem (não entra ainda que o B não esteja executando).