Guías Académicas

SISTEMAS DISTRIBUIDOS

SISTEMAS DISTRIBUIDOS

GRADO EN INGENIERÍA INFORMÁTICA

Curso 2026/2027

1. Datos de la asignatura

(Fecha última modificación: 16-06-26 11:00)
Código
101132
Plan
ECTS
6.00
Carácter
OBLIGATORIA
Curso
4
Periodicidad
Segundo Semestre
Idioma
ESPAÑOL
Área
CIENCIA DE LA COMPUTACIÓN E INTELIGENCIA ARTIFICIAL
Departamento
Informática y Automática
Plataforma Virtual

Campus Virtual de la Universidad de Salamanca

Datos del profesorado

Profesor/Profesora
Pablo Chamoso Santos
Grupo/s
PB2
Centro
Fac. Ciencias
Departamento
Informática y Automática
Área
Ciencia de la Computación e Inteligencia Artific.
Despacho
Edificio Multiusos I+D+i, C/Espejo 2, 24.2
Horario de tutorías
-
URL Web
https://produccioncientifica.usal.es/investigadores/57686/detalle
E-mail
chamoso@usal.es
Teléfono
Ext. 6591
Profesor/Profesora
Álvaro Lozano Murciego
Grupo/s
TA,TB; PA1,PA2,PB1
Centro
Fac. Ciencias
Departamento
Informática y Automática
Área
Lenguajes y Sistemas Informáticos
Despacho
G2008 – Edificio Ciencias, escaleras junto a conserjería
Horario de tutorías
-
URL Web
https://esalab.es/esalab-miembro/alvaro-lozano-murciego/
E-mail
loza@usal.es
Teléfono
923294500 Ext. 6054

2. Recomendaciones previas

Es recomendable tener afianzados los conocimientos teóricos alcanzados en Programación I, II y III, Redes de Computadores I y II, y Sistemas Operativos I y II, todas ellas asignaturas del Grado en Ingeniería Informática de la Universidad de Salamanca (o asignaturas equivalentes de otros grados o universidades)

Para la realización de las prácticas, es también recomendable una destreza en programación orientada a objetos, especialmente en Java (obtenida en distintas asignaturas del grado, por ejemplo, Programación III y/o Interfaces Gráficas) y conocer aspectos básicos sobre concurrencia y desarrollo multihilo (asignaturas Sistemas Operativos I y II).

3. Objetivos

GENERAL

El objetivo general de la asignatura se centra en que el alumno llegue a comprender la problemática asociada a la implementación de sistemas distribuidos, los algoritmos existentes para su solución y su utilización como herramientas de trabajo en un entorno de red real.

ESPECÍFICOS

  • Comprender conceptos básicos de sistemas distribuidos, especialmente: tiempos y estados de red, la coordinación entre procesos y el uso se servicios compartidos.
  • Ser capaz de implementar dichos conceptos en programas reales dentro del entorno ofrecido por el laboratorio de prácticas.

 

4. Competencias a adquirir | Resultados de Aprendizaje

Específicas | Habilidades.

CE11, CE14, CETI6

Transversales | Competencias.

CT4, CT8, CT9, CT10, CT11, CT12, CT13, CT16, CT17, CT18, CT20, CT21.

 

5. Contenidos

Teoría.

Tema 1.- Introducción a los sistemas distribuidos: conceptos, caracterización y desafíos

Tema 2.- Modelado de sistemas distribuidos: arquitecturas y fundamentos

Tema 3.- Middleware: marshalling, llamadas a procedimiento remoto (RPC) y servicios web

Tema 4.- Tiempo y estados globales: relojes físicos y lógicos

Tema 5.- Coordinación y acuerdo: exclusión mutua distribuida, algoritmos de elección, multidifusión y acuerdo

Tema 6.- Sistemas de archivos distribuidos: NFS y AFS

Tema 7.- Sistemas P2P: Napster, BitTorrent y middleware P2P

Tema 8.- Replicación: servicios tolerantes a fallos y de alta disponibilidad

Tema 9.- Registros distribuidos: blockchain y Bitcoin

Tema 10.- Diseño de sistemas distribuidos: Google como caso de estudio

Seminario.- Debate: P2P, propiedad intelectual y difusión de la cultura

Seminario.- Sistemas de control de versiones: SVN y Git

Práctica.

Sesión 1.- Introducción a Java (fase 0)

Sesión 2.- Programación multihilo en Java (fase 1)

Sesión 3.- Servicios web REST en Java (fase 2)

Sesión 4.- Práctica obligatoria

Sesión 5.- Práctica opcional

6. Metodologías Docentes

La metodología que se seguirá cubre diferentes apartados:

Por un lado, mediante las sesiones de teoría se expondrán los fundamentos necesarios para entender las técnicas algorítmicas existentes para la resolución de problemas distribuidos básicos. Para cada problema, se expondrán sus características, se harán asunciones sobre el modelo de sistema, se explicarán las soluciones algorítmicas disponibles y se debatirá sobre sus ventajas y desventajas. Cada tema teórico se explicará en una sesión de dos horas, o dos sesiones de una hora, dependiendo del horario que se establezca (a excepción del tema 4, que se dará en dos sesiones de dos horas). En cada sesión se expondrán los aspectos y problemas fundamentales del tema, explicando los conceptos o métodos más complejos y atendiendo a las dudas de los alumnos. Es altamente recomendable que el alumno estudie, a menos superficialmente, el tema antes de la sesión correspondiente.

Por otro lado, mediante las sesiones de práctica se estudiarán algunos de estos problemas en un entorno real, para llegar a comprender en toda su dimensión estos problemas y su resolución, así como las limitaciones y facilidades que nos impone el entorno de red y las técnicas de programación elegidas. De nuevo, cada sesión práctica corresponderá a dos horas de clases presenciales, en las que se expondrá el problema y se atenderán dudas. Asimismo, durante las distintas fases de la práctica, se debatirá sobre la fase anterior, para ver los problemas y dudas que han surgido y analizar las soluciones alcanzadas.

Por último, los seminarios servirán para exponer aspectos tangenciales a la asignatura, pero de especial relevancia por su actualidad o utilidad en el mundo profesional y/o académico. Estos seminarios pretender ser más participativos y abiertos que las clases magistrales, donde, debido a la complejidad de la materia, habrá que dedicar mucho tiempo a explicaciones de tipo teórico. Se han planeado dos seminarios, cada uno de una hora, pero su contenido puede estar sujeto a cambios, según las necesidades del alumnado. Cada seminario podrá ser acompañado de un debate evaluable.

Se fomentará el trabajo en equipo, de modo que las prácticas se realizarán en la medida de lo posible por parejas o grupos.

7. Distribución de las Metodologías Docentes

8. Recursos

Libros de consulta para el alumno.

Todo el material didáctico necesario se pondrá a disposición de los alumnos a través de la página web personal y de la plataforma Studium. Los libros básicos de consulta están a disposición del alumnado en la Biblioteca del Centro, en especial:

Cómo se organizan las máquinas. Santamaría R, Ed. Univ. de Salamanca. 2024

https://eusal.es/producto/como-se-organizan-las-maquinas-una-introduccion-a-los-sistemas-distribuidos/

Distributed Systems: Concepts and Desing (5ed.) Coulouris et al. Addison-Wesley, 2012.

https://brumario.usal.es/permalink/34BUC_USAL/1f9g4ai/alma991001193409705773

 

 

Otras referencias bibliográficas, electrónicas o cualquier otro tipo de recurso.

Distributed Systems (3ed). Steen and Tanenbaum, 2017. Disponible aquí:  https://www.distributed-systems.net/index.php/books/ds3/

Compilación de artículos científicos relacionados con la asignatura. Disponibles aquí: http://vis.usal.es/rodrigo/documentos/sisdis/papers/

Tutoriales sobre concurrencia, hilos, sincronización e interbloqueo: http://download.oracle.com/javase/tutorial/essential/concurrency

-Documentación sobre Jersey:

https://eclipse-ee4j.github.io/jersey.github.io/documentation/latest/index.html

9. Evaluación

Criterios de evaluación.

Esta asignatura debe dar al alumno los conocimientos básicos para entender un sistema distribuido: su complejidad, los distintos problemas asociados (concurrencia, interbloqueo, tiempos físicos, escalabilidad, etc.), las soluciones algorítmicas a dichos problemas (sincronización, acuerdo, optimización, tiempos lógicos, etc.) y la aplicación de dichas soluciones teóricas en casos reales (limitaciones y particularidades de la red, comunicación distribuida, disparidad de equipos/sistemas, etc.)

 

La calificación final se ponderará de acuerdo con tres puntos principales:

  1. Realización de pruebas teóricas y examen: un 50%* de la calificación final. Para su superación se requerirá un conocimiento suficiente del funcionamiento de los sistemas distribuidos y de los algoritmos y técnicas básicas para su gestión, coordinación y explotación. Dicho conocimiento se obtiene a través del estudio del material teórico y las clases magistrales
  2. Defensa de prácticas, trabajos o proyectos: un 50%* de la calificación final. El conocimiento teórico nos da las bases para construir un sistema distribuido, pero la puesta en marcha de dicho sistema sólo es posible con la experiencia obtenida de la implementación práctica en un sistema real.
  3. Evaluación continua: un 10% adicional sobre la calificación final. Se evalúa de manera positiva la asistencia proactiva a las sesiones, la participación en foros y seminarios, el interés demostrado mediante dudas bien formuladas o compartición de puntos de vista, la capacidad de desarrollo autónomo sin el profesor, de trabajo en grupo. Todo lo anterior serán evidencias que podrán ser tomadas en este 10% adicional.

* Es indispensable llegar al porcentaje medio en teoría y en práctica (un 25% en cada una) para superar la asignatura. En la parte práctica este límite puede ser un poco más bajo según las prácticas entregadas.

Sistemas de evaluación.

  1. Pruebas de teoría: se realizará un único examen teórico, en papel, mediante una serie de preguntas a desarrollar o tipo test, que será evaluado por el profesor, teniendo en cuenta los requisitos mínimos de conocimientos sobre sistemas distribuidos establecidos en el temario.
  2. Evaluación de prácticas: las prácticas se entregarán a través de Studium, en plazos bien determinados. La evaluación de las prácticas entregadas tendrá lugar en el laboratorio de informática, mediante el uso de varios ordenadores conectados en red. Se evaluará tanto la calidad teórica y de diseño del código fuente, como su defensa por parte del alumno y la corrección de su ejecución (siendo este último requisito indispensable para aprobar la parte práctica). En particular se evaluará una práctica obligatoria y una práctica opcional, así como ejercicios opcionales previos.
  3. Evaluación continua: Todos los valores evaluables serán considerados de la manera más objetiva posible, a partir del cumplimiento de los criterios de evaluación continua (participación, debates, etc.)

Dada la dificultad y diversidad de la casuística en la parte práctica, se recomienda establecer unos criterios mínimos de funcionamiento que deben darse para su superación.

Un aspecto muy importante de la formación de un ingeniero es la ética profesional. Por tanto, recomendamos fuertemente el suspenso automático de ambas partes si se detecta y demuestra la copia, total o parcial, en un ejercicio práctico o en el ejercicio teórico final.

Recomendaciones para la recuperación:

Partes del temario teórico están íntimamente ligadas al desarrollo de las prácticas, pero en general es razonable poder aprobar la parte teórica sin aprobar la parte práctica o viceversa. Se recomienda por tanto guardar la nota obtenida en una de las partes para la recuperación de la otra.

Recomendaciones para la evaluación.

Esta asignatura debe dar al alumno los conocimientos básicos para entender un sistema distribuido: su complejidad, los distintos problemas asociados (concurrencia, interbloqueo, tiempos físicos, escalabilidad, etc.), las soluciones algorítmicas a dichos problemas (sincronización, acuerdo, optimización, tiempos lógicos, etc.) y la aplicación de dichas soluciones teóricas en casos reales (limitaciones y particularidades de la red, comunicación distribuida, disparidad de equipos/sistemas, etc.)

Dada la dificultad y diversidad de la casuística en la parte práctica, se recomienda establecer unos criterios mínimos de funcionamiento que deben darse para su superación.

Un aspecto muy importante de la formación de un ingeniero es la ética profesional. Por tanto, recomendamos fuertemente el suspenso automático de ambas partes, en ambas convocatorias ordinarias, si se detecta y demuestra la copia, total o parcial, en un ejercicio práctico o en el ejercicio teórico final.

Recuperación:

Partes del temario teórico están íntimamente ligadas al desarrollo de las prácticas, pero en general es razonable poder aprobar la parte teórica sin aprobar la parte práctica o viceversa. Se recomienda por tanto guardar la nota obtenida en una de las partes para la recuperación de la otra