Programação Concorrente
Áreas Científicas |
Classificação |
Área Científica |
OFICIAL |
Ciência de Computadores |
Ocorrência: 2022/2023 - 2S
Ciclos de Estudo/Cursos
Língua de trabalho
Português - Suitable for English-speaking students
Objetivos
O objetivo principal é fornecer uma formação sólida sobre concorrência, com particular ênfase nos princípios fundamentais de concorrência e no desenho e implementação de modelos de computação concorrente em arquiteturas de memória partilhada, assim como dos principais problemas inerentes.
Resultados de aprendizagem e competências
Ao completar a UC espera-se que o estudante adquira as seguintes competências:
- compreender os princípios fundamentais de concorrência e as principais problemáticas relacionadas com a concorrência e com a execução concorrente de programas.
- conhecer as especificidades das arquiteturas de memória partilhada que são relevantes para o desempenho de uma aplicação concorrente, como o fluxo de dados e o processamento das instruções, o funcionamento da memória, e a sincronização e coerência dos dados em memória.
- conhecer os princípios teóricos que fundamentam um bom e correto desenho de uma aplicação concorrente, com particular ênfase nos conceitos e aspetos formais da sincronização.
- estar familiarizado com as principais primitivas de sincronização existentes para o desenvolvimento de aplicações concorrentes e ser capaz de modelar e implementar estruturas de dados, ferramentas e/ou aplicações concorrentes correta e eficientemente, usando primitivas/bibliotecas duma linguagem de programação atual para programação em memória partilhada utilizando processos e/ou threads.
Modo de trabalho
Presencial
Pré-requisitos (conhecimentos prévios) e co-requisitos (conhecimentos simultâneos)
Aprovação em Lógica Computacional e Sistemas de Operação
Programa
- Conceitos básicos: tipos de arquiteturas e de aplicações concorrentes. Concorrência como abstração de paralelismo. Distinção entre concorrência e paralelismo, entre programa sequencial e programa concorrente, e entre programação sequencial, concorrente, paralela e distribuída. Processos.
- Introdução aos modelos: abstração, especificação e modelação de sistemas; sistemas de transição etiquetados (LTS): estados, ações atómicas, comportamento e equivalência; conceitos básicos dum cálculo de processos como prefixo de ações, escolha, composição (paralela), guardas. Modelos assíncronos e síncronos. Intercalação. Ações atómicas partilhadas. Propriedades de correção: safety, liveness e fairness.
- Princípios de sincronização: distinção entre comunicação e sincronização, e entre competição e cooperação. Operações atómicas em hardware e em software. O problema da região crítica. Starvation versus deadlock. Requisito para a ocorrência de deadlocks. Inversão de prioridade. Problemas clássicos de sincronização.
- Primitivas de sincronização: principais primitivas de sincronização -- locks, semáforos, monitores e barreiras -- e diferentes abordagens de implementação.
- Programação com processos e com threads:distinção entre processos e threads. Principais benefícios e implicações da utilização de processos multithreaded. User threads versus kernel threads. Modelo de programação concorrente tendo por base a utilização de: (i) processos em conjunto com técnicas avançadas de mapeamento de memória; (ii) processos multithreaded utilizando bibliotecas duma linguagem de programação atual.
Bibliografia Obrigatória
Herlihy Maurice;
The art of multiprocessor programming. ISBN: 9780123705914
Aceto Luca 070;
Reactive systems. ISBN: 978-0-521-87546-2
Joe Armstrong;
Concurrent programming in ERLANG. ISBN: 9780135083017
Bibliografia Complementar
Michel Raynal.; Concurrent Programming: Algorithms, Principles and Foundations. , Springer, 2012
Roberto Gorrieri, Cristian Versari; Introduction to Concurrency Theory, Springer, 2015
Ben-Ari M. 1948-;
Principles of concurrent and distributed programming. ISBN: 9780321312839 pbk
Gregory R. Andrews; Foundations of Multithreaded, Parallel, and Distributed Programming., 2000
R. Milner;
Communication and concurrency. ISBN: 0-13-115007-3
Métodos de ensino e atividades de aprendizagem
Aulas teóricas de exposição dos tópicos do programa e aulas práticas laboratoriais para demonstração e desenvolvimento de programas. Para a modelação serão usados simuladores de sistemas de transição ou máquinas de estados.
Tipo de avaliação
Avaliação distribuída sem exame final
Componentes de Avaliação
Designação |
Peso (%) |
Trabalho laboratorial |
40,00 |
Teste |
60,00 |
Total: |
100,00 |
Componentes de Ocupação
Designação |
Tempo (Horas) |
Estudo autónomo |
56,00 |
Frequência das aulas |
56,00 |
Elaboração de projeto |
50,00 |
Total: |
162,00 |
Obtenção de frequência
Serão registadas as presenças às aulas práticas. Perde a frequência por falta de assiduidade o estudante que faltar a mais de 25% das aulas práticas previstas.
Cada um dos dois testes da disciplina tem uma nota mínima de 6 valores em 20.
Fórmula de cálculo da classificação final
A nota final (NF) é obtida pela ponderação das notas da avaliação parciais do seguinte modo:
NF = 4 * Trab1 + 4 * Trab2 + 6 * Test1 + 6 * Test2
onde:
Trab1 = Trabalho 1
Trab2 = Trabalho 2
Test1 = Primeiro teste
Test2 = Segundo teste