Última actualización: 18/05/2022


Curso Académico: 2022/2023

Arquitectura de Sistemas
(15376)
Doble Grado Ciencia e Ingeniería de Datos - Ingeniería en Tecnologías de Telecomunicación (Plan: 456 - Estudio: 371)


Coordinador/a: MORENO MARCOS, PEDRO MANUEL

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

Tipo: Obligatoria
Créditos: 6.0 ECTS

Curso:
Cuatrimestre:




Requisitos (Asignaturas o materias cuyo conocimiento se presupone)
Se recomienda haber superado tanto Programación como Programación de Sistemas, y Electrónica Digital
Objetivos
1. 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. 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. 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. 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. 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.
Competencias y resultados del aprendizaje
Descripción de contenidos: Programa
1. 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 2. Gestión de memoria dinámica en C - Estructuras de datos dinámicas - Fugas de memoria - Herramientas para detectar fugas de memoria 3. Sistemas Operativos - Procesos e hilos - Creación de procesos - Comunicación entre procesos: tuberías y señales - Concurrencia y mecanismos de sincronización: cerrojos, semáforos y monitores 4. 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: - 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. - 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. - Durante las sesiones de laboratorio se escriben fragmentos de código para crear, destruir y manipular estructuras de datos utilizando memoria dinámica. También se dividirá la funcionalidad del programa requerido entre múltiples funciones de las que escriben su código. - Durante un período de nueve semanas, se trabajará en equipos que deben ejecutar un proyecto consistente en el diseño de una aplicación software. - 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, correo electrónico. Explicar los requisitos derivados de las especificaciones de trabajo en un tema. - 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. - Uso de las siguientes herramientas: máquinas virtuales, compilador y controlador de versiones. 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 50
  • Peso porcentual del resto de la evaluación 50
Calendario de Evaluación Continua
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 podría sufrir alguna variación por causa de fuerza mayor debidamente justificada o por eventos académicos comunicados con antelación.