VOLUMEN I
1. Arquitectura básica de un computador 19
1.1 Componentes básicos de un computador 20
1.1.1 Registros del procesador 21
1.1.2 Parámetros característicos de un computador 22
1.2 Ejecución de instrucciones 23
1.2.1 Instrucciones máquina 24
1.2.2 Modos de ejecución 25
1.3 Interrupciones 25
1.3.1 Múltiples interrupciones y niveles de interrupción 27
1.3.2 El reloj 28
1.4 Arranque de un computador 29
1.5 Jerarquía de memoria 29
1.5.1 Rendimiento de la jerarquía de memoria 30
1.5.2 Funcionamiento básico de la memoria caché 31
1.5.3 Memoria Virtual 32
1.6 Sistemas de entrada/salida 40
1.6.1 Clasificación y tipos de dispositivos periféricos 40
1.6.2 Técnicas de Entrada/salida 43
1.6.3 Buses 47
1.6.4 E/S y concurrencia 48
1.7 Mecanismos de protección en el computador 49
1.7.1 Protección del procesador 49
1.7.2 Protección de la memoria 49
1.7.3 Protección de la entrada/salida 50
1.8 Multiprocesadores, multicomputadores y sistemas multicore 50
1.9 Lecturas recomendadas 52
1.10 Ejercicios 52
2. Introducción a los sistemas operativos 55
2.1 ¿Qué es un sistema operativo? 56
2.1.1 Sistema operativo 57
2.1.2 Funciones del sistema operativo 58
2.1.3 Concepto de usuario y de grupo de usuarios 60
2.2 Historia de los sistemas operativos 61
2.3 Tipos de sistemas operativos 69
2.4 Arranque y parada del sistema 70
2.4.1 Arranque hardware y Reset 71
2.4.2 Carga del sistema operativo o boot 72
2.4.3 Arranque del sistema operativo 72
2.4.4 Parada del computador 73
2.5 Activación del sistema operativo 73
2.5.1 Servicios del sistema operativo y llamadas al sistema 74
2.6 Servicios del sistema operativo 77
2.6.1 Gestión de procesos 78
2.6.2 Gestión de memoria 80
2.6.3 Comunicación y sincronización entre procesos 81
2.6.4 Gestión de la E/S 82
2.6.5 Gestión de ficheros y directorios 83
2.6.6 Seguridad y protección 87
2.7 Interfaz de usuario del sistema operativo 87
2.7.1 Funciones de la interfaz de usuario 88
2.7.2 Interfaces alfanuméricas 89
2.7.3 Interfaces gráficas 90
2.7.4 Ficheros de mandatos o shell-scripts 92
2.8 Diseño del sistema operativo 95
2.8.1 Estructura del sistema operativo 95
2.8.2 Carga dinámica de módulos 99
2.8.3 Aumento de prestaciones 99
2.8.4 Diseño del intérprete de mandatos 101
2.9 Lecturas recomendadas 102
2.10 Ejercicios 103
3. Procesos y threads 104
3.1 Concepto de proceso 105
3.2 Multitarea 106
3.2.1 Fundamentos de la multitarea 106
3.2.2 Ventajas de la multitarea 107
3.3 Información de un proceso 109
3.3.1 Estado del procesador 110
3.3.2 Imagen de memoria de un proceso 110
3.3.3 Información del bloque de control de proceso (BCP) 113
3.4 Ciclo de vida de un proceso 113
3.4.1 Creación del proceso 113
3.4.2 Interrupción de un proceso 115
3.4.3 Activación de un proceso 116
3.4.4 Terminación de un proceso 116
3.4.5 Estados de un proceso 116
3.4.6 Estados de espera y suspendido 117
3.5 Tablas del sistema operativo 118
3.6 Planificación 120
3.7 Señales y excepciones 121
3.7.1 Señales POSIX 121
3.7.2 Excepciones en Windows 122
3.8 Temporizadores 123
3.9 Procesos especiales 123
3.9.1 Proceso servidor 123
3.9.2 Demonio 124
3.9.3 Proceso de usuario y proceso de núcleo 124
3.10 Threads 125
3.10.1 Gestión de threads 127
3.10.2 Creación, ejecución y terminación de threads 127
3.10.3 Estados de un thread 127
3.10.4 Paralelismo 128
3.10.5 Diseño con threads 129
3.11 Aspectos de diseño del sistema operativo 130
3.11.1 Núcleo con ejecución independiente 130
3.11.2 Núcleo con ejecución dentro de los procesos de usuario 131
3.12 Tratamiento de interrupciones 134
3.12.1 Interrupciones y expulsión 134
3.12.2 Detalle del tratamiento de interrupciones 137
3.12.3 Llamadas al sistema operativo 142
3.12.4 Cambios de contexto voluntario e involuntario 144
3.13 Servicios 145
3.13.1 Servicios POSIX para la gestión de procesos 145
3.13.2 Servicios POSIX de gestión de threads 160
3.13.3 Servicios POSIX para gestión de señales y temporizadores 164
3.14 Lecturas recomendadas 170
3.15 Ejercicios 171
4. Planificación del procesador 173
4.1 Introducción 174
4.2 El problema general de la planificación 175
4.2.1 Objetivos de un esquema de planificación de recursos 177
4.2.2 Planificación expulsiva o no expulsiva 179
4.2.3 Planificación por prioridad 180
4.2.4 Planificación equitativa proporcional 180
4.2.5 Planificación de tiempo real frente a “de mejor esfuerzo” 182
4.2.6 Planificación work-conserving o non-work-conserving 185
4.2.7 Planificación de recursos con múltiples ejemplares 186
4.2.8 Planificación de los recursos de un computador 188
4.2.9 Planificación de colas de mensajes en la red 189
4.3 Caracterización de los procesos 190
4.3.1 Perfil de uso del procesador 190
4.3.2 Grado de interactividad 192
4.3.3 Nivel de urgencia 192
4.3.4 Equidad proporcional y grupos de procesos 193
4.3.5 Procesos con requisitos temporales 195
4.3.6 Soporte de múltiples clases de procesos 196
4.3.7 Planificación de máquinas virtuales 197
4.4 Objetivos de la planificación 198
4.4.1 Parámetros de evaluación del planificador 198
4.4.2 Modelo del planificador 199
4.4.3 Evaluación de un planificador 201
4.5 Niveles de planificación 202
4.6 Anidamiento de planificadores 205
4.7 Mecanismos y políticas de planificación 206
4.7.1 Estructura del planificador del procesador 206
4.7.2 Puntos de activación del planificador 207
4.7.3 El cambio de contexto 209
4.7.4 Políticas de planificación 211
4.8 Algoritmos no expulsivos 212
4.8.1 Primero en llegar primero en ejecutar (FCFS) 213
4.8.2 Primero el trabajo más corto (SJF) 215
4.8.3 Planificación basada en prioridades 218
4.8.4 Planificadores no expulsivos equitativos 223
4.9 Algoritmos expulsivos 224
4.9.1 Primero el de menor tiempo restante (SRTF) 224
4.9.2 Turno rotatorio (Round Robin) 226
4.9.3 Planificación expulsiva basada en prioridades 234
4.9.4 Planificación mediante cola multinivel con realimentación 237
4.9.5 Planificación por lotería 239
4.9.6 Planificación equitativa proporcional basada en tiempo virtual 243
4.10 Planificación de tiempo real 252
4.10.1 Planificación cíclica 253
4.10.2 Planificación monótona en frecuencia (RMS) 255
4.10.3 Planificación por tiempo límite (EDF) 258
4.10.4 Gestión de procesos que usan recursos compartidos 260
4.10.5 Gestión de procesos aperiódicos 266
4.11 Planificación jerárquica 270
4.12 Planificación de threads 274
4.13 Planificador para un sistema real 276
4.13.1 Esquema integrado basado en prioridades 277
4.13.2 Esquema de planificación jerárquico 279
4.13.3 Otras consideraciones sobre la planificación en un sistema real 279
4.13.4 Planificación en Windows 281
4.13.5 Planificador Rotating Staircase Deadline (RSDL) 283
4.14 Planificación en multiprocesadores 284
4.14.1 Evolución de los multiprocesadores 284
4.14.2 Multiprocesamiento asimétrico y simétrico 289
4.14.3 Modelos de planificación de un sistema multiprocesador 291
4.14.4 Afinidad 293
4.14.5 Gestión de los procesadores 302
4.14.6 Planificación global 303
4.14.7 Planificación particionada con migración 312
4.14.8 Planificación de tiempo real en multiprocesadores 319
4.14.9 Planificación de aplicaciones paralelas en un multiprocesador 323
4.15 Gestión de grupos de procesos 327
4.15.1 Precedentes en la gestión de grupos de procesos 327
4.15.2 Gestión de grupos de procesos para el control de recursos 328
4.15.3 Espacios de nombres de recursos para los grupos de procesos 329
4.16 Planificación y virtualización 332
4.16.1 Planificación en la virtualización basada en un hipervisor 333
4.16.2 Planificación en la virtualización soportada por el S.O. 349
4.17 La planificación en Linux 362
4.17.1 Planificador O(n) 364
4.17.2 Planificador O(1) 365
4.17.3 Planificador CFS 367
4.17.4 Planificación en sistemas multiprocesador 378
4.17.5 Control groups (cgroups) 382
4.17.6 Espacios de nombres 387
4.17.7 ¿De qué están hechos los contenedores en Linux? 391
4.17.8 Valoración final de la planificación en Linux 392
4.18 Servicios de planificación 392
4.18.1 Servicios de planificación para procesos normales 393
4.18.2 Servicios para la gestión de procesos en tiempo real 402
4.18.3 Servicios de gestión de procesadores 415
4.18.4 Uso de cgroups 420
4.18.5 Uso de namespaces 421
4.18.6 Creando un gestor de contenedores en Linux 423
4.18.7 Planificación de threads 430
4.19 Lecturas recomendadas 436
4.20 Ejercicios 436
5. Gestión de memoria 443
5.1 Introducción 444
5.2 Aspectos generales 445
5.2.1 Niveles de gestión de memoria 445
5.2.2 Necesidades de los programas 447
5.2.3 Objetivos del sistema de gestión de memoria 457
5.2.4 Problema general de la asignación de memoria 466
5.2.5 El largo camino del acceso simbólico al real 478
5.3 Modelo de memoria de un proceso 483
5.3.1 Implementación de los diversos tipos de objetos de memoria 484
5.3.2 Ciclo de vida de un programa 498
5.3.3 Compilación 498
5.3.4 Montaje 511
5.3.5 Carga y ejecución 529
5.3.6 Bibliotecas estáticas 530
5.3.7 Bibliotecas dinámicas 535
5.3.8 Mapa de memoria de un proceso 563
5.4 Gestión de la memoria del sistema 571
5.4.1 Esquema de asignación contigua 571
5.4.2 Segmentación 578
5.4.3 Paginación 584
5.4.4 Segmentación paginada 601
5.4.5 Uso de un único espacio de direcciones 605
5.5 Memoria virtual 607
5.5.1 Intercambio 607
5.5.2 Overlays 608
5.5.3 Fundamento de la memoria virtual 608
5.5.4 Ciclo de vida de una página 609
5.5.5 Políticas de administración de la memoria virtual 611
5.5.6 Política de localización 611
5.5.7 Política de extracción 613
5.5.8 Política de reemplazo 615
5.5.9 Política de reparto de espacio entre los procesos 622
5.5.10 Gestión del espacio de swap 625
5.5.11 Compartición de páginas 626
5.5.12 Gestión de la memoria del sistema operativo 628
5.5.13 Coherencia de la jerarquía de memoria 630
5.5.14 Operaciones del nivel de sistema y de proceso 634
5.5.15 Ficheros proyectados en memoria 636
5.6 Seguridad 637
5.7 Virtualización de la memoria 640
5.7.1 Gestión de la memoria por el hipervisor 641
5.7.2 Virtualización de la paginación 642
5.8 Servicios de gestión de memoria 648
5.8.1 Servicios de proyección de ficheros 649
5.8.2 Servicios UNIX de carga de bibliotecas 652
5.8.3 Otros servicios de gestión de memoria 654
5.9 Lecturas recomendadas 654
5.10 Ejercicios 655
Apéndice 1 Resumen de llamadas al sistema POSIX 661
Bibliografía 667
Índice 673
VOLUMEN II
6. Comunicación y sincronización de procesos 19
6.1 Concurrencia 20
6.1.1 Tipos de procesos concurrentes 21
6.1.2 Recursos compartidos y coordinación 22
6.1.3 Problemas que plantea la concurrencia 22
6.2 Modelos de comunicación y sincronización 26
6.2.1 Modelo de acceso a una sección crítica 26
6.2.2 Modelo productor-consumidor 27
6.2.3 Modelo de lectores-escritores 27
6.2.4 Modelo de acceso a recursos limitados 28
6.2.5 Modelo cliente-servidor 28
6.3 Mecanismos de comunicación y sincronización 28
6.3.1 Comunicación mediante ficheros 30
6.3.2 Tuberías o pipes 30
6.3.3 Semáforos 34
6.3.4 Memoria compartida 39
6.3.5 Mutex y variables condicionales 39
6.3.6 Paso de mensajes 44
6.3.7 Empleo más adecuado de los mecanismos de comunicación y sincronización 49
6.4 Transacciones 50
6.4.1 Servicio transaccional 50
6.5 Diseño 51
6.5.1 Soporte hardware para la sincronización 51
6.5.2 Espera activa 54
6.5.3 Espera pasiva o bloqueo 55
6.5.4 Sincronización dentro del sistema operativo 57
6.5.5 Comunicación dentro del sistema operativo 66
6.6 Servicios POSIX 67
6.6.1 Tuberías o pipes 67
6.6.2 Semáforos POSIX 72
6.6.3 Mutex y variables condicionales en POSIX 77
6.6.4 Colas de mensajes en POSIX 83
6.7 Lecturas recomendadas 93
6.8 Ejercicios 93
7. Interbloqueos 95
7.1 Una historia basada en hechos reales 96
7.2 Escenarios de interbloqueos 98
7.2.1 Interbloqueo entre procesos independientes 98
7.2.2 Interbloqueo entre procesos o threads de la misma aplicación 100
7.2.3 Interbloqueo con espera activa 101
7.2.4 Auto-interbloqueo 102
7.2.5 Interbloqueo en el tratamiento de eventos asíncronos 102
7.2.6 Interbloqueo en la operación interna del sistema operativo 104
7.2.7 Interbloqueo por la competencia en el uso de un recurso 105
7.2.8 Interbloqueo en la comunicación de procesos 106
7.2.9 Livelock vs Deadlock 107
7.3 Definición del interbloqueo 108
7.4 Modelo básico del sistema 109
7.4.1 Representación mediante un grafo de asignación de recursos 110
7.4.2 Comprobación de la existencia de un interbloqueo 113
7.5 Modelo extendido del sistema 114
7.5.1 Tipos de recursos 115
7.5.2 Tipos de operaciones 119
7.5.3 Modelo con múltiples unidades y petición única 120
7.5.4 Modelo con múltiples unidades y petición múltiple 123
7.5.5 Modelo con recursos consumibles 130
7.6 Tratamiento del interbloqueo 136
7.7 Detección y recuperación 137
7.7.1 Detección del interbloqueo 137
7.7.2 Recuperación del interbloqueo 138
7.8 Prevención del interbloqueo 140
7.8.1 Exclusión mutua 140
7.8.2 Retención y espera 140
7.8.3 Sin expropiación 143
7.8.4 Espera circular 144
7.9 Predicción del interbloqueo 144
7.9.1 Concepto de estado seguro 146
7.9.2 Algoritmos de predicción 147
7.10 El interbloqueo en los sistemas operativos. 153
7.10.1 Recursos de sistema 153
7.10.2 Recursos de usuario 162
7.11 El interbloqueo en las aplicaciones 166
7.11.1 Tratamiento de interbloqueos en programas concurrentes 166
7.11.2 Tratamiento de interbloqueos en programas con mutex 171
7.12 Lecturas recomendadas 182
7.13 Ejercicios 183
8. Entrada/salida 189
8.1 Introducción 190
8.1.1 Conexión de un dispositivo de E/S a un computador 192
8.2 Caracterización de los dispositivos de E/S 193
8.2.1 Dispositivos por puertos o proyectados en memoria 194
8.2.2 Dispositivos de bloques y de caracteres 194
8.2.3 E/S programada o por interrupciones 195
8.2.4 Mecanismos de incremento de prestaciones 199
8.2.5 Control de energía 201
8.3 Arquitectura del sistema de E/S 202
8.3.1 Estructura y componentes del sistema de E/S 202
8.3.2 Software de E/S 204
8.4 Interfaz de aplicaciones 208
8.4.1 Nombres independientes de dispositivo 209
8.4.2 E/S bloqueante y no bloqueante 209
8.4.3 Control de acceso a dispositivos 210
8.4.4 Indicaciones de error 211
8.4.5 Uso de estándares 211
8.5 Organización de un manejador de dispositivo 211
8.6 Servicios ampliados 213
8.7 Uso de módulos para incluir manejadores en el núcleo 214
8.8 Manejadores de dispositivos de caracteres 216
8.8.1 Gestión de la entrada 217
8.8.2 Gestión de la salida 225
8.9 Manejador del terminal 228
8.9.1 Modo de operación del terminal 228
8.9.2 Hardware del terminal 229
8.9.3 El software del terminal 231
8.10 Manejadores de Red 235
8.10.1 Envío de información 237
8.10.2 Recepción de información 238
8.11 El manejador del reloj 239
8.11.1 Common Clock Framework 243
8.12 Servicios de E/S 244
8.12.1 Servicios de entrada/salida en UNIX 244
8.13 Lecturas recomendadas 249
8.14 Ejercicios 249
9. Sistemas de almacenamiento 251
9.1 Introducción 252
9.2 Discos 252
9.2.1 Estructura física de los discos 253
9.2.2 El manejador de disco 255
9.2.3 Planificación del disco 257
9.2.4 Gestión de errores 259
9.2.5 Discos en memoria 260
9.3 Particiones 261
9.3.1 El espacio de intercambio o SWAP. 263
9.4 Volúmenes lógicos 264
9.5 El servidor de bloques 266
9.6 La caché de bloques 267
9.7 Fiabilidad y tolerancia a fallos 270
9.7.1 Almacenamiento estable 270
9.7.2 Dispositivos RAID 271
9.7.3 Storage Area Networks (SAN) 272
9.8 Almacenamiento terciario 273
9.8.1 Tecnología para almacenamiento terciario 273
9.8.2 Estructura y componentes del almacenamiento terciario 274
9.8.3 Ejemplo de almacenamiento de altas prestaciones: HPSS 275
9.9 Lecturas recomendadas 276
9.10 Ejercicios 277
10. Ficheros y directorios 279
10.1 Visión de usuario del sistema de Ficheros 280
10.2 Ficheros 280
10.2.1 Concepto de fichero 281
10.2.2 Tipos de ficheros 283
10.2.3 Nombres de ficheros 284
10.2.4 Estructura de un fichero 288
10.2.5 Métodos de acceso 290
10.2.6 Servicios POSIX para ficheros 291
10.3 Directorios 302
10.3.1 Concepto de directorio 302
10.3.2 Estructuras de directorio 303
10.3.3 Servicios POSIX de directorios 306
10.3.4 Ejemplo de uso de servicios POSIX para directorios 308
10.4 Nombrado de ficheros 311
10.4.1 Construcción de la jerarquía de nombres 312
10.5 Ficheros compartidos 313
10.5.1 Semánticas de coutilización 313
10.5.2 Bloqueo de ficheros 314
10.6 Ciclo de vida de un fichero 315
10.7 Diseño del sistema de ficheros y directorios 317
10.7.1 Proyecciones lógica y física del fichero 318
10.7.2 Estructura y almacenamiento del fichero 319
10.7.3 Estructura y almacenamiento del directorio 326
10.8 Sistemas de ficheros 328
10.8.1 Mecanismos de gestión de espacio libre 330
10.8.2 Sistemas de ficheros contiguos: ISO-9660 331
10.8.3 Sistemas de ficheros enlazados: FAT16 y FAT32 332
10.8.4 Estructura de los sistemas de ficheros UNIX SV 334
10.8.5 Estructura de los sistemas de ficheros tipo BSD: FFS, ext2. 337
10.8.6 Estructura de los sistemas de ficheros con journaling 339
10.8.7 Estructura de los sistemas de ficheros extensibles 341
10.8.8 Sistemas de ficheros para dispositivos SSD 342
10.9 El Servidor de directorios 343
10.9.1 Diseño de los directorios 343
10.9.2 Interpretación de nombres 344
10.9.3 Construcción del árbol de nombres. 345
10.9.4 Mecanismos de incremento de prestaciones 346
10.10 El Servidor de ficheros 347
10.10.1 Estructura del servidor de ficheros 348
10.10.2 Estructuras de datos asociadas con la gestión de ficheros 350
10.10.3 Mecanismos de incremento de prestaciones de ficheros 352
10.10.4 Fiabilidad y recuperación 354
10.11 Lecturas recomendadas 358
10.12 Ejercicios 359
11. Virtualización 361
11.1 Introducción 362
11.2 Tipos de virtualización 363
11.2.1 Emulación Hardware 363
11.2.2 Virtualización completa 364
11.2.3 Paravirtualización 365
11.2.4 Virtualización a nivel del sistema operativo: contenedores 366
11.2.5 Resumen 367
11.3 Hipervisores 367
11.3.1 Planificación en el hipervisor 369
11.4 Virtualización en centros de datos 370
11.5 Lecturas recomendadas 373
11.6 Ejercicios 373
12. Seguridad y protección 375
12.1 La seguridad y la protección 376
12.2 Problemas de seguridad 377
12.2.1 Problemas físicos 377
12.2.2 Problemas lógicos 378
12.3 Políticas de seguridad 384
12.3.1 Política militar 385
12.3.2 Políticas comerciales 386
12.3.3 Modelos de seguridad 387
12.4 Criptografía 387
12.4.1 Conceptos básicos 388
12.4.2 Sistemas de clave privada y sistemas de clave pública 391
12.4.3 Firmas digitales y certificados 392
12.5 Diseño de sistemas seguros 393
12.5.1 Principios de diseño y aspectos de seguridad 394
12.5.2 Técnicas de diseño de sistemas seguros 395
12.5.3 Controles de seguridad externos al sistema operativo 398
12.5.4 Controles de seguridad del sistema operativo 400
12.6 Implementación de la seguridad en sistemas operativos 401
12.6.1 Monitores de seguridad 401
12.6.2 Dominios de protección 404
12.6.3 Autenticación de usuarios 412
12.6.4 Separación de recursos 417
12.6.5 Mecanismos de recuperación 418
12.6.6 Salvaguarda de datos 419
12.6.7 Mejoras en el núcleo del sistema operativo 421
12.7 Implementación de la seguridad en la red 422
12.7.1 Servicios de autenticación remota 422
12.7.2 Limitaciones de acceso 426
12.7.3 Comunicación segura 429
12.7.4 Otros mecanismos de protección 430
12.8 Servicios de protección y seguridad 431
12.8.1 Servicios POSIX 431
12.8.2 Ejemplo de uso de los servicios de protección de POSIX 432
12.9 Lecturas recomendadas 435
12.10 Ejercicios 435
13. Introducción a los sistemas distribuidos 437
13.1 Sistemas distribuidos 438
13.1.1 Características de un sistema distribuido 438
13.1.2 Protocolos de comunicación 439
13.2 Sistemas operativos distribuidos y middleware 442
13.3 Comunicación de procesos en sistemas distribuidos 445
13.3.1 Sockets 445
13.3.2 Llamadas a procedimientos remotos 458
13.3.3 Comunicación de grupos 466
13.4 Sincronización en sistemas distribuidos 467
13.4.1 Ordenación de eventos en sistemas distribuidos 467
13.4.2 Exclusión mutua en sistemas distribuidos 469
13.5 Gestión de procesos 471
13.5.1 Asignación de procesos a procesadores 471
13.5.2 Algoritmos de distribución de carga 472
13.5.3 Planificación de procesos en sistemas distribuidos 473
13.6 Sistemas de ficheros distribuidos 474
13.6.1 Nombrado 475
13.6.2 Métodos de acceso 475
13.6.3 Utilización de caché en sistemas de ficheros distribuidos 476
13.6.4 NFS 478
13.6.5 CIFS 482
13.6.6 Empleo de paralelismo en el sistema de ficheros 483
13.6.7 HDFS 484
13.6.8 Sistemas de almacenamiento en red 485
13.7 Gestión de memoria en sistemas distribuidos 486
13.8 Modelos de sistemas distribuidos 488
13.8.1 Modelo cliente-servidor 488
13.8.2 Sistemas peer to peer 488
13.8.3 Computación en clústers 489
13.8.4 Grid Computing 489
13.8.5 Cloud Computing 490
13.9 Lecturas recomendadas 491
13.10 Ejercicios 492
Apéndice 1 Resumen de llamadas al sistema POSix 495
Bibliografía 501
Índice 507