Curso:                2009/2010
Centro:               Escuela Politécnica Superior
Estudios:             2º Ciclo de Ingeniería en Informática
Asignatura:           Diseño de Sistemas Operativos
Ciclo:                2º
Curso:                4º
Cuatrimestre:         1º
Carácter:             Optativa
Créditos teóricos:    3
Créditos prácticos:   3
Profesores:           Antonio Corral Liria
Área:                 Lenguajes y Sistemas Informáticos
Departamento:         Lenguajes y Computación
                                             TEMARIO
PROGRAMA DE TEORÍA:
Tema 1: Visión general e introducción al kernel
1.1. Introducción histórica a UNIX y Linux
1.2. Visión general de UNIX
1.3. Introducción al kernel de UNIX
1.4. Introducción a Linux
  1.4.1. Funciones del sistema operativo
  1.4.2. Descripción de Linux y de sus funcionalidades
  1.4.3. Estructura general del sistema operativo Linux
  1.4.4. Organización del código fuente del kernel
  1.4.5. Funcionamiento general del kernel de Linux
    1.4.5.1. Implementación de una llamada al sistema
    1.4.5.2. Creación de una llamada al sistema
Tema 2: Gestión de Procesos
2.1. Estados y transiciones de un proceso
2.2. Estructuras de datos del sistema para la gestión de procesos
2.3. Organización de la memoria del sistema
2.4. El contexto de un proceso. Concepto y tipos
2.5. Manipulación del contexto de un proceso
2.6. Manipulación del espacio de direcciones de un proceso.
      Algoritmos
2.7. Llamadas al sistema para la gestión de procesos
2.8. Sincronización de procesos en Linux
2.9. Señales y funciones de tiempo
2.10. Nociones básicas de planificación de procesos en UNIX. El
      scheduler de Linux
Tema 3: Gestión de Memoria
3.1. Introducción
3.2. Memoria virtual
3.3. Gestión de memoria en UNIX
3.4. Gestión de memoria en Linux
  3.4.1. Visión general
  3.4.2. Direccionamiento de memoria en Linux
  3.4.3. Gestión de memoria en Linux
  3.4.5. Cachés en Linux para la gestión de la memoria
Tema 4: Sistema de Archivos
4.1. Características del sistema de archivos de UNIX
4.2. Estructura general de un sistema de archivos de UNIX
4.3. Representación interna de los archivos en UNIX
4.4. Llamadas al sistema para el sistema de archivos de UNIX
4.5. Consistencia y mantenimiento del sistema de archivos de UNIX
4.6. El Sistema de Archivos Virtual (Virtual File System, VFS) de
      Linux
4.7. Buffer caché
4.8. El Segundo Sistema de Archivos Extendido (EXT2)
4.9. El sistema de archivos /proc
Tema 5: Gestión de Dispositivos de E/S
5.1. Arquitectura de E/S
5.2. Puertos de E/S
5.3. Interfaces de E/S
5.4. Controladores de dispositivos
5.5. Archivos de dispositivo (archivos especiales)
5.6. Drivers de dispositivo
5.7. Drivers de dispositivo de bloque
5.8. Drivers de dispositivo de carácter
Tema 6 Comunicación entre Procesos
6.1. Comunicación mediante tuberías
  6.1.1. Conceptos básicos
  6.1.2. Llamadas al sistema básicas
  6.1.3. Presentación general de la implementación
  6.1.4. Presentación detallada de la implementación
6.2. IPC System V
  6.2.1. Conceptos básicos
  6.2.2. Llamadas al sistema básicas
  6.2.3. Conceptos avanzados
  6.2.4. Presentación general de la implementación
  6.2.5. Presentación detallada de la implementación
PROGRAMA DE PRÁCTICAS DE LABORATORIO:
Práctica 1: Arranque de Linux y compilación del kernel
1.1. Introducción
1.2. Las órdenes en UNIX
1.3. Ayuda en línea: orden man
1.4. Manejo básico de directorios y archivos
1.5. Órdenes comunes de Linux
1.6. El arranque de Linux
1.7. Utilidades para la compilación y enlazado (gcc y make)
1.8. Compilación del kernel
1.9. Programas ejemplo (proyección en memoria de archivos)
Práctica 2: Llamadas al sistema en Linux
2.1. Introducción y ejemplo básico de llamada al sistema
2.2. Objetivos de la práctica
2.3. Funcionalidad de la llamada al sistema (sys_generacion)
2.4. Implementación a nivel de kernel del sistema operativo
2.5. Implementación a nivel de biblioteca
2.6. Comprobación del funcionamiento
Práctica 3: Módulos cargables del kernel
3.1 Introducción
3.2. Los módulos cargables en Linux (Loadable Kernel Modules, LKM)
3.3. Programación de módulos cargables
3.4. Utilización de los módulos
3.5. Enunciado de la práctica
3.6. Comprobación del funcionamiento
Práctica 4: Añadir funcionalidad al kernel de Linux, utilizando
            módulos cargables
4.1. Visualización de los descriptores de procesos
4.2. Visualización del espacio de direcciones virtual bajo Linux
4.3. Ejemplo de un driver de dispositivo modo carácter. LEDs de un
      teclado estándar
  4.3.1. E/S en UNIX
  4.3.2. Programación del driver
    4.3.2.1. Acceso a los puertos del PC
    4.3.2.2. Reserva de puertos
    4.3.2.3. Registro del driver en el sistema
    4.3.2.4. Resumen del proceso de carga/descarga del driver
    4.3.2.5. Funciones de manejo del dispositivo
  4.3.3. Ejemplo sencillo de un driver
  4.3.4. Comprobación del funcionamiento
4.4. Ocultar archivos, interceptando llamadas al sistema
BIBLIOGRAFÍA BÁSICA:
  •   Linux Kernel Architecture. W. Mauerer. Wiley, 2008.
  •   Linux System Programming. R. Love. O’Reilly, 2007.
  •   Linux Kernel Development. R. Love. Sams, 2005.
  •   Understanding the Linux Kernel. D.P. Bovet, M. Cesati. O’Reilly,
      2002.
  •   Linux Kernel Programming. M. Beck, H. Böhme, M. Dziadzka, U.
      Kunitz, R. Magnus, C. Schröter, D. Verworner. Addison Wesley,
      2002.
  •   El kernel 2.4 de Linux. F. Sánchez, R. Arango. Prentice Hall,
      2003.
  •   Programación Linux 2.0. API de Sistema y Funcionamiento del
      Núcleo. R. Card, E. Dumas, F. Mével. Ediciones Gestión 2000,
      1997.
  •   The Design of the UNIX Operating System. M.J. Bach. Prentice
      Hall, 1986.
  •   UNIX. Programación Avanzada. F.M. Márquez. Ra-Ma, 1996.
  •   Sistemas Operativos: una Visión Aplicada. J. Carretero, F.
      García, P. de Miguel, F. Pérez. McGraw-Hill, 2001.
  •   Sistemas Operativos. Principios de Diseño e Interioridades. W.
      Stallings. Prentice Hall, 2001.
  •   Linux Device Drivers. A. Rubini, J. Corbet. O'reilly, 2001.
  •   Interprocess Communication in Linux. J.S. Gray. Prentice Hall,
      2003.
  •   Curso de C bajo UNIX. D.R. Llanos. Paraninfo, 2001.
EVALUACIÓN:
  1. Prácticas obligatorias (60% de la nota final). Éstas deben ser
     superadas para poder realizar el examen final. Además, estas
     afectarán en un 60% a la nota final de la asignatura en caso de
     aprobar el examen, caso de suspenderlo, no afectarán a la nota
     final de la asignatura.
  2. Examen final (40% de la nota final): Convocatoria ordinaria
     (Febrero 2010).
  3. Examen extraordinario (40% de la nota final): Convocatorias
     extraordinarias que decida la Escuela Politécnica Superior de
     la Universidad de Almería (Diciembre 2009 (caso de haberse
     matriculado en cursos académicos anteriores) o Septiembre
     2010).