Tabla de contenidos

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