martes, 20 de febrero de 2007 Antes de empezar. Capítulo 1: Introducción a los sistemas operativos UNIX/Linux Capítulo 2: Introducción al lenguaje de programación C Capítulo 3: Llamadas al sistema para la gestión de procesos. Capítulo 4: Planificación de procesos Capítulo 5: Sincronización y comunicación de procesos Capítulo 6: Hilos de ejecución (threads) Capítulo 7: Comunicación y sincronización en aplicaciones multihebra Capítulo 8: Llamadas al sistema para la gestión de archivos Anexo I: Introducción a la programación para la shell bash
1.1. Concepto de sistema operativo.
1.2. Evolución de los Sist. Operativos UNIX/Linux.
1.3. Características básicas de UNIX
1.4. Comenzando a trabajar con UNIX/Linux.
1.5. Arranque y acceso al sistema
1.6. El intérprete de línea de comandos o shell.
1.6.1. Sintaxis de las órdenes para la shell
1.6.2. Agrupamiento de órdenes para la shell.
1.6.3. Caracteres especiales (meta caracteres) de la shell
1.7. El sistema de archivos.
1.7.1. Árbol de directorios y rutas de acceso a los archivos.
1.7.2. Algunos subdirectorios importantes.
1.7.3. Permisos de acceso para los archivos.
1.8. Órdenes de la shell de uso más frecuente.
1.8.1. Órdenes para la gestión de directorios
1.8.2. Órdenes para la gestión de archivos
1.8.3. Órdenes para la gestión de procesos.
1.8.4. Otras órdenes de utilidad.
1.9. Ejercicios propuestos.
2.1. El lenguaje C: orígenes y principales características.
2.2. Estructura básica de un programa en C.
2.3. Compilación y ejecución de un programa C..
2.4. Archivos fuente y archivos de cabecera.
2.5. El primer programa en C.
2.6. Un programa con archivos fuente y archivos cabecera.
2.7. El léxico del Lenguaje C.
2.8. Tipos de datos fundamentales o primitivos.
2.9. Variables, constantes y literales
2.10. Operadores y expresiones.
2.11. Mostrando elementos por salida estándar
2.12. Lectura de valores desde teclado.
2.13. Sentencias de control de flujo
2.13.1. Sentencias de Bifurcación
2.13.2. Sentencias de Iteración (Bucles).
2.14. Punteros.
2.14.1. Conceptos básicos
2.14.2. Utilización de punteros en funciones: Paso de argumentos por valor y por referencia.
2.14.3. Punteros a funciones.
2.15. Arrays
2.16. Reserva dinámica de memoria
2.17. Enumeraciones, estructuras y tipos definidos por el usuario.
2.18. Ejercicios propuestos.
3.1. Introducción.
3.2. Conceptos básicos para la gestión de procesos.
3.3. Creación de procesos.
3.4. Espera por la terminación de un proceso: Las llamadas wait() y waitpid()
3.5. Sustitución de la imagen de un proceso: la llamada exec().
3.6. Ejercicios Propuestos
4.1. Introducción.
4.2. Planificación de procesos en Solaris
4.2.1. Conceptos básicos
4.2.2. Las clases de planificación de Solaris.
4.2.3. Comprobación de la ejecución de procesos con planificación Round-Robin.
4.2.4. Comandos para la gestión de prioridades
4.2.5. La llamada al sistema priocntl()
4.3. Los comandos nice y renice
4.4. Las llamadas nice(), getpriority() y setpriority().
4.5. Llamadas POSIX para la planificación de procesos.
4.6. Ejercicios propuestos.
5.1. Introducción
5.2. Señales
5.2.1. Especificación de un manejador de señal
5.2.2. Funciones para configurar la máscara de señales.
5.2.3. La llamada al sistema sigwait().
5.3. Tuberías (pipes).
5.3.1. Creación de tuberías anónimas.
5.3.2. Tuberías con nombre (named pipes o FIFO).
5.3.3. Cierre de accesos a una tubería
5.3.4. Escritura de datos en una tubería
5.3.5. Lectura de datos de una tubería
5.3.6. Código fuente ejemplo
5.4. Colas de mensajes POSIX (POSIX messages queues).
5.4.1. Creación y destrucción de una cola de mensajes.
5.4.2. Envío y recepción de mensajes.
5.4.3. Código fuente ejemplo: El problema de los productoresconsumidores
5.5. Memoria compartida POSIX (POSIX shared memory).
5.5.1. Creación de una zona de memoria compartida.
5.5.2. Liberación de una zona de memoria mapeada.
5.5.3. Código fuente ejemplo: Contador compartido incrementado por dos procesos
5.6. Semáforos POSIX (POSIX semaphores).
5.6.1. Semáforos con nombre (named semaphores).
5.6.2. Semáforos sin nombre o sobre memoria (memory based semaphores).
5.6.3. Código fuente ejemplo
5.7. Ejercicios propuestos.
6.1. Introducción: Concepto de hebra.
6.2. Tipos de hebras.
6.3. Funciones Posix para la gestión básica de hebras
6.3.1. Creación de hebras: La función pthread_create()
6.3.2. Obtención del identificador de una hebra: Las funciónes pthread_self().
6.3.3. Terminación de una hebra: La función pthread_exit()
6.3.4. Reunión de hebras: La función pthread_join().
6.4. Atributos de las hebras POSIX.
6.5. Planificación de las hebras POSIX.
6.6. Código fuente ejemplo.
6.7. Ejercicios Propuestos
7.1. Introducción.
7.2. Condiciones de carrera y necesidad de exclusión mutua
7.3. Semáforos para la sincronización de hebras.
7.4. Semáforos de exclusión mutua.
7.5. Código fuente ejemplo: El problema de los productoresconsumidores con hebras
7.6. Variables de condición
7.7. Construcción de un servidor multihebra
7.8. Problemas propuestos.
8.1. Introducción.
8.2. Estructuras del Sistema Operativo para la gestión de archivos
8.3. Tipos de archivos en UNIX/Linux
8.4. Llamadas al sistema para la gestión de archivos
8.5. Llamadas al sistema para la gestión de directorios.
8.6. Llamadas al sistema para la consulta de la tabla de inodos. .
8.7. Ejercicios propuestos.
AI.1. Introducción.
AI.2. Primeros pasos.
AI.3. Metacaracteres de la shell bash
AI.4. Redirección de entrada y de salida
AI.5. Agrupamientos de órdenes de la shell.
AI.6. Variables de entorno.
AI.7. Ejecución de archivos shell-scripts.
AI.8. Entrecomillado y sustitución.
AI.9. Lectura de variables por teclado y expresiones aritméticas.
AI.10. Parametros de un shell-script y la orden shift
AI.11. La orden test
AI.12. Sentencias de control de flujo