2o año del Gado en ingenieria informática de la UPV Curso del 2016-2017
- Manel Lurbe Sempere
CONCURRENCIA Y SISTEMAS DISTRIBUIDOS permitirá que el alumno identifique y resuelva los problemas planteados por la ejecución de múltiples actividades concurrentes en una misma aplicación informática. Tales problemas aparecen a la hora de acceder a recursos compartidos y pueden generar resultados o estados inconsistentes en tales recursos. Para evitarlos se deben emplear ciertos mecanismos de sincronización, que el alumno aprenderá a utilizar de manera adecuada. A modo práctico, se resolverán problemas utilizando programación concurrente en Java. Por otro lado, en los sistemas de tiempo real aparecen otras restricciones sobre el uso de estos mecanismos, que el alumno identificará y gestionará correctamente, realizando el cálculo de planificabilidad del sistema. Finalmente, el alumno conocerá las diferencias y particularidades que comporta el diseño y desarrollo de una aplicación distribuida. Para ello, entre otros aspectos, se describirán los mecanismos necesarios para proporcionar transparencia y escalabilidad. También se describirán las características de los mecanismos de comunicación en sistemas distribuidos, analizando diferentes ejemplos de middleware de comunicación. Además, el alumno conocerá las limitaciones existentes a la hora de resolver problemas de sincronización en entornos distribuidos, analizando los problemas que comporta la gestión del tiempo en un entorno distribuido e identificando las ventajas introducidas por una ordenación lógica de los eventos. También se ilustrarán las soluciones clásicas para algunos problemas de sincronización en un entorno distribuido, tales como la imagen del estado global, la elección de líder y la exclusión mutua.
El alumno recibe una visión de lo que es la profesión y la deontología, primero desde un prisma general y luego focalizándolo en el ámbito de la informática. Se da una visión de la legislación más importante que afecta a su desarrollo profesional (Protección de datos, Propiedad intelectual -tipos de licencias- y otras).
A los aspectos deontológicos y éticos de la profesión y la presentación de los códigos éticos más significativos, se añade el análisis del profesionalismo y competencias en el ámbito de las Tecnologías de la Información y una visión del asociacionismo, así como una visión a la perspectiva de la profesión más allá de nuestras fronteras, en particular, en la Unión Europea. Se hace particular hincapié en la relación de la informática con el medio ambiente.
La asignatura comprende el estudio de las distintas unidades funcionales que integran un computador y que hacen posible la ejecución de los programas, prestando especial atención a cómo diferentes estructuras organizativas de las mismas pueden influir sobre las prestaciones del computador. En este sentido, la asignatura aborda el estudio del procesador, la unidad aritmético-lógica, el sistema de memoria, la unidad de entrada/salida y los dispositivos periféricos.
En el diseño de aplicaciones que manejan volúmenes importantes de datos, cobra gran importancia la adecuada selección del modo de representación de estos y de los algoritmos para su tratamiento. En esta asignatura se presentan las Estructuras de Datos (EDAs) más relevantes y los Esquemas Algorítmicos aplicables a la resolución de problemas de complejidad media, capacitando a los alumnos para elegir, basándose en criterios de eficiencia, los más adecuados para una aplicación dada. Como lenguaje de programación se utilizará Java.
Objetivos principales de la asignatura:
- Estudiar los conceptos básicos, técnicas fundamentales, y organización de los Sistemas Operativos (SO)
- Comprender los problemas que enfrenta un SO y las soluciones algoritmicas que guían la implementación de un SO.
- Conocer los servicios proporcionados por un SO.
- Desarrollar programas en C utilizando llamadas al sistema Unix.
- Adquirir destreza, a nivel de usuario avanzado, en el manejo de Unix.
- Desarrollar utilidades de órdenes de consola utilizando el interprete de órdenes Bash de Unix.
- Los contenidos a tratar en teoría son los siguientes:
- Introducción a los sistemas operativos
- Gestión de procesos
- Gestión de memoria
- Sistemas de ficheros y gestión de la entrada-salida
- Las prácticas cubrirán aspectos concretos de los contenidos estudiados en teoría:
- Programación en C (I)
- Programación en C (II)
- Monitorización de procesos Linux
- Creación de procesos en UNIX
- Creación de hilos POSIX y Sincronización
- Mapas de memoria en Linux
- Llamadas al sistema para archivos en UNIX
- Visualización del sistema de archivos Minix
¿Te peleas a menudo con tu teléfono móvil, o con el microondas de tu casa porque son difíciles de usar? ¿Hay algún programa de ordenador que te resulta especialmente feo? ¿Quieres saber cómo diseñar interfaces que resulten fáciles de usar y cómo hacer programas que parezcan profesionales? En esta asignatura se introducirá al alumno a la disciplina de la interacción persona-computador. Se estudiará el concepto de usabilidad y los aspectos humanos que intervienen en la misma. Se describirá el ciclo de vida de desarrollo de interfaces de usuario, desde la recogida de requisitos al diseño conceptual y el diseño visual de las interfaces. También se estudiarán distintas técnicas de prototipado y de evaluación de interfaces, y cómo aplicar todo ello al desarrollo de un proyecto. Un objetivo importante de la asignatura es que el alumno sea capaz de desarrollar aplicaciones de escritorio con interfaces gráficas de usuario modernas, utilizando herramientas actuales.
Comprender los aspectos esenciales de los diferentes paradigmas de programación y las implicaciones derivadas del uso y diseño de un lenguaje facilita el posterior aprendizaje de lenguajes nuevos, así como su diseño. Asimismo proporciona la base necesaria para una adecuada elección y utilización (posiblemente combinada) de lenguajes y paradigmas en tareas de análisis, diseño, construcción y mantenimiento de aplicaciones de forma robusta, segura y eficiente. El objetivo del curso es introducir los fundamentos, las tecnologías de soporte y las principales aplicaciones de los paradigmas clave en los que se enmarcan los lenguajes de programación actuales. Se presentarán los fundamentos y conceptos de los lenguajes de programación y se ilustrarán usando diferentes lenguajes.
La asignatura introduce al alumno en el estudio de las comunicaciones entre sistemas informáticos, tomando como base la arquitectura TCP/IP empleada actualmente en Internet. El enfoque utilizado es descendente, comenzando el estudio por el nivel de aplicación, último nivel de la arquitectura pero el más familiar al alumno, y siguiendo con los niveles inferiores.
Al tratarse de la primera asignatura sobre comunicaciones en el plan de estudios tiene un carácter general y descriptivo, tratando los distintos aspectos de las redes de computadores pero sin profundizar en los temas de mayor complejidad teórica.
- Tema 1: Introducción a las redes de computadores e Internet.
- Tema 2: Aplicaciones en red.
- Tema 3: Interfaz de programación en red: los sockets.
- Tema 4: El nivel de transporte.
- Tema 5: Seguridad en redes de computadores.
- Tema 6: El nivel de red.
- Tema 7: El nivel de enlace de datos y redes de área local.
- Tema 8: El nivel físico.
En esta asignatura se presenta una introducción de la teoría de lenguajes formales, haciendo especial énfasis en la clase lenguajes regulares.
La asignatura estudia la descripción de estos lenguajes mediante autómatas finitos, expresiones regulares y gramáticas de tipo III. Para mostrar la utilidad de estos conceptos, se estudia la resolución eficiente de un problema de interés, la búsqueda de patrones en un texto o pattern matching, mediante la aplicación de los formalismos expuestos.