Última actualización: 24/04/2019


Curso Académico: 2019/2020

Arquitectura de Sistemas
(15376)
Titulación: Grado en Ingeniería en Tecnologías de Telecomunicación (252)


Coordinador/a: ESTEVEZ AYRES, IRIA MANUELA

Departamento asignado a la asignatura: Departamento de Ingeniería Telemática

Tipo: Obligatoria
Créditos: 6.0 ECTS

Curso:
Cuatrimestre:




Materias que se recomienda haber superado
Se recomienda encarecidamente haber superado tanto Programación como Programación de Sistemas. Además se recomienda haber cursado Electrónica Digital, dado que es necesario un conocimiento sobre representación de la información en los sistemas digitales y el uso de funciones y expresiones booleanas en esta asignatura.
Competencias que adquiere el estudiante y resultados del aprendizaje.Más información en este enlace
1. El estudiante debe ser capaz de diseñar un sistema software. El sistema debe contener estructuras de datos no triviales, gestión dinámica de memoria, procesos y comunicación entre procesos y utilizar técnicas de ingeniería para traducir un conjunto de restricciones de alto nivel, derivadas de un hipotético escenario industrial, en una aplicación robusta. 2. El estudiante debe ser capaz de comprender el concepto de proceso e hilo, entender distintos problemas de concurrencia y aplicar para cada caso los mecanismos de sincronización adecuados. 3. El estudiante debe ser capaz de utilizar con soltura las siguientes herramientas utilizadas en entornos industriales: un compilador con las opciones para generar diferentes versiones para depuración y analizar los mensajes que se obtienen mientras se desarrolla una aplicación, un programa de control de versiones para manejar los flujos de desarrollo y herramientas de análisis del comportamiento de memoria en una aplicación. 4. El estudiante debe ser capaz de: trabajar de forma efectiva en un equipo en la ejecución de un proyecto consistente en el diseño de una aplicación software, generar ideas de forma colaborativa en un equipo y optimizar su rendimiento para cumplir con los requisitos del proyecto, y dividir las tareas de forma efectiva entre los miembros del equipo. 5. El estudiante debe ser capaz de: aprender de forma autónoma, manipular las diferentes fuentes de información, generar información concisa sobre las tareas conseguidas, manejar el tiempo de trabajo personal, y presentar de forma efectiva los resultados derivados de su trabajo.
Descripción de contenidos: Programa
1. Sistemas Operativos - Procesos e hilos - Concurrencia y mecanismos de sincronización: cerrojos, semáforos y monitores. 2. El lenguaje de programación C - Estructuras de datos básicas y construcciones de flujo - Estructura de una aplicación C. El pre-procesador, división de ficheros, creación de un ejecutable - Funciones (con varios parámetros, con parámetros variables) - Manipulación de punteros y punteros a funciones - Funciones de entrada/salida con ficheros. 3. Gestión de memoria dinámica en C - Estructuras de datos dinámicas - Fugas de memoria - Herramientas para detectar fugas de memoria 4. Programación multiproceso en C - Creación de procesos - Comunicación entre procesos: tuberías y señales 5. Diseño del proyecto mediante trabajo en equipo
Actividades formativas, metodología a utilizar y régimen de tutorías
Las actividades utilizadas para verificar las competencias y destrezas en el curso son (seguidas por la referencia a los objetivos del programa): - Ejercicios sobre los siguientes temas: diseño de las estructuras de datos más apropiadas para una funcionalidad en una aplicación, escribir fragmentos de código para manipular estructuras de datos, lectura/escritura de campos de las estructuras, datos sobre los procesos, creación y comunicación de procesos e hilos etc; cálculo de la cantidad de memoria ocupada por diferentes estructuras de datos (OP: a). - Durante las sesiones de laboratorio se escriben, compilan, enlazan y ejecutan fragmentos de código con las diferentes opciones del compilador para incluir información de depuración, definir constantes, etc. Se analiza la corrección de estos fragmentos de código con el depurador (OP: b). - Durante las sesiones de laboratorio se escriben fragmentos de código para crear, destruir y manipular estructuras de datos utilizando memoria dinámica. Los estudiantes también dividen la funcionalidad del programa requerido entre múltiples funciones de las que escriben su código (OP: c). - Durante un período de nueve semanas, los estudiantes se dividen en equipos que deben ejecutar un proyecto consistente en el diseño de una aplicación software con múltiples hitos, entregables y objetivos (OP: d). - Escribir el acta detallada de las reuniones del equipo con las acciones propuestas y las conclusiones obtenidas. Intercambiar información con los miembros del equipo utilizando chats, foros, email. Explicar los requisitos derivados de las especificaciones de trabajo en un tema (OP: g). - Búsqueda de documentos auxiliares para completar la información que se estudia en un tema. En su informe final, deben mencionar las fuentes de información utilizadas (OP: i). - Uso de las siguientes herramientas: máquinas virtuales, compilador y controlador de versiones en las sesiones de laboratorio (OP: k). Durante estas actividades la plantilla docente revisa el trabajo de los estudiantes en la clase, supervisa las sesiones de laboratorio, responde a las preguntas en el foro del curso, mantiene una hora de tutoría semanal en el despacho y convoca tutorías con múltiples alumnos cuando lo considera oportuno.
Sistema de evaluación
  • Peso porcentual del Examen Final 45
  • Peso porcentual del resto de la evaluación 55
Bibliografía básica
  • Abraham Silberschatz. Operating system concepts. John Wiley & Sons. 2002
  • C. Michael Pilato, Ben Collins-Sussman y Brian W. Fitzpatrick. Version Control with Subversion, 2nd Edition. O'Reilly Media, Inc.. 2008
  • David Griffiths y Dawn Griffiths. Head First C. O'Reilly Media, Inc.. 2012
  • Michael Kerrisk. The Linux Programming Interface. No Starch Press. 2010
  • Richard Reese. Understanding and Using C Pointers. O'Reilly Media, Inc.. 2013
  • Stephen G. Kochan. Programming in C, Fourth Edition. Addison-Wesley Professional. 2014
Bibliografía complementaria
  • Brian W. Kernighan, Dennis M. Ritchie. The C programming language. Prentice Hall. 1988
  • Daniel Leuck, Patrick Niemeyer. Learning Java. O'Reilly Media, Inc.. 2013
  • Félix García Carballeira et al.. El lenguaje de programación C : diseño e implementación de programas. Pearson. 2001
  • Jesús Carretero Perez, Felix García Carballeira et al.. Problemas resueltos de programación en lenguaje C. Paraninfo. 2004
  • Joost Visser; Sylvan Rigal, Gijs Wijnholds y Zeeger Lubsen. Building Software Teams. O'Reilly Media, Inc.. 2016
  • Steve McConnell. Code Complete, Second Edition. Microsoft Press. 2004

El programa de la asignatura y la planificación semanal podrían sufrir alguna variación por causa de fuerza mayor debidamente justificada o por eventos académicos comunicados con antelación.