Trabajo final de teoría

El trabajo final de teoría forma parte del sistema de evaluación continua de la asignatura. Consiste en la realización y exposición individual de un tema relacionado con la programación concurrente. Elección del trabajo Debes elegir uno de los temas propuestos (de carácter amplio y genérico para que puedas enfocarlo a tu manera). Comunica tu elección mediante tutoría en UA-Cloud antes del 30 de septiembre. Envía tres propuestas por orden de preferencia para que, en caso de que alguna ya esté asignada, se te pueda adjudicar otra. Si no has elegido trabajo antes de esa fecha, se te asignará uno al azar de entre los disponibles, siempre que hayas optado por la evaluación continua. Entregables La realización del trabajo incluye dos entregables: ...

Tema 0: Presentación de la asignatura

Introducción Bienvenidos a la asignatura de Programación Concurrente. Vivimos en una era en la que prácticamente todos los sistemas informáticos, desde los móviles hasta los grandes servidores, cuentan con procesadores multinúcleo y ejecutan aplicaciones que realizan múltiples tareas al mismo tiempo. La concurrencia no es solo una característica deseable: es una necesidad para aprovechar al máximo los recursos disponibles y para construir software eficiente, seguro y escalable. En este curso aprenderás los fundamentos teóricos y las técnicas prácticas necesarias para diseñar y programar aplicaciones concurrentes. Nos centraremos tanto en los modelos clásicos de concurrencia (procesos, hilos, semáforos, monitores) como en su aplicación en lenguajes y entornos modernos como Java, Python, C y Rust. ...

Tema 1: Conceptos fundamentales

Introducción Concepto de programación concurrente Avances en HARDWARE (procesadores específicos de E/S) Nuevos SO que optimizan uso del procesador (E/S concurrente) Nuevos problemas de sincronización Programación concurrente como disciplina Los primeros sistemas concurrentes fueron los propios sistemas operativos, un solo procesador atendía multiples usuarios Hitos: Aparición del concepto de thread o hilo de ejecución, que permite que los programas se ejecuten más rápido que los que utilizan el concepto de proceso Aparición de lenguajes de propósito general como Java que dan soporte directo a la programación concurrente Aparición de Internet: campo abonado para el desarrollo y la utilización de programas concurrentes. Navegadores, chats, etc…, están programados usando técnicas de programación concurrente Concurrencia (RAE): Acaecimiento o concurso de varios sucesos en un mismo tiempo ...

Tema 2: Procesos vs. hilos

Procesos Concepto y ciclo de vida El ciclo de vida de un proceso es el siguiente: El encargado de darle la oportunidad de usar la CPU es el Planificador de procesos o Scheduler → forma parte del núcleo del SO. En este otro enlace tienes más información sobre el planificador del núcleo Linux. Y en este vídeo puedes ver que puede pasar si un atacante se puede hacer con el control del planificador. ...

Tema 3: Primeras aproximaciones al problema de la programación concurrente

Introducción y conceptos básicos Problemas de sincronización entre procesos En un sistema concurrente pueden aparecer diferentes problemas de sincronización: Competencia por recursos no compartibles e.g.: Una impresora. Cooperación compartiendo información. La información se almacena en recursos no compartibles y puede dar lugar a fallos en la coherencia de datos Cooperación mediante paso de mensajes: orden para el envío y recepción de mensajes. Necesitamos disponer de reglas de sincronización entre procesos ...