• Documentação fornecida pelo docente da UC no Moodle. Downey, A. B. - Little Book of Semaphores. https://greenteapress.com/semaphores/LittleBookOfSemaphores.pdf :Green Tea Press, 2016. Online. Goetz, B., Peierls, T., Bloch, J., Bowbeer, J., Holmes, D., Lea, D. - Java Concurrency in Practice. Addison-Wesley, 2006. Java Platform Standard Edition 8. https://docs.oracle.com/en/java/javase/22/docs/api/index.html. 2024 Hattingh, C. Using Asyncio in Python 3: Understanding Python's asynchronous programming features. O'Reilly Media, Inc. 2018.  
  • Engenharia Informática e Aplicações (L) (IPLUSO)
  • 6615
  • 24352
  • Programação Concorrente e Distribuída
  • IPLUSO6615-24352
  • 3
  • 6
  • 0
  • 4
  • Não
  • Português
  • Utilização da metodologia de aprendizagem baseada em problemas, que permite que o aluno adquira conhecimentos, ao mesmo tempo que a execução do conjunto de procedimentos para a resolução dos problemas lhe permite desenvolver capacidades e competências. Esta metodologia promove a aprendizagem como parte da própria atividade desenvolvida para resolução do problema.
  • Obrigatório
  • OA1: Compreender o que é a programação concorrente, quais as suas principais características, e quais os mecanismos tipicamente envolvidos na sua programação; entender as noções de Secção Crítica, Corrida, Deadlock e Starvation, num programa concorrente. OA2: Compreender e utilizar primitivas de comunicação e sincronização; compreender e aplicar técnicas que previnam a ocorrências de erros como Corridas, Deadlocks e Starvation. OA3: Compreender e implementar os principais paradigmas de comunicação entre tarefas nas modernas linguagens de programação. OA4: Compreender as características dos programas distribuídos; compreender e utilizar sockets para implementar comunicação entre processos em sistemas distribuídos. OA5: Compreender e utilizar Remote Procedure Calls (RPC) na implementação de programas distribuídos, OA6: Compreender os conceitos básicos da programação baseada em eventos nos programas concorrentes e distribuídos, e escrever programas que respondam apropriadamente a eventos.
  • CP1: Programação concorrente Processos; tarefas; concorrência; paralelismo; execução síncrona e assíncrona. Comunicação e sincronização; competição e cooperação; operações atómicas; secções críticas; starvation, deadlock e livelock. Utilização da memória; não-determinismo. CP2: Mecanismos para a programação concorrente Primitivas de sincronização: trincos, semáforos, monitores, barreiras, e filas bloqueantes. Prevenção de corridas, deadlocks e starvation. CP3: Utilização de programas concorrentes Ilustração dos paradigmas abordados. Problemas clássicos de sincronização. CP4: Sistemas Distribuídos Protocolos Internet; Família TCP/IP; Camada de aplicação; HTTP. Arquitetura cliente-servidor. CP5: Implementação de sistemas distribuídos usando sockets Biblioteca de sockets. Serialização. CP6: Implementação de sistemas distribuídos usando RPC Remote Procedure Calls. Implementações: gRPC, RMI, XML-RPC. CP7: Programação baseada em eventos Conceitos. Eventos em GUIs. Eventos em Sistemas Distribuídos.
  • Descrição

    Data limite

    Ponderação

    Trabalhos práticos e exercícios

    11-01-2025

    50%

    Testes escritos

    11-01-2025

    50%

    Exame de Recurso

    31-01-2025

    100%

     

    A avaliação final baseia-se numa componente prática, baseada em trabalhos práticos, participação nas aulas e assiduidade, e numa componente teórica baseada em testes escritos sobre os diferentes tópicos abordados. A componente prática terá um peso de 50% e a componente teórica terá um peso de 50%, na nota final. A nota mínima de ambas as componentes será de 9.5 valores.

    O aproveitamento nesta UC está dependente da frequência de um mínimo de 75% das aulas lecionadas no semestre.

    As componentes prática e teórica são requeridas em todas as épocas de avaliação.

    Assim, a época de recurso pode consistir em:
    - Exame escrito: para os alunos que não tiveram aproveitamento na componente teórica em avaliação contínua.
    - (Re)Submissão dos trabalhos: para os alunos que não tiveram aproveitamento na componente prática em avaliação contínua.
    - Exame escrito + (re)submissão dos trabalhos: para os alunos que não tiveram aproveitamento nem na componente teórica nem na componente prática em avaliação contínua.

     

  • Semestral
  • Os sistemas de software atuais estão, cada vez mais, a tornar-se concorrentes e distribuídos como forma de tirarem partido das modernas arquiteturas multi-processador e dos ritmos e larguras de banda crescentes das redes de computadores. A concorrência baseada em memória partilhada dos sistemas multi-processador, e a concorrência baseada na troca de mensagens em sistemas distribuídos, partilham muitas abstrações e problemas comuns. Para poderem desenvolver programas concorrentes corretos e eficientes neste contexto, os programadores têm de compreender e utilizar um conjunto de paradigmas e primitivas que lhes permitam lidar com as arquiteturas subjacentes, que frequentemente executam instruções fora de ordem, e compiladores cujas otimizações afetam os resultados dos programas concorrentes. Este curso tem como intenção explorar as técnicas para o desenvolvimento de programas concorrentes e distribuídos.