miércoles 19 de junio de 2013
| Código: 35411 | Asignatura: PROGRAMACIÓN AVANZADA | ||||
| Departamento: Automática y Computación | Curso: 4 | ||||
| Tipo: Optativa | Duración: 1º C | ||||
| Créditos: 6 | Teóricos: 3 | Prácticos: 3 | |||
| Profesores | |||||
|
FUENTES GONZALEZ, RAMON |
|||||
Programación modular y paralela. Programación concurrente. Programación en tiempo real.
No hay requisitos previos. Los conocimientos y competencias aconsejables para esta materia son:
- Conocimientos de lógica de programación.
- Experiencia en el lenguaje de programación C.
Los estudiantes de ingeniería son en la actualidad usuarios de herramientas informáticas que se ejecutan en máquinas con sistemas operativos multitarea, tanto en estaciones de trabajo como en sistemas multipuesto y redes. Es previsible que en sus futuros puestos de trabajo sea también esa la situación en la que desarrollen su labor profesional.
En este contexto, con esta asignatura se pretende que los alumnos sean conocedores de la estructura que subyace en estos sistemas, que están fundamentados en programación concurrente y distribuida.
Los objetivos de esta asignatura son:
-Ofrecer a los alumnos una visión concreta de la ejecución de los procesos concurrentes y distribuidos mediante la exposición de algunos problemas clásicos de programación concurrente: sección crítica, productores y consumidores, lectores y escritores, problema de los filósofos,…
Presentar a los alumnos las técnicas básicas para implementar propiedades de seguridad en programas concurrentes.
Iniciar a los alumnos en el uso y la programación y del Shell del sistema operativo LINUX.
PROGRAMA DE TEORÍA
30 horas de clases teóricas, repartidas en dos horas semanales durante un cuatrimestre.
Introducción a la asignatura. Elementos previos necesarios.
Procesos concurrentes. Cooperación entre procesos.
Elementos de programación concurrente imperativa.
Elementos de programas concurrentes: semáforos
Elementos de programas concurrentes:monitores .
Ejemplos clásicos de programación concurrente.
Elementos usuales en programación distribuida.
El paso de mensajes en programas distribuidos.
Primitivas asociadas a la programación distribuida asíncrona.
Ejemplos clásicos de programación distribuida asíncrona.
Primitivas asociadas a la programación distribuida síncrona.
PROGRAMA DE PRÁCTICAS EN CLASE
15 horas de clases prácticas, impartidas en el aula.
Las prácticas en clase consisten en la resolución de problemas utilizando la teoría explicada esa misma semana. Se contemplan en estas prácticas:
La resolución de problemas concretos de programación concurrente utilizando variables compartidas, semáforos y monitores.
El análisis de ejemplos de programación distribuida asíncrona y síncrona
la resolución de problemas de programación paralela.
PROGRAMA DE PRÁCTICAS DE LABORATORIO
15 horas de clases prácticas, impartidas en un laboratorio de informática.
Los contenidos de las prácticas se organizan en diez sesiones de prácticas de 1,5 horas de duración, dedicadas al estudio de alguna de las utilidades del Shell del sistema operativo Linux. En estas prácticas se comienza con una introducción a Linux. Posteriormente se estudian las características y el usom de alguna de las utilidades del Shell. Finalmente se propondrán prácticas de programación del Shell. En concreto, estas prácticas tienen los contenidos siguientes:
Introducción al sistema operativo Linux. Usuarios Linux. Comandos básicos del Shell. Organización del sistema.
Los ficheros y el Shell. Los Procesos y el Shell.
Utilidades: filtros.
Comunicación y cooperación entre procesos para realizar tareas.
Editores de texto.
Programación del Shell.
TEORÍA Y PRÁCTICAS EN EL AULA
1ª semana
Introducción a la asignatura. Introducción de elementos previos necesarios.
2ª semana
- Procesos concurrentes. Cooperación entre procesos.
3ª semana
- Elementos de programación concurrente imperativa.
4ª semana
- Sincronización y exclusión mutua en programas concurrentes.
5ª semana
- Invariantes globales en el diseño de programas concurrentes.
6ª semana
- Elementos de programas concurrentes: semáforos (I)
7ª semana
- Elementos de programas concurrentes: semáforos (II)
8ª semana
- Elementos de programas concurrentes:monitores (I).
9ª semana
-Elementos de programas concurrentes: monitores (II). Ejemplos clásicos de programación concurrente.
10ª semana
- Programación distribuida. Conceptos asociados (I).
11ª semana
- Programación distribuida. Conceptos asociados (II).
12ª semana
- Elementos usuales en programación distribuida.
13ª semana
- El paso de mensajes en programas distribuidos.
14ª semana
- Primitivas asociadas a la programación distribuida asíncrona. Ejemplos clásicos de programación distribuida asíncrona.
15ª semana
- Primitivas asociadas a la programación distribuida síncrona.
PRÁCTICAS EN LABORATORIO
Práctica 1. Introducción al sistema operativo Linux. Usuarios Linux. Comandos básicos del Shell. Organización del sistema.
Práctica 2. Los ficheros y el Shell.
Práctica 3. Los Procesos y el Shell.
Práctica 4. Utilidades: filtros.
Práctica 5. Comunicación y cooperación entre procesos para realizar tareas.
Práctica 6. Editores de texto.
Práctica 7. Programación del Shell (I).
Práctica 8. Programación del Shell (II).
Práctica 9. Programación del Shell (III).
Práctica 10. Programación con la utilidad awk.
La evaluación será el resultado del trabajo desarrollado por cada alumno en las prácticas del aula y del laboratorio junto con la calificación final obtenida en los exámenes de teoría/ejercicios y de prácticas.
El 80% de la calificación final se realizará en función del examen de teoría/prácticas. El 20% restante corresponderá al examen de prácticas de laboratorio.
En el examen escrito se pedirá el desarrollo de un tema de teoría así como las soluciones de problemas mediante algoritmos concurrentes y distribuidos.
Las parte práctica se evaluará mediante un ejercicio de programación del shell del sistema operativo LINUX.
TEORÍA. BIBLIOGRAFÍA BÁSICA
G. R. Andrews, CONCURRENT PROGRAMMING, The Benjamin/Cummings Pub. 1991.
G. R. Andrews, FOUNDATIONS OF MULTITHREADED, PARALLEL AND DISTRIBUTED PROGRAMMING, Addison-Wesley 2000
TEORÍA. BIBLIOGRAFÍA COMPLEMENTARIA
M. L. Liu, COMPUTACIÓN DISTRIBUIDA. FUNDAMENTOS Y APLICACIONES, Addison-Wesley 2004
PRÁCTICAS
D. Tansley, LINUX & UNIX SHELL PROGRAMMING, Addison-Wesley 2000
R. Petersen, FUNDAMENTOS DE PROGRAMACIÓN EN LINUX, Osborne McGraw-Hill 2001
Castellano