sistemas operativos-modernos

1106

Upload: menamigue

Post on 19-Jun-2015

530 views

Category:

Education


34 download

DESCRIPTION

Sistemas operativos modernos

TRANSCRIPT

  • 1. ANDREW S. TANENBAUMANDREW S. TANENBAUM TANENBAUMTANENBAUM La nueva edicin de este best-seller incorpora los ms recientes desarrollos en las tecnologas de los sistemas operativos; se le agregaron cientos de pginas de material nuevo y se elimin el contenido obsoleto: en definiti- va cubre los principios y la prctica de los sistemas operativos modernos, concentrndose en Linux, Windows Vista y los sistemas multimedia, embebidos y de tiempo real. Andrew S. Tanenbaum plasma su estilo claro y entretenido en los conceptos importantes que todo diseador de sistemas operativos debe dominar. Con base en su extensa trayectoria como diseador o co-diseador de tres sistemas operativos, transmite mediante esta obra sus profundos conocimientos y gran experiencia prcti- ca de un modo que pocos libros pueden igualar. Algunos de los diversos temas que el autor trata con detalle son procesos, hilos, administracin de memoria, sistemas de archivos, E/S, interbloqueos, diseo de interfaces, multimedia, mejoras en el rendimiento y las tendencias ms recientes en el diseo de sistemas operativos. LO NUEVO DE ESTA EDICIN: La ms reciente cobertura sobre Windows Vista y los sistemas operativos Linux/Unix. Un caso de estudio, que abarca todo un captulo, sobre el sistema operativo Symbian, para disposi- tivos mviles. Un anlisis bastante actualizado y mejorado sobre la seguridad. Una reorganizacin completa del libro, de manera que los temas clave se presenten con oportu- nidad. Una presentacin de las investigaciones ms recientes que probablemente devengan en los sistemas operativos del futuro. Ejercicios de programacin totalmente actualizados y adicionales en cada captulo. Experimentos con sistemas operativos en lnea mediante el uso de herramientas populares de Windows y de cdigo fuente abierto. Ejercicios de simulacin de sistemas operativos. Para mayor informacin visite la pgina Web: www.pearsoneducacion.net/tanenbaum 3 edicin SISTEMAS OPERATIVOS MODERNOS3 edicin SISTEMAS OPERATIVOS MODERNOS SISTEMAS OPERATIVOS MODERNOS SISTEMAS OPERATIVOS MODERNOS 3 edicin ISBN 978-607-442-046-3

2. SISTEMAS OPERATIVOS MODERNOS TERCERA EDICIN Principios y Paradigmas Segunda edicin 3. SISTEMAS OPERATIVOS MODERNOS TERCERA EDICIN ANDREW S. TANENBAUM Vrije Universiteit Amsterdam, Holanda TRADUCCIN Alfonso Vidal Romero Elizondo Ingeniero en Sistemas Computacionales Instituto Tecnolgico y de Estudios Superiores de Monterrey Campus Monterrey REVISIN TCNICA Jos Ramn Ros Snchez Departamento Acadmico de Computacin Instituto Tecnolgico Autnomo de Mxico Aarn Jimnez Govea Catedrtico del Departamento de Ciencias Computacionales Universidad de Guadalajara, Mxico 4. Authorized translation from the English language edition, entitled Modern operating systems, 3rd edition, by Andrew S. Tanenbaum published by Pearson Education, Inc., publishing as PRENTICE HALL, INC., Copyright 2008. All rights reserved. ISBN 9780136006633 Traduccin autorizada de la edicin en idioma ingls, titulada Modern operating systems, 3. edicin por Andrew S. Tanenbaum, publicada por Pearson Education, Inc., publicada como PRENTICE HALL, INC., Copyright 2008. Todos los derechos reservados. Esta edicin en espaol es la nica autorizada. Edicin en espaol Editor: Luis Miguel Cruz Castillo e-mail:[email protected] Editor de desarrollo: Bernardino Gutirrez Hernndez Supervisor de produccin: Jos D. Hernndez Garduo Edicin en ingls Editorial Director, Computer Science, Engineering, Cover Illustrator: Steve Lefkowitz and Advanced Mathematics: Marcia J. Horton Interior design: Andrew S. Tanenbaum Executive Editor: Tracy Dunkelberger Typesetting: Andrew S. Tanenbaum Editorial Assistant: Melinda Haggerty Art Director: Kenny Beck Associtate Editor: ReeAnne Davis Art Editor: Gregory Dulles Senior Managing Editor: Scott Disanno Media Editor: David Alick Production Editor: Irwin Zucker Manufacturing Manager: Alan Fischer Cover Concept: Andrews S. Tanenbaum and Tracy Dunkelberger Manufacturing Buyer: Lisa McDowell Cover Design: Tamara Newman Marketing Manager: Mack Patterson TERCERA EDICIN, 2009 D.R. 2009 por Pearson Educacin de Mxico, S.A. de C.V. Atlacomulco 500-5o. piso Col. Industrial Atoto 53519, Naucalpan de Jurez, Estado de Mxico Cmara Nacional de la Industria Editorial Mexicana. Reg. Nm. 1031. Prentice Hall es una marca registrada de Pearson Educacin de Mxico, S.A. de C.V. Reservados todos los derechos. Ni la totalidad ni parte de esta publicacin pueden reproducirse, registrarse o transmitirse, por un sistema de recuperacin de informacin, en ninguna forma ni por ningn medio, sea electrnico, mecnico, foto- qumico, magntico o electroptico, por fotocopia, grabacin o cualquier otro, sin permiso previo por escrito del editor. El prstamo, alquiler o cualquier otra forma de cesin de uso de este ejemplar requirir tambin la autorizacin del editor o de sus representantes. ISBN: 978-607-442-046-3 Impreso en Mxico. Printed in Mexico. 1 2 3 4 5 6 7 8 9 0 09 10 11 12 Datos de catalogacin bibliogrfica TANENBAUM, ANDREW S. y MAARTEN VAN STEEN Sistemas operativos modernos. Tercera edicin PEARSON EDUCACIN, Mxico, 2009 ISBN: 978-607-442-046-3 rea: Computacin Formato: 18.5 23.5 cm Pginas: 1104 5. Para Suzanne, Barbara, Marvin y a la memoria de Bram y Sweetie 6. CONTENIDO PREFACIO xxiv 1 INTRODUCCIN 1 1.1 QU ES UN SISTEMA OPERATIVO? 3 1.1.1 El sistema operativo como una mquina extendida 4 1.1.2 El sistema operativo como administrador de recursos 6 1.2 HISTORIA DE LOS SISTEMAS OPERATIVOS 7 1.2.1 La primera generacin (1945 a 1955): tubos al vaco 7 1.2.2 La segunda generacin (1955 a 1965): transistores y sistemas de procesamiento por lotes 8 1.2.3 La tercera generacin (1965 a 1980): circuitos integrados y multiprogramacin 10 1.2.4 La cuarta generacin (1980 a la fecha): las computadoras personales 15 1.3 REVISIN DEL HARDWARE DE COMPUTADORA 19 1.3.1 Procesadores 19 1.3.2 Memoria 23 1.3.3 Discos 26 1.3.4 Cintas 27 1.3.5 Dispositivos de E/S 27 1.3.6 Buses 30 1.3.7 Arranque de la computadora 33 vii 7. 1.4 LOS TIPOS DE SISTEMAS OPERATIVOS 33 1.4.1 Sistemas operativos de mainframe 34 1.4.2 Sistemas operativos de servidores 34 1.4.3 Sistemas operativos de multiprocesadores 34 1.4.4 Sistemas operativos de computadoras personales 35 1.4.5 Sistemas operativos de computadoras de bolsillo 35 1.4.6 Sistemas operativos integrados 35 1.4.7 Sistemas operativos de nodos sensores 36 1.4.8 Sistemas operativos en tiempo real 36 1.4.9 Sistemas operativos de tarjetas inteligentes 37 1.5 CONCEPTOS DE LOS SISTEMAS OPERATIVOS 37 1.5.1 Procesos 38 1.5.2 Espacios de direcciones 40 1.5.3 Archivos 40 1.5.4 Entrada/salida 43 1.5.5 Proteccin 44 1.5.6 El shell 44 1.5.7 La ontogenia recapitula la filogenia 46 1.6 LLAMADAS AL SISTEMA 49 1.6.1 Llamadas al sistema para la administracin de procesos 52 1.6.2 Llamadas al sistema para la administracin de archivos 56 1.6.3 Llamadas al sistema para la administracin de directorios 57 1.6.4 Miscelnea de llamadas al sistema 58 1.6.5 La API Win32 de Windows 59 1.7 ESTRUCTURA DE UN SISTEMA OPERATIVO 62 1.7.1 Sistemas monolticos 62 1.7.2 Sistemas de capas 63 1.7.3 Microkernels 64 1.7.4 Modelo cliente-servidor 67 1.7.5 Mquinas virtuales 67 1.7.6 Exokernels 71 1.8 EL MUNDO SEGN C 72 1.8.1 El lenguaje C 72 1.8.2 Archivos de encabezado 73 1.8.3 Proyectos de programacin extensos 74 1.8.4 El modelo del tiempo de ejecucin 75 1.9 INVESTIGACIN ACERCA DE LOS SISTEMAS OPERATIVOS 76 1.10 DESCRIPCIN GENERAL SOBRE EL RESTO DE ESTE LIBRO 77 viii CONTENIDO 8. CONTENIDO ix 1.11 UNIDADES MTRICAS 78 1.12 RESUMEN 79 2 PROCESOS E HILOS 83 2.1 PROCESOS 83 2.1.1 El modelo del proceso 84 2.1.2 Creacin de un proceso 86 2.1.3 Terminacin de procesos 88 2.1.4 Jerarquas de procesos 89 2.1.5 Estados de un proceso 90 2.1.6 Implementacin de los procesos 91 2.1.7 Modelacin de la multiprogramacin 93 2.2 HILOS 95 2.2.1 Uso de hilos 95 2.2.2 El modelo clsico de hilo 100 2.2.3 Hilos en POSIX 104 2.2.4 Implementacin de hilos en el espacio de usuario 106 2.2.5 Implementacin de hilos en el kernel 109 2.2.6 Implementaciones hbridas 110 2.2.7 Activaciones del planificador 111 2.2.8 Hilos emergentes 112 2.2.9 Conversin de cdigo de hilado simple a multihilado 114 2.3 COMUNICACIN ENTRE PROCESOS 117 2.3.1 Condiciones de carrera 117 2.3.2 Regiones crticas 119 2.3.3 Exclusin mutua con espera ocupada 120 2.3.4 Dormir y despertar 125 2.3.5 Semforos 128 2.3.6 Mutexes 130 2.3.7 Monitores 134 2.3.8 Pasaje (transmisin) de mensajes 140 2.3.9 Barreras 144 2.4 PLANIFICACIN 145 2.4.1 Introduccin a la planificacin 145 2.4.2 Planificacin en sistemas de procesamiento por lotes 152 2.4.3 Planificacin en sistemas interactivos 154 2.4.4 Planificacin en sistemas de tiempo real 160 9. 2.4.5 Poltica contra mecanismo 161 2.4.6 Planificacin de hilos 162 2.5 PROBLEMAS CLSICOS DE COMUNICACIN ENTRE PROCESOS (IPC) 163 2.5.1 El problema de los filsofos comelones 164 2.5.2 El problema de los lectores y escritores 167 2.6 INVESTIGACIN ACERCA DE LOS PROCESOS E HILOS 168 2.7 RESUMEN 169 3 ADMINISTRACIN DE MEMORIA 175 3.1 SIN ABSTRACCIN DE MEMORIA 176 3.2 UNA ABSTRACCIN DE MEMORIA: ESPACIOS DE DIRECCIONES 179 3.2.1 La nocin de un espacio de direcciones 180 3.2.2 Intercambio 181 3.2.3 Administracin de memoria libre 184 3.3 MEMORIA VIRTUAL 188 3.3.1 Paginacin 189 3.3.2 Tablas de pginas 193 3.3.3 Aceleracin de la paginacin 194 3.3.4 Tablas de pginas para memorias extensas 198 3.4 ALGORITMOS DE REEMPLAZO DE PGINAS 201 3.4.1 El algoritmo de reemplazo de pginas ptimo 202 3.4.2 El algoritmo de reemplazo de pginas: no usadas recientemente 203 3.4.3 El algoritmo de reemplazo de pginas: Primera en entrar, primera en salir (FIFO) 204 3.4.4 El algoritmo de reemplazo de pginas: segunda oportunidad 204 3.4.5 El algoritmo de reemplazo de pginas: reloj 205 3.4.6 El algoritmo de reemplazo de pginas: menos usadas recientemente (LRU) 206 3.4.7 Simulacin de LRU en software 207 3.4.8 El algoritmo de reemplazo de pginas: conjunto de trabajo 209 3.4.9 El algoritmo de reemplazo de pginas WSClock 213 3.4.10 Resumen de los algoritmos de reemplazo de pginas 215 x CONTENIDO 10. CONTENIDO xi 3.5 CUESTIONES DE DISEO PARA LOS SISTEMAS DE PAGINACIN 216 3.5.1 Polticas de asignacin local contra las de asignacin global 216 3.5.2 Control de carga 218 3.5.3 Tamao de pgina 219 3.5.4 Espacios separados de instrucciones y de datos 221 3.5.5 Pginas compartidas 221 3.5.6 Bibliotecas compartidas 223 3.5.7 Archivos asociados 225 3.5.8 Poltica de limpieza 226 3.5.9 Interfaz de memoria virtual 226 3.6 CUESTIONES DE IMPLEMENTACIN 227 3.6.1 Participacin del sistema operativo en la paginacin 227 3.6.2 Manejo de fallos de pgina 228 3.6.3 Respaldo de instruccin 229 3.6.4 Bloqueo de pginas en memoria 230 3.6.5 Almacn de respaldo 231 3.6.6 Separacin de poltica y mecanismo 233 3.7 SEGMENTACIN 234 3.7.1 Implementacin de segmentacin pura 237 3.7.2 Segmentacin con paginacin: MULTICS 238 3.7.3 Segmentacin con paginacin: Intel Pentium 242 3.8 INVESTIGACIN ACERCA DE LA ADMINISTRACIN DE MEMORIA 247 3.9 RESUMEN 248 4 SISTEMAS DE ARCHIVOS 255 4.1 ARCHIVOS 257 4.1.1 Nomenclatura de archivos 257 4.1.2 Estructura de archivos 259 4.1.3 Tipos de archivos 260 4.1.4 Acceso a archivos 262 4.1.5 Atributos de archivos 263 4.1.6 Operaciones de archivos 264 4.1.7 Un programa de ejemplo que utiliza llamadas al sistema de archivos 265 11. 4.2 DIRECTORIOS 268 4.2.1 Sistemas de directorios de un solo nivel 268 4.2.2 Sistemas de directorios jerrquicos 268 4.2.3 Nombres de rutas 269 4.2.4 Operaciones de directorios 272 4.3 IMPLEMENTACIN DE SISTEMAS DE ARCHIVOS 273 4.3.1 Distribucin del sistema de archivos 273 4.3.2 Implementacin de archivos 274 4.3.3 Implementacin de directorios 280 4.3.4 Archivos compartidos 283 4.3.5 Sistemas de archivos estructurados por registro 285 4.3.6 Sistemas de archivos por bitcora 287 4.3.7 Sistemas de archivos virtuales 288 4.4 ADMINISTRACIN Y OPTIMIZACIN DE SISTEMAS DE ARCHIVOS 292 4.4.1 Administracin del espacio en disco 292 4.4.2 Respaldos del sistema de archivos 298 4.4.3 Consistencia del sistema de archivos 304 4.4.4 Rendimiento del sistema de archivos 307 4.4.5 Desfragmentacin de discos 311 4.5 EJEMPLOS DE SISTEMAS DE ARCHIVOS 312 4.5.1 Sistemas de archivos de CD-ROM 312 4.5.2 El sistema de archivos MS-DOS 318 4.5.3 El sistema de archivos V7 de UNIX 321 4.6 INVESTIGACIN ACERCA DE LOS SISTEMAS DE ARCHIVOS 324 4.7 RESUMEN 324 5 ENTRADA/SALIDA 329 5.1 PRINCIPIOS DEL HARDWARE DE E/S 329 5.1.1 Dispositivos de E/S 330 5.1.2 Controladores de dispositivos 331 5.1.3 E/S por asignacin de memoria 332 5.1.4 Acceso directo a memoria (DMA) 336 5.1.5 Repaso de las interrupciones 339 xii CONTENIDO 12. CONTENIDO xiii 5.2 FUNDAMENTOS DEL SOFTWARE DE E/S 343 5.2.1 Objetivos del software de E/S 343 5.2.2 E/S programada 344 5.2.3 E/S controlada por interrupciones 346 5.2.4 E/S mediante el uso de DMA 347 5.3 CAPAS DEL SOFTWARE DE E/S 348 5.3.1 Manejadores de interrupciones 348 5.3.2 Drivers de dispositivos 349 5.3.3 Software de E/S independiente del dispositivo 353 5.3.4 Software de E/S en espacio de usuario 359 5.4 DISCOS 360 5.4.1 Hardware de disco 361 5.4.2 Formato de disco 376 5.4.3 Algoritmos de programacin del brazo del disco 379 5.4.4 Manejo de errores 382 5.4.5 Almacenamiento estable 385 5.5 RELOJES 388 5.5.1 Hardware de reloj 388 5.5.2 Software de reloj 390 5.5.3 Temporizadores de software 393 5.6 INTERFACES DE USUARIO: TECLADO, RATN, MONITOR 394 5.6.1 Software de entrada 394 5.6.2 Software de salida 399 5.7 CLIENTES DELGADOS 415 5.8 ADMINISTRACIN DE ENERGA 417 5.8.1 Cuestiones de hardware 418 5.8.2 Cuestiones del sistema operativo 419 5.8.3 Cuestiones de los programas de aplicaciones 424 5.9 INVESTIGACIN ACERCA DE LA E/S 425 5.10 RESUMEN 426 6 INTERBLOQUEOS 433 6.1 RECURSOS 434 13. 6.1.1 Recursos apropiativos y no apropiativos 434 6.1.2 Adquisicin de recursos 435 6.2 INTRODUCCIN A LOS INTERBLOQUEOS 437 6.2.1 Condiciones para los interbloqueos de recursos 438 6.2.2 Modelado de interbloqueos 438 6.3 EL ALGORITMO DE LA AVESTRUZ 441 6.4 DETECCIN Y RECUPERACIN DE UN INTERBLOQUEO 442 6.4.1 Deteccin de interbloqueos con un recurso de cada tipo 442 6.4.2 Deteccin del interbloqueo con varios recursos de cada tipo 444 6.4.3 Recuperacin de un interbloqueo 447 6.5 CMO EVITAR INTERBLOQUEOS 448 6.5.1 Trayectorias de los recursos 449 6.5.2 Estados seguros e inseguros 450 6.5.3 El algoritmo del banquero para un solo recurso 451 6.5.4 El algoritmo del banquero para varios recursos 452 6.6 CMO PREVENIR INTERBLOQUEOS 454 6.6.1 Cmo atacar la condicin de exclusin mutua 454 6.6.2 Cmo atacar la condicin de contencin y espera 455 6.6.3 Cmo atacar la condicin no apropiativa 455 6.6.4 Cmo atacar la condicin de espera circular 456 6.7 OTRAS CUESTIONES 457 6.7.1 Bloqueo de dos fases 457 6.7.2 Interbloqueos de comunicaciones 458 6.7.3 Bloqueo activo 459 6.7.4 Inanicin 461 6.8 INVESTIGACIN SOBRE LOS INTERBLOQUEOS 461 6.9 RESUMEN 462 7 SISTEMAS OPERATIVOS MULTIMEDIA 467 7.1 INTRODUCCIN A MULTIMEDIA 468 7.2 ARCHIVOS DE MULTIMEDIA 472 7.2.1 Codificacin de video 473 xiv CONTENIDO 14. CONTENIDO xv 7.2.2 Codificacin de audio 476 7.3 COMPRESIN DE VIDEO 478 7.3.1 El estndar JPEG 478 7.3.2 El estndar MPEG 481 7.4 COMPRESIN DE AUDIO 484 7.5 PROGRAMACIN DE PROCESOS MULTIMEDIA 487 7.5.1 Procesos de programacin homogneos 488 7.5.2 Programacin general en tiempo real 488 7.5.3 Programacin monotnica en frecuencia 490 7.5.4 Programacin del menor tiempo de respuesta primero 491 7.6 PARADIGMAS DE LOS SISTEMAS DE ARCHIVOS MULTIMEDIA 493 7.6.1 Funciones de control de VCR 494 7.6.2 Video casi bajo demanda 496 7.6.3 Video casi bajo demanda con funciones de VCR 498 7.7 COLOCACIN DE LOS ARCHIVOS 499 7.7.1 Colocacin de un archivo en un solo disco 500 7.7.2 Dos estrategias alternativas de organizacin de archivos 501 7.7.3 Colocacin de archivos para el video casi bajo demanda 504 7.7.4 Colocacin de varios archivos en un solo disco 506 7.7.5 Colocacin de archivos en varios discos 508 7.8 USO DE CACH 510 7.8.1 Cach de bloque 511 7.8.2 Cach de archivo 512 7.9 PROGRAMACIN DE DISCOS PARA MULTIMEDIA 513 7.9.1 Programacin de discos esttica 513 7.9.2 Programacin de disco dinmica 515 7.10 INVESTIGACIN SOBRE MULTIMEDIA 516 7.11 RESUMEN 517 8 SISTEMAS DE MLTIPLES PROCESADORES 523 8.1 MULTIPROCESADORES 526 8.1.1 Hardware de multiprocesador 526 15. 8.1.2 Tipos de sistemas operativos multiprocesador 534 8.1.3 Sincronizacin de multiprocesadores 538 8.1.4 Planificacin de multiprocesadores 542 8.2 MULTICOMPUTADORAS 548 8.2.1 Hardware de una multicomputadora 549 8.2.2 Software de comunicacin de bajo nivel 553 8.2.3 Software de comunicacin a nivel de usuario 555 8.2.4 Llamada a procedimiento remoto 558 8.2.5 Memoria compartida distribuida 560 8.2.6 Planificacin de multicomputadoras 565 8.2.7 Balanceo de carga 565 8.3 VIRTUALIZACIN 568 8.3.1 Requerimientos para la virtualizacin 570 8.3.2 Hipervisores de tipo 1 571 8.3.3 Hipervisores de tipo 2 572 8.3.4 Paravirtualizacin 574 8.3.5 Virtualizacin de la memoria 576 8.3.6 Virtualizacin de la E/S 578 8.3.7 Dispositivos virtuales 579 8.3.8 Mquinas virtuales en CPUs de multincleo 579 8.3.9 Cuestiones sobre licencias 580 8.4 SISTEMAS DISTRIBUIDOS 580 8.4.1 Hardware de red 583 8.4.2 Protocolos y servicios de red 586 8.4.3 Middleware basado en documentos 590 8.4.4 Middleware basado en sistemas de archivos 591 8.4.5 Middleware basado en objetos 596 8.4.6 Middleware basado en coordinacin 598 8.4.7 Grids (Mallas) 603 8.5 INVESTIGACIN SOBRE LOS SISTEMAS DE MLTIPLES PROCESADORES 604 8.6 RESUMEN 605 9 SEGURIDAD 611 9.1 EL ENTORNO DE SEGURIDAD 613 9.1.1 Amenazas 613 xvi CONTENIDO 16. CONTENIDO xvii 9.1.2 Intrusos 615 9.1.3 Prdida accidental de datos 616 9.2 FUNDAMENTOS DE LA CRIPTOGRAFA (CIFRADO) 616 9.2.1 Criptografa de clave secreta 617 9.2.2 Criptografa de clave pblica 618 9.2.3 Funciones de una va 619 9.2.4 Firmas digitales 619 9.2.5 Mdulo de plataforma confiable 621 9.3 MECANISMOS DE PROTECCIN 622 9.3.1 Dominios de proteccin 622 9.3.2 Listas de control de acceso 624 9.3.3 Capacidades 627 9.3.4 Sistemas confiables 630 9.3.5 Base de cmputo confiable 631 9.3.6 Modelos formales de los sistemas seguros 632 9.3.7 Seguridad multinivel 634 9.3.8 Canales encubiertos 637 9.4 AUTENTICACIN 641 9.4.1 Autenticacin mediante el uso de contraseas 642 9.4.2 Autenticacin mediante el uso de un objeto fsico 651 9.4.3 Autenticacin mediante biomtrica 653 9.5 ATAQUES DESDE EL INTERIOR 656 9.5.1 Bombas lgicas 656 9.5.2 Trampas 657 9.5.3 Suplantacin de identidad en el inicio de sesin 658 9.6 CMO EXPLOTAR LOS ERRORES (BUGS) EN EL CDIGO 659 9.6.1 Ataques de desbordamiento del bfer 660 9.6.2 Ataques mediante cadenas de formato 662 9.6.3 Ataques de retorno a libc 664 9.6.4 Ataques por desbordamiento de enteros 665 9.6.5 Ataques por inyeccin de cdigo 666 9.6.6 Ataques por escalada de privilegios 667 9.7 MALWARE 667 9.7.1 Caballos de Troya (troyanos) 670 9.7.2 Virus 672 9.7.3 Gusanos 682 9.7.4 Spyware 684 9.7.5 Rootkits 688 17. 9.8 DEFENSAS 692 9.8.1 Firewalls 693 9.8.2 Los antivirus y las tcnicas anti-antivirus 695 9.8.3 Firma de cdigo 701 9.8.4 Encarcelamiento 702 9.8.5 Deteccin de intrusos basada en modelos 703 9.8.6 Encapsulamiento de cdigo mvil 705 9.8.7 Seguridad de Java 709 9.9 INVESTIGACIN SOBRE LA SEGURIDAD 711 9.10 RESUMEN 712 10 CASO DE ESTUDIO 1: LINUX 719 10.1 HISTORIA DE UNIX Y LINUX 720 10.1.1 UNICS 720 10.1.2 UNIX EN LA PDP-11 721 10.1.3 UNIX portable 722 10.1.4 Berkeley UNIX 723 10.1.5 UNIX estndar 724 10.1.6 MINIX 725 10.1.7 Linux 726 10.2 GENERALIDADES SOBRE LINUX 728 10.2.1 Objetivos de Linux 729 10.2.2 Interfaces para Linux 730 10.2.3 El shell 731 10.2.4 Programas utilitarios de Linux 734 10.2.5 Estructura del kernel 736 10.3 LOS PROCESOS EN LINUX 739 10.3.1 Conceptos fundamentales 739 10.3.2 Llamadas al sistema para administrar procesos en Linux 741 10.3.3 Implementacin de procesos e hilos en Linux 745 10.3.4 Planificacin en Linux 752 10.3.5 Arranque de Linux 755 10.4 ADMINISTRACIN DE LA MEMORIA EN LINUX 758 10.4.1 Conceptos fundamentales 758 10.4.2 Llamadas al sistema de administracin de memoria en Linux 761 xviii CONTENIDO 18. CONTENIDO xix 10.4.3 Implementacin de la administracin de la memoria en Linux 762 10.4.4 La paginacin en Linux 768 10.5 ENTRADA/SALIDA EN LINUX 771 10.5.1 Conceptos fundamentales 772 10.5.2 Redes 773 10.5.3 Llamadas al sistema de Entrada/Salida en Linux 775 10.5.4 Implementacin de la entrada/salida en Linux 775 10.5.5 Los mdulos en Linux 779 10.6 EL SISTEMA DE ARCHIVOS DE LINUX 779 10.6.1 Conceptos fundamentales 780 10.6.2 Llamadas al sistema de archivos en Linux 785 10.6.3 Implementacin del sistema de archivos de Linux 788 10.6.4 NFS: El sistema de archivos de red 796 10.7 LA SEGURIDAD EN LINUX 803 10.7.1 Conceptos fundamentales 803 10.7.2 Llamadas al sistema de seguridad en Linux 805 10.7.3 Implementacin de la seguridad en Linux 806 10.8 RESUMEN 806 11 CASO DE ESTUDIO 2:WINDOWSVISTA 813 11. 1 HISTORIA DE WINDOWS VISTA 813 11.1.1 1980: MS-DOS 814 11.1.2 1990: Windows basado en MS-DOS 815 11.1.3 2000: Windows basado en NT 815 11.1.4 Windows Vista 818 11.2 PROGRAMACIN DE WINDOWS VISTA 819 11.2.1 La Interfaz de programacin de aplicaciones de NT nativa 822 11.2.2 La interfaz de programacin de aplicaciones Win32 825 11.2.3 El registro de Windows 829 11.3 ESTRUCTURA DEL SISTEMA 831 11.3.1 Estructura del sistema operativo 832 11.3.2 Booteo de Windows Vista 847 11.3.3 Implementacin del administrador de objetos 848 11.3.4 Subsistemas, DLLs y servicios en modo de usuario 858 19. 11.4 PROCESOS E HILOS EN WINDOWS VISTA 861 11.4.1 Conceptos fundamentales 861 11.4.2 Llamadas a la API para administrar trabajos, procesos, hilos y fibras 866 11.4.3 Implementacin de procesos e hilos 871 11.5 ADMINISTRACIN DE LA MEMORIA 879 11.5.1 Conceptos fundamentales 879 11.5.2 Llamadas al sistema para administrar la memoria 884 11.5.3 Implementacin de la administracin de memoria 885 11.6 USO DE LA CACH EN WINDOWS VISTA 894 11.7 ENTRADA/SALIDA EN WINDOWS VISTA 896 11.7.1 Conceptos fundamentales 897 11.7.2 Llamadas a la API de entrada/salida 898 11.7.3 Implementacin de la E/S 901 11.8 EL SISTEMA DE ARCHIVOS NT DE WINDOWS 906 11.8.1 Conceptos fundamentales 907 11.8.2 Implementacin del sistema de archivos NT 908 11.9 LA SEGURIDAD EN WINDOWS VISTA 918 11.9.1 Conceptos fundamentales 919 11.9.2 Llamadas a la API de seguridad 921 11.9.3 Implementacin de la seguridad 922 11.10 RESUMEN 924 12 CASO DE ESTUDIO 3: SYMBIAN OS 929 12.1 LA HISTORIA DE SYMBIAN OS 930 12.1.1 Races de Symbian OS: Psion y EPOC 930 12.1.2 Symbian OS versin 6 931 12.1.3 Symbian OS versin 7 932 12.1.4 Symbian OS en la actualidad 932 12.2 GENERALIDADES SOBRE SYMBIAN OS 932 12.2.1 Orientacin a objetos 933 12.2.2 Diseo del microkernel 934 12.2.3 El nanokernel de Symbian OS 935 12.2.4 Acceso a los recursos de cliente/servidor 935 xx CONTENIDO 20. CONTENIDO xxi 12.2.5 Caractersticas de un sistema operativo ms grande 936 12.2.6 Comunicaciones y multimedia 937 12.3 PROCESOS E HILOS EN SYMBIAN OS 937 12.3.1 Hilos y nanohilos 938 12.3.2 Procesos 939 12.3.3 Objetos activos 939 12.3.4 Comunicacin entre procesos 940 12.4 ADMINISTRACIN DE LA MEMORIA 941 12.4.1 Sistemas sin memoria virtual 941 12.4.2 Cmo direcciona Symbian OS la memoria 943 12.5 ENTRADA Y SALIDA 945 12.5.1 Drivers de dispositivos 945 12.5.2 Extensiones del kernel 946 12.5.3 Acceso directo a la memoria 946 12.5.4 Caso especial: medios de almacenamiento 947 12.5.5 Bloqueo de E/S 947 12.5.6 Medios removibles 948 12.6 SISTEMAS DE ALMACENAMIENTO 948 12.6.1 Sistemas de archivos para dispositivos mviles 948 12.6.2 Sistemas de archivos de Symbian OS 949 12.6.3 Seguridad y proteccin del sistema de archivos 949 12.7 LA SEGURIDAD EN SYMBIAN OS 950 12.8 LA COMUNICACIN EN SYMBIAN OS 953 12.8.1 Infraestructura bsica 953 12.8.2 Un anlisis ms detallado de la infraestructura 954 12.9 RESUMEN 957 13 DISEO DE SISTEMAS OPERATIVOS 959 13.1 LA NATURALEZA DEL PROBLEMA DE DISEO 960 13.1.1 Objetivos 960 13.1.2 Por qu es difcil disear un sistema operativo? 961 13.2 DISEO DE INTERFACES 963 13.2.1 Principios de gua 963 21. 13.2.2 Paradigmas 965 13.2.3 La interfaz de llamadas al sistema 968 13.3 IMPLEMENTACIN 971 13.3.1 Estructura del sistema 971 13.3.2 Comparacin entre mecanismo y directiva 975 13.3.3 Ortogonalidad 976 13.3.4 Nomenclatura 977 13.3.5 Tiempo de vinculacin 978 13.3.6 Comparacin entre estructuras estticas y dinmicas 979 13.3.7 Comparacin entre la implementacin de arriba-abajo y la implementacin de abajo-arriba 980 13.3.8 Tcnicas tiles 981 13.4 RENDIMIENTO 987 13.4.1 Por qu son lentos los sistemas operativos? 987 13.4.2 Qu se debe optimizar? 988 13.4.3 Concesiones entre espacio y tiempo 988 13.4.4 Uso de cach 991 13.4.5 Sugerencias 992 13.4.6 Explotar la localidad 993 13.4.7 Optimizar el caso comn 993 13.5 ADMINISTRACIN DE PROYECTOS 994 13.5.1 El mtico hombre-mes 994 13.5.2 Estructura de equipos 995 13.5.3 La funcin de la experiencia 997 13.5.4 Sin bala de plata 998 13.6 TENDENCIAS EN EL DISEO DE SISTEMAS OPERATIVOS 998 13.6.1 Virtualizacin 999 13.6.2 Chips multincleo 999 13.6.3 Sistemas operativos con espacios de direcciones extensos 1000 13.6.4 Redes 1000 13.6.5 Sistemas paralelos y distribuidos 1001 13.6.6 Multimedia 1001 13.6.7 Computadoras operadas por bateras 1002 13.6.8 Sistemas embebidos 1002 13.6.9 Nodos de monitoreo 1003 13.7 RESUMEN 1003 xxii CONTENIDO 22. CONTENIDO xxiii 14 LISTA DE LECTURAS Y BIBLIOGRAFA 1007 14.1 SUGERENCIAS PARA CONTINUAR LA LECTURA 1007 14.1.1 Introduccin y obras generales 1008 14.1.2 Procesos e hilos 1008 14.1.3 Administracin de la memoria 1009 14.1.4 Entrada/salida 1009 14.1.5 Sistemas de archivos 1010 14.1.6 Interbloqueos 1010 14.1.7 Sistemas operativos multimedia 1010 14.1.8 Sistemas con varios procesadores 1011 14.1.9 Seguridad 1012 14.1.10 Linux 1014 14.1.11 Windows Vista 1014 14.1.12 El sistema operativo Symbian 1015 14.1.13 Principios de diseo 1015 14.2 BIBLIOGRAFA EN ORDEN ALFABTICO 1016 NDICE 1049 23. La tercera edicin de este libro difiere de la segunda en muchos aspectos. Para empezar, reordena- mos los captulos para colocar el material central al principio. Tambin pusimos mayor nfasis en el sistema operativo como el creador de las abstracciones. El captulo 1, se ha actualizado en forma considerable y ofrece una introduccin de todos los conceptos; el captulo 2 trata sobre la abstrac- cin de la CPU en varios procesos; el 3 aborda la abstraccin de la memoria fsica en espacios de direcciones (memoria virtual); el 4 versa sobre la abstraccin del disco en archivos. En conjunto, los procesos, espacios de direcciones virtuales y archivos son los conceptos clave que proporcionan los sistemas operativos, y es la razn por la que hayamos colocado los captulos correspondientes antes de lo establecido en la edicin anterior. El captulo 1 se modific y actualiz de manera considerable. Por ejemplo, ahora proporciona una introduccin al lenguaje de programacin C y al modelo de C en tiempo de ejecucin para los lectores que estn familiarizados slo con Java. En el captulo 2, el anlisis de los hilos (threads) se modific y expandi para reflejar su nue- va importancia. Entre otras cosas, ahora hay una seccin acerca de los hilos Pthreads del estndar de IEEE. El captulo 3, sobre la administracin de memoria, se reorganiz para poner nfasis en la idea de que una de las funciones clave de un sistema operativo es proporcionar la abstraccin de un es- pacio de direcciones virtuales para cada proceso. Se elimin el material que trata de la administra- cin de memoria en los sistemas de procesamiento por lotes, y se actualiz el referente a la implementacin de la paginacin, con el fin de destacar la necesidad de administrar espacios de di- recciones ms extensos (ahora muy comunes) y de ofrecer una mayor velocidad. PREFACIO xxiv 24. PREFACIO xxv Se actualizaron los captulos 4 a 7: se elimin cierto material anterior y se agreg nuevo. Las secciones sobre las actividades actuales de investigacin en estos captulos se reescribieron desde cero y se agregaron muchos nuevos problemas y ejercicios de programacin. Se actualiz el captulo 8, incluyendo cierto material acerca de los sistemas multincleo. Se agreg una nueva seccin sobre la tecnologa de hipervirtualizacin, los hipervisores y las mqui- nas virtuales, donde se utiliz VMware como ejemplo. El captulo 9 se modific y reorganiz de manera considerable, con mucho material actuali- zado referente a la explotacin de los errores (bugs) en el cdigo, el malware y las defensas con- tra stos. El captulo 10, que trata acerca de Linux, es una readaptacin del anterior (que trataba so- bre UNIX y Linux). Sin duda, ahora el nfasis est en Linux y hay una gran cantidad de mate- rial nuevo. El captulo 11, sobre Windows Vista, es una importante revisin del captulo 11 anterior, que trataba de Windows 2000. Este captulo muestra un anlisis completamente actualizado de Win- dows. El captulo 12 es nuevo. A mi parecer, los sistemas operativos embebidos, o incrustados (co- mo los que se encuentran en los telfonos celulares y los asistentes digitales personales, o PDAs) se ignoran en la mayora de los libros de texto, a pesar de que hay ms de estos dispositivos en el mercado que PCs y computadoras porttiles. Esta edicin remedia este problema con un an- lisis extendido de Symbian OS, que se utiliza ampliamente en los telfonos inteligentes (Smart Phones). El captulo 13, sobre el diseo de sistemas operativos, no presenta modificaciones importantes. Este libro pone a su disposicin una gran cantidad de material didctico de apoyo. Los suple- mentos para el instructor se encuentran en el sitio web de este libro: www.pearsoneducacion.net/ tanembaum, e incluyen diapositivas de PowerPoint, herramientas de software para estudiar sistemas operativos, experimentos de laboratorio para los estudiantes, simuladores y material adicional para utilizar en sus cursos. Los instructores que utilicen este libro como texto definitivamente deben dar- le un vistazo. Varias personas me ayudaron con esta revisin. En primer lugar deseo agradecer a mi editora, Tracy Dunkelberger. ste es mi libro nmero 18 y he desgastado a muchos editores en el proceso. Tracy fue ms all del cumplimiento de su deber con este libro, ya que hizo cosas tales como buscar colabo- radores, organizar varias reseas, ayudar con todos los suplementos, lidiar con los contratos, actuar como intermediario con PH, coordinar una gran cantidad de procesamiento en paralelo y, en general, asegurarse de que todo saliera a tiempo, adems de otras cosas. Tambin me ayud a mantener un es- tricto itinerario de trabajo para poder lograr que este libro se imprimiera a tiempo, e hizo todo esto man- tenindose animosa y alegre, a pesar de tener muchas otras actividades que exigan gran parte de su atencin. Gracias Tracy, en verdad te lo agradezco. Ada Gavrilovska de Georgia Tech, experta en los aspectos internos sobre Linux, actualiz el captulo 10 que estaba basado en UNIX (con nfasis en FreeBSD) para convertirlo en algo ms en- focado en Linux, aunque gran parte del captulo sigue siendo genrico para todos los sistemas UNIX. Linux es ms popular entre los estudiantes que FreeBSD, por lo que ste es un cambio im- portante. Dave Probert de Microsoft actualiz el captulo 11, que estaba basado en Windows 2000, para concentrarlo en Windows Vista. Aunque tienen varias similitudes, tambin tienen diferencias con- siderables. Dave conoce mucho de Windows y tiene suficiente visin como para poder indicar la diferencia entre los puntos en los que Microsoft hizo lo correcto y en los que se equivoc. Como resultado de su trabajo este libro es mucho mejor. 25. Mike Jipping de Hope College escribi el captulo acerca de Symbian OS. No abordar los sis- temas embebidos en tiempo real era una grave omisin en el libro; gracias a Mike se resolvi ese problema. Los sistemas embebidos en tiempo real se estn volviendo cada vez ms importantes en el mundo, y este captulo ofrece una excelente introduccin al tema. A diferencia de Ada, Dave y Mike, cada uno de los cuales se enfoc en un captulo, Shivakant Mishra, de la University of Colorado en Boulder, fungi ms como un sistema distribuido, leyendo y haciendo comentarios sobre muchos captulos, adems de proporcionar una gran cantidad de ejer- cicios y problemas de programacin nuevos a lo largo del libro. Hugh Lauer tambin merece una mencin especial. Cuando le pedimos ideas sobre cmo re- visar la segunda edicin, no esperbamos un informe de 23 pginas con interlineado sencillo; y sin embargo eso fue lo que obtuvimos. Muchos de los cambios, como el nuevo nfasis sobre las abstracciones de los procesos, los espacios de direcciones y los archivos, se deben a su participa- cin. Tambin quiero agradecer a otras personas que me ayudaron de muchas formas, incluyendo el sugerir nuevos temas a cubrir, leer el manuscrito con cuidado, hacer suplementos y contribuir con nuevos ejercicios. Entre ellos Steve Armstrong, Jeffrey Chastine, John Connelly, Mischa Gelder- mans, Paul Gray, James Griffioen, Jorrit Herder, Michael Howard, Suraj Kothari, Roger Kraft, Trudy Levine, John Masiyowski, Shivakant Mishra, Rudy Pait, Xiao Qin, Mark Russinovich, Krishna Sivalingam, Leendert van Doorn y Ken Wong. El personal de Prentice Hall fue amistoso y cooperativo como siempre, en especial Irwin Zuc- ker y Scott Disanno en produccin, y David Alick, ReeAnne Davies y Melinda Haggerty en edito- rial. Por ltimo, pero no por ello menos importante, Barbara y Marvin siguen siendo maravillosos, como siempre, cada uno en una forma especial y nica. Y desde luego, quiero agradecer a Suzan- ne por su amor y paciencia recientes. Andrew S. Tanenbaum. xxvi PREFACIO 26. ACERCA DEL AUTOR Andrew S. Tanenbaum tiene una licenciatura en ciencias del M.I.T. y un doctorado de la University of California, en Berkeley. En la actualidad es profesor de Ciencias computacionales en la Vrije Universiteit, en Amsterdam, Holanda, donde encabeza el Grupo de sistemas computacionales. Fue Decano de la Advanced School for Computing and Imaging, una escuela de graduados interuniver- sidades que realiza investigaciones acerca de los sistemas paralelos avanzados, distribuidos y de creacin de imgenes. Ahora es Profesor acadmico de la Royal Netherlands Academy of Arts and Sciencies, lo cual le ha salvado de convertirse en un burcrata. Tanenbaum ha realizado investigaciones sobre compiladores, sistemas operativos, redes, siste- mas distribuidos de rea local y sistemas distribuidos de rea amplia que se escalan hasta mil mi- llones de usuarios. Estos proyectos de investigacin han producido ms de 140 artculos evaluados por expertos en publicaciones especializadas y conferencias. Tambin ha participado como autor o coautor en cinco libros, que a la fecha han aparecido en 18 ediciones. Estos libros se han traduci- do a 21 idiomas, desde vasco hasta tailands, y se utilizan en universidades de todo el mundo; La combinacin idioma+edicin da 130 versiones. El profesor Tanenbaum tambin ha producido una cantidad considerable de software. Fue el ar- quitecto principal del Amsterdam Compiler Kit, un kit de herramientas utilizado ampliamente para escribir compiladores portables. Tambin fue uno de los diseadores principales de Amoeba, uno de los primeros sistemas distribuidos utilizado en una coleccin de estaciones de trabajo conecta- das mediante una LAN, y Globe, un sistema distribuido de rea amplia. Tambin es autor de MINIX, un pequeo clon de UNIX cuyo propsito principal fue utilizar- lo en los laboratorios de programacin de los estudiantes. Fue la inspiracin directa para Linux y la plataforma en la que se desarroll inicialmente. La versin actual de MINIX, conocida como MI- NIX 3, se concentra en un sistema operativo extremadamente confiable y seguro. El profesor Ta- nenbaum considera que su labor habr terminado el da que sea innecesario equipar cada computadora con un botn de reinicio. MIINIX 3 es un proyecto continuo de cdigo fuente abier- to, al cual todos estn invitados a participar. El lector puede visitar www.minix3.org para descargar una copia gratuita y averiguar qu es lo que est ocurriendo en la actualidad. Los estudiantes de doctorado del profesor Tanenbaum han obtenido mayor gloria despus de graduarse y l est muy orgulloso de ellos. Tanenbaum es miembro del ACM, del IEEE y de la Royal Netherlands Academy of Arts and Sciences. Tambin ha recibido muchos premios por su labor cientfica, entre los que se incluyen: 2007 IEEE James H. Mulligan, Jr. Education Medal 2003 TAA McGuffey Award for Computer Science and Engineering 2002 TAA Texty Award for Computer Science and Engineering 1997 ACM/SIGCSE Award for Outstanding Contributions to Computer 1994 ACM Karl V. Karlstrom Outstanding Educator Award Tambin pertenece a la lista de Quin es quin en el mundo (Whos Who in the World). Su pgina Web se encuentra en el URL http://www.cs.vu.nl/~ast /. 27. 1 INTRODUCCIN 1 Una computadora moderna consta de uno o ms procesadores, una memoria principal, discos, im- presoras, un teclado, un ratn, una pantalla o monitor, interfaces de red y otros dispositivos de en- trada/salida. En general es un sistema complejo. Si todos los programadores de aplicaciones tuvieran que comprender el funcionamiento de todas estas partes, no escribiran cdigo alguno. Es ms: el trabajo de administrar todos estos componentes y utilizarlos de manera ptima es una tarea muy desafiante. Por esta razn, las computadoras estn equipadas con una capa de software llama- da sistema operativo, cuyo trabajo es proporcionar a los programas de usuario un modelo de compu- tadora mejor, ms simple y pulcro, as como encargarse de la administracin de todos los recursos antes mencionados. Los sistemas operativos son el tema de este libro. La mayora de los lectores habrn tenido cierta experiencia con un sistema operativo como Windows, Linux, FreeBSD o Mac OS X, pero las apariencias pueden ser engaosas. El progra- ma con el que los usuarios generalmente interactan se denomina shell, cuando est basado en texto, y GUI (Graphical User Interface; Interfaz grfica de usuario) cuando utiliza elementos grficos o iconos. En realidad no forma parte del sistema operativo, aunque lo utiliza para llevar a cabo su trabajo. La figura 1-1 presenta un esquema general de los componentes principales que aqu se anali- zan. En la parte inferior se muestra el hardware, que consiste en circuitos integrados (chips), tarje- tas, discos, un teclado, un monitor y objetos fsicos similares. Por encima del hardware se encuentra el software. La mayora de las computadoras tienen dos modos de operacin: modo kernel y modo usuario. El sistema operativo es la pieza fundamental del software y se ejecuta en modo kernel (tambin conocido como modo supervisor). En este modo, el sistema operativo tiene acceso 28. completo a todo el hardware y puede ejecutar cualquier instruccin que la mquina sea capaz de ejecutar. El resto del software se ejecuta en modo usuario, en el cual slo un subconjunto de las instrucciones de mquina es permitido. En particular, las instrucciones que afectan el control de la m- quina o que se encargan de la E/S (entrada/salida) estn prohibidas para los programas en modo usuario. Volveremos a tratar las diferencias entre el modo kernel y el modo usuario repetidamente a lo largo de este libro. 2 INTRODUCCIN CAPTULO 1 Hardware Software Modo usuario Modo kernel Sistema operativo Navegador Web Lector de correo electrnico Reproductor de msica Programa de interfaz de usuario Figura 1-1. Ubicacin del sistema operativo. El programa de interfaz de usuario, shell o GUI, es el nivel ms bajo del software en modo usuario y permite la ejecucin de otros programas, como un navegador Web, lector de correo elec- trnico o reproductor de msica. Estos programas tambin utilizan en forma intensiva el sistema operativo. La ubicacin del sistema operativo se muestra en la figura 1-1. Se ejecuta directamente sobre el hardware y proporciona la base para las dems aplicaciones de software. Una distincin importante entre el sistema operativo y el software que se ejecuta en modo usua- rio es que, si a un usuario no le gusta, por ejemplo, su lector de correo electrnico, es libre de con- seguir otro o incluso escribir el propio si as lo desea; sin embargo, no es libre de escribir su propio manejador de interrupciones de reloj, que forma parte del sistema operativo y est protegido por el hardware contra cualquier intento de modificacin por parte de los usuarios. Algunas veces esta distincin no es clara en los sistemas integrados (a los que tambin se co- noce como integrados o incrustados, y que podran no tener modo kernel) o en los sistemas inter- pretados (como los sistemas operativos basados en Java que para separar los componentes utilizan interpretacin y no el hardware). Adems, en muchos sistemas hay programas que se ejecutan en modo de usuario, pero ayudan al sistema operativo o realizan funciones privilegiadas. Por ejemplo, a menudo hay un programa que permite a los usuarios cambiar su contrasea. Este programa no forma parte del sistema operativo y no se ejecuta en modo kernel, pero sin duda lleva a cabo una funcin delicada y tiene que proteger- 29. SECCIN 1.1 QU ES UN SISTEMA OPERATIVO? 3 se de una manera especial. En ciertos sistemas, la idea se lleva hasta el extremo y partes de lo que tradicionalmente se considera el sistema operativo (por ejemplo, el sistema de archivos) se ejecutan en el espacio del usuario. En dichos sistemas es difcil trazar un lmite claro. Todo lo que se ejecuta en modo kernel forma, sin duda, parte del sistema operativo, pero podra decirse que algunos progra- mas que se ejecutan fuera de este modo tambin forman parte del mismo sistema, o por lo menos es- tn estrechamente asociados a l. Los sistemas operativos difieren de los programas de usuario (es decir, de aplicacin) en varias cuestiones adems del lugar en el que residen. En particular, son enormes, complejos y de larga du- racin. El cdigo fuente de un sistema operativo como Linux o Windows contiene cerca de cinco millones de lneas de cdigo. Para tener una idea de lo que esto significa, considere el trabajo de imprimir cinco millones de lneas en un formato de libro: con 50 lneas por pgina y 1000 pginas por volumen, se requeriran 100 volmenes para listar un sistema operativo de este tamao; es de- cir, todo un librero. Imagine el lector que tiene un trabajo como encargado de dar mantenimiento a un sistema operativo y que en su primer da su jefe le presenta un librero con el cdigo y le dice: Aprndase todo esto. Y sta slo sera la parte que se ejecuta en el kernel. Los programas de usua- rio como la interfaz grfica, las bibliotecas y el software de aplicacin bsico (como el Explorador de Windows) pueden abarcar fcilmente de 10 a 20 veces esa cantidad. En este punto, el lector debe tener una idea clara de por qu los sistemas operativos tienen una larga vida: es muy difcil escribir uno y, por lo tanto, el propietario se resiste a tirarlo y empezar de nuevo. En vez de ello, evolucionan durante periodos extensos. Windows 95/98/Me es, esencialmen- te, un sistema operativo distinto de Windows NT/2000/XP/Vista, su sucesor. Tienen una apariencia similar para los usuarios, ya que Microsoft se asegur bien de ello, sin embargo, tuvo muy buenas razones para deshacerse de Windows 98, las cuales describiremos cuando estudiemos Windows con detalle en el captulo 11. El otro ejemplo principal que utilizaremos a lo largo de este libro (adems de Windows) es UNIX, con sus variantes y clones. Tambin ha evolucionado a travs de los aos con versiones ta- les como System V, Solaris y FreeBSD que se derivan del sistema original, mientras que Linux tie- ne una base de cdigo nueva, modelada estrechamente de acuerdo con UNIX y altamente compatible con l. Utilizaremos ejemplos de UNIX a lo largo de este libro y analizaremos Linux con detalle en el captulo 10. En este captulo hablaremos brevemente sobre varios aspectos clave de los sistemas operativos, incluyendo en sntesis qu son, cul es su historia, cules son los tipos que existen, algunos de los conceptos bsicos y su estructura. En captulos posteriores volveremos a hablar sobre muchos de estos tpicos importantes con ms detalle. 1.1 QU ES UN SISTEMA OPERATIVO? Es difcil definir qu es un sistema operativo aparte de decir que es el software que se ejecuta en modo kernel (adems de que esto no siempre es cierto). Parte del problema es que los sistemas ope- rativos realizan dos funciones bsicas que no estn relacionadas: proporcionar a los programadores de aplicaciones (y a los programas de aplicaciones, naturalmente) un conjunto abstracto de recur- sos simples, en vez de los complejos conjuntos de hardware; y administrar estos recursos de hard- 30. ware. Dependiendo de quin se est hablando, el lector podra escuchar ms acerca de una funcin o de la otra. Ahora analizaremos ambas. 1.1.1 El sistema operativo como una mquina extendida La arquitectura (conjunto de instrucciones, organizacin de memoria, E/S y estructura de bus) de la mayora de las computadoras a nivel de lenguaje mquina es primitiva y compleja de programar, en especial para la entrada/salida. Para hacer este punto ms concreto, considere la forma en que se lleva a cabo la E/S de disco flexible mediante los dispositivos controladores (device controllers) compatibles NEC PD765 que se utilizan en la mayora de las computadoras personales basadas en Intel (a lo largo de este libro utilizaremos los trminos disco flexible y diskette indistintamen- te). Utilizamos el disco flexible como un ejemplo debido a que, aunque obsoleto, es mucho ms simple que un disco duro moderno. El PD765 tiene 16 comandos, cada uno de los cuales se espe- cifica mediante la carga de 1 a 9 bytes en un registro de dispositivo. Estos comandos son para leer y escribir datos, desplazar el brazo del disco y dar formato a las pistas, as como para inicializar, de- tectar, restablecer y recalibrar el dispositivo controlador y las unidades. Los comandos ms bsicos son read y write (lectura y escritura), cada uno de los cuales re- quiere 13 parmetros, empaquetados en 9 bytes. Estos parmetros especifican elementos tales co- mo la direccin del bloque de disco a leer, el nmero de sectores por pista, el modo de grabacin utilizado en el medio fsico, el espacio de separacin entre sectores y lo que se debe hacer con una marca de direccin de datos eliminados. Si el lector no comprende estos tecnicismos, no se preocu- pe: se es precisamente el punto, pues se trata de algo bastante oscuro. Cuando la operacin se com- pleta, el chip del dispositivo controlador devuelve 23 campos de estado y error, empaquetados en 7 bytes. Como si esto no fuera suficiente, el programador del disco flexible tambin debe estar cons- tantemente al tanto de si el motor est encendido o apagado. Si el motor est apagado, debe encen- derse (con un retraso largo de arranque) para que los datos puedan ser ledos o escritos. El motor no se debe dejar demasiado tiempo encendido porque se desgastar. Por lo tanto, el programador se ve obligado a lidiar con el problema de elegir entre tener retrasos largos de arranque o desgastar los discos flexibles (y llegar a perder los datos). Sin entrar en los detalles reales, debe quedar claro que el programador promedio tal vez no de- see involucrarse demasiado con la programacin de los discos flexibles (o de los discos duros, que son an ms complejos). En vez de ello, lo que desea es una abstraccin simple de alto nivel que se encargue de lidiar con el disco. En el caso de los discos, una abstraccin comn sera que el disco contiene una coleccin de archivos con nombre. Cada archivo puede ser abierto para lectura o escri- tura, despus puede ser ledo o escrito y, por ltimo, cerrado. Los detalles, tales como si la grabacin debe utilizar o no la modulacin de frecuencia y cul es el estado del motor en un momento dado, no deben aparecer en la abstraccin que se presenta al programador de aplicaciones. La abstraccin es la clave para lidiar con la complejidad. Las buenas abstracciones convierten una tarea casi imposible en dos tareas manejables. La primera de stas es definir e implementar las abstracciones; la segunda, utilizarlas para resolver el problema en cuestin. Una abstraccin que ca- si cualquier usuario de computadora comprende es el archivo: es una pieza til de informacin, co- mo una fotografa digital, un mensaje de correo electrnico almacenado o una pgina Web. Es ms fcil lidiar con fotografas, correos electrnicos y pginas Web que con los detalles de los discos, 4 INTRODUCCIN CAPTULO 1 31. SECCIN 1.1 QU ES UN SISTEMA OPERATIVO? 5 como en el caso del disco flexible descrito. El trabajo del sistema operativo es crear buenas abstrac- ciones para despus implementar y administrar los objetos abstractos entonces creados. En este li- bro hablaremos mucho acerca de las abstracciones, dado que son claves para comprender los sistemas operativos. Este punto es tan importante que vale la pena repetirlo en distintas palabras. Con el debido respeto a los ingenieros industriales que disearon la Macintosh, el hardware es feo. Los procesa- dores, memorias, discos y otros dispositivos reales son muy complicados y presentan interfaces di- fciles, enredadas, muy peculiares e inconsistentes para las personas que tienen que escribir software para utilizarlos. Algunas veces esto se debe a la necesidad de tener compatibilidad con el hardware anterior; otras, a un deseo de ahorrar dinero, y otras ms, a que los diseadores de hard- ware no tienen idea (o no les importa) qu tan grave es el problema que estn ocasionando para el software. Una de las principales tareas del sistema operativo es ocultar el hardware y presentar a los programas (y a sus programadores) abstracciones agradables, elegantes, simples y consisten- tes con las que puedan trabajar. Los sistemas operativos ocultan la parte fea con la parte hermosa, como se muestra en la figura 1-2. Sistema operativo Hardware Interfaz fea Interfaz hermosa Programas de aplicacin Figura 1-2. Los sistemas operativos ocultan el hardware feo con abstracciones hermosas. Hay que recalcar que los verdaderos clientes del sistema operativo son los programas de apli- cacin (a travs de los programadores de aplicaciones, desde luego). Son los que tratan directamen- te con el sistema operativo y sus abstracciones. En contraste, los usuarios finales tienen que lidiar con las abstracciones que proporciona la interfaz de usuario, ya sea un shell de lnea de comandos o una interfaz grfica. Aunque las abstracciones en la interfaz de usuario pueden ser similares a las que proporciona el sistema operativo, ste no siempre es el caso. Para aclarar este punto, considere el escritorio normal de Windows y el indicador para comandos orientado a texto. Ambos son pro- gramas que se ejecutan en el sistema operativo Windows y utilizan las abstracciones que este siste- ma proporciona, pero ofrecen interfaces de usuario muy distintas. De manera similar, un usuario de Linux que ejecuta Gnome o KDE ve una interfaz muy distinta a la que ve un usuario de Linux que trabaja directamente encima del Sistema X Window subyacente (orientado a texto), pero las abs- tracciones del sistema operativo subyacente son las mismas en ambos casos. 32. En este libro estudiaremos detalladamente las abstracciones que se proporcionan a los progra- mas de aplicacin, pero trataremos muy poco acerca de las interfaces de usuario, que es un tema bastante extenso e importante, pero que slo est relacionado con la periferia de los sistemas ope- rativos. 1.1.2 El sistema operativo como administrador de recursos El concepto de un sistema operativo cuya funcin principal es proporcionar abstracciones a los pro- gramas de aplicacin responde a una perspectiva de arriba hacia abajo. La perspectiva alterna, de abajo hacia arriba, sostiene que el sistema operativo est presente para administrar todas las piezas de un sistema complejo. Las computadoras modernas constan de procesadores, memorias, tempo- rizadores, discos, ratones, interfaces de red, impresoras y una amplia variedad de otros dispositivos. En la perspectiva alterna, el trabajo del sistema operativo es proporcionar una asignacin ordenada y controlada de los procesadores, memorias y dispositivos de E/S, entre los diversos programas que compiten por estos recursos. Los sistemas operativos modernos permiten la ejecucin simultnea de varios programas. Ima- gine lo que ocurrira si tres programas que se ejecutan en cierta computadora trataran de imprimir sus resultados en forma simultnea en la misma impresora. Las primeras lneas de impresin po- dran provenir del programa 1, las siguientes del programa 2, despus algunas del programa 3, y as en lo sucesivo: el resultado sera un caos. El sistema operativo puede imponer orden al caos poten- cial, guardando en bferes en disco toda la salida destinada para la impresora. Cuando termina un programa, el sistema operativo puede entonces copiar su salida, previamente almacenada, del archi- vo en disco a la impresora, mientras que al mismo tiempo el otro programa puede continuar gene- rando ms salida, ajeno al hecho de que la salida en realidad no se est enviando a la impresora todava. Cuando una computadora (o red) tiene varios usuarios, la necesidad de administrar y proteger la memoria, los dispositivos de E/S y otros recursos es cada vez mayor; de lo contrario, los usua- rios podran interferir unos con otros. Adems, los usuarios necesitan con frecuencia compartir no slo el hardware, sino tambin la informacin (archivos o bases de datos, por ejemplo). En resu- men, esta visin del sistema operativo sostiene que su tarea principal es llevar un registro de qu programa est utilizando qu recursos, de otorgar las peticiones de recursos, de contabilizar su uso y de mediar las peticiones en conflicto provenientes de distintos programas y usuarios. La administracin de recursos incluye el multiplexaje (compartir) de recursos en dos formas distintas: en el tiempo y en el espacio. Cuando un recurso se multiplexa en el tiempo, los distintos programas o usuarios toman turnos para utilizarlo: uno de ellos obtiene acceso al recurso, despus otro, y as en lo sucesivo. Por ejemplo, con slo una CPU y varios programas que desean ejecutar- se en ella, el sistema operativo primero asigna la CPU a un programa y luego, una vez que se ha ejecutado por el tiempo suficiente, otro programa obtiene acceso a la CPU, despus otro, y en un momento dado el primer programa vuelve a obtener acceso al recurso. La tarea de determinar c- mo se multiplexa el recurso en el tiempo (quin sigue y durante cunto tiempo) es responsabilidad del sistema operativo. Otro ejemplo de multiplexaje en el tiempo es la comparticin de la impreso- ra. Cuando hay varios trabajos en una cola de impresin, para imprimirlos en una sola impresora, se debe tomar una decisin en cuanto a cul trabajo debe imprimirse a continuacin. 6 INTRODUCCIN CAPTULO 1 33. SECCIN 1.2 HISTORIA DE LOS SISTEMAS OPERATIVOS 7 El otro tipo de multiplexaje es en el espacio. En vez de que los clientes tomen turnos, cada uno obtiene una parte del recurso. Por ejemplo, normalmente la memoria principal se divide entre va- rios programas en ejecucin para que cada uno pueda estar residente al mismo tiempo (por ejem- plo, para poder tomar turnos al utilizar la CPU). Suponiendo que hay suficiente memoria como para contener varios programas, es ms eficiente contener varios programas en memoria a la vez, en vez de proporcionar a un solo programa toda la memoria, en especial si slo necesita una pequea frac- cin. Desde luego que esto genera problemas de equidad y proteccin, por ejemplo, y corresponde al sistema operativo resolverlos. Otro recurso que se multiplexa en espacio es el disco duro. En mu- chos sistemas, un solo disco puede contener archivos de muchos usuarios al mismo tiempo. Asig- nar espacio en disco y llevar el registro de quin est utilizando cules bloques de disco es una tarea tpica de administracin de recursos comn del sistema operativo. 1.2 HISTORIA DE LOS SISTEMAS OPERATIVOS Los sistemas operativos han ido evolucionando a travs de los aos. En las siguientes secciones analizaremos brevemente algunos de los hitos ms importantes. Como los sistemas operativos han estado estrechamente relacionados a travs de la historia con la arquitectura de las computadoras en las que se ejecutan, analizaremos generaciones sucesivas de computadoras para ver cmo eran sus sistemas operativos. Esta vinculacin de generaciones de sistemas operativos con generaciones de computadoras es un poco burda, pero proporciona cierta estructura donde de cualquier otra forma no habra. La progresin que se muestra a continuacin es en gran parte cronolgica, aunque el desarro- llo ha sido un tanto accidentado. Cada fase surgi sin esperar a que la anterior terminara completa- mente. Hubo muchos traslapes, sin mencionar muchos falsos inicios y callejones sin salida. El lector debe tomar esto como gua, no como la ltima palabra. La primera computadora digital verdadera fue diseada por el matemtico ingls Charles Bab- bage (de 1792 a 1871). Aunque Babbage gast la mayor parte de su vida y fortuna tratando de cons- truir su mquina analtica, nunca logr hacer que funcionara de manera apropiada, debido a que era puramente mecnica y la tecnologa de su era no poda producir las ruedas, engranes y dientes con la alta precisin que requera. Por supuesto, la mquina analtica no tena un sistema operativo. Como nota histrica interesante, Babbage se dio cuenta de que necesitaba software para su m- quina analtica, por lo cual contrat a una joven llamada Ada Lovelace, hija del afamado poeta bri- tnico Lord Byron, como la primera programadora del mundo. El lenguaje de programacin Ada lleva su nombre. 1.2.1 La primera generacin (1945 a 1955): tubos al vaco Despus de los esfuerzos infructuosos de Babbage, no hubo muchos progresos en la construccin de computadoras digitales sino hasta la Segunda Guerra Mundial, que estimul una explosin de esta actividad. El profesor John Atanasoff y su estudiante graduado Clifford Berry construyeron lo que ahora se conoce como la primera computadora digital funcional en Iowa State University. Uti- lizaba 300 tubos de vaco (bulbos). Aproximadamente al mismo tiempo, Konrad Zuse en Berln 34. construy la computadora Z3 a partir de relevadores. En 1944, la mquina Colossus fue construida por un equipo de trabajo en Bletchley Park, Inglaterra; la Mark I, por Howard Aiken en Harvard, y la ENIAC, por William Mauchley y su estudiante graduado J. Presper Eckert en la Universidad de Pennsylvania. Algunas fueron binarias, otras utilizaron bulbos, algunas eran programables, pero to- das eran muy primitivas y tardaban segundos en realizar incluso hasta el clculo ms simple. En estos primeros das, un solo grupo de personas (generalmente ingenieros) diseaban, cons- truan, programaban, operaban y daban mantenimiento a cada mquina. Toda la programacin se realizaba exclusivamente en lenguaje mquina o, peor an, creando circuitos elctricos mediante la conexin de miles de cables a tableros de conexiones (plugboards) para controlar las funciones bsicas de la mquina. Los lenguajes de programacin eran desconocidos (incluso se desconoca el lenguaje ensamblador). Los sistemas operativos tambin se desconocan. El modo usual de ope- racin consista en que el programador trabajaba un periodo dado, registrndose en una hoja de firmas, y despus entraba al cuarto de mquinas, insertaba su tablero de conexiones en la compu- tadora e inverta varias horas esperando que ninguno de los cerca de 20,000 bulbos se quemara du- rante la ejecucin. Prcticamente todos los problemas eran clculos numricos bastante simples, como obtener tablas de senos, cosenos y logaritmos. A principios de la dcada de 1950, la rutina haba mejorado un poco con la introduccin de las tarjetas perforadas. Entonces fue posible escribir programas en tarjetas y leerlas en vez de usar ta- bleros de conexiones; aparte de esto, el procedimiento era el mismo. 1.2.2 La segunda generacin (1955 a 1965): transistores y sistemas de procesamiento por lotes La introduccin del transistor a mediados de la dcada de 1950 cambi radicalmente el panora- ma. Las computadoras se volvieron lo bastante confiables como para poder fabricarlas y vender- las a clientes dispuestos a pagar por ellas, con la expectativa de que seguiran funcionando el tiempo suficiente como para poder llevar a cabo una cantidad til de trabajo. Por primera vez ha- ba una clara separacin entre los diseadores, constructores, operadores, programadores y el per- sonal de mantenimiento. Estas mquinas, ahora conocidas como mainframes, estaban encerradas en cuartos especiales con aire acondicionado y grupos de operadores profesionales para manejarlas. Slo las empresas grandes, universidades o agencias gubernamentales importantes podan financiar el costo multimi- llonario de operar estas mquinas. Para ejecutar un trabajo (es decir, un programa o conjunto de programas), el programador primero escriba el programa en papel (en FORTRAN o en ensambla- dor) y despus lo pasaba a tarjetas perforadas. Luego llevaba el conjunto de tarjetas al cuarto de en- trada de datos y lo entregaba a uno de los operadores; despus se iba a tomar un caf a esperar a que los resultados estuvieran listos. Cuando la computadora terminaba el trabajo que estaba ejecutando en un momento dado, un operador iba a la impresora y arrancaba las hojas de resultados para llevarlas al cuarto de salida de datos, para que el programador pudiera recogerlas posteriormente. Entonces, el operador tomaba uno de los conjuntos de tarjetas que se haban trado del cuarto de entrada y las introduca en la m- quina. Si se necesitaba el compilador FORTRAN, el operador tena que obtenerlo de un gabinete 8 INTRODUCCIN CAPTULO 1 35. SECCIN 1.2 HISTORIA DE LOS SISTEMAS OPERATIVOS 9 de archivos e introducirlo a la mquina. Se desperdiciaba mucho tiempo de la computadora mien- tras los operadores caminaban de un lado a otro del cuarto de la mquina. Dado el alto costo del equipo, no es sorprendente que las personas buscaran rpidamente formas de reducir el tiempo desperdiciado. La solucin que se adopt en forma general fue el sistema de pro- cesamiento por lotes. La idea detrs de este concepto era recolectar una bandeja llena de trabajos en el cuarto de entrada de datos y luego pasarlos a una cinta magntica mediante el uso de una pequea computadora relativamente econmica, tal como la IBM 1401, que era muy adecuada para leer las tar- jetas, copiar cintas e imprimir los resultados, pero no tan buena para los clculos numricos. Para lle- var a cabo los clculos numricos se utilizaron otras mquinas mucho ms costosas, como la IBM 7094. Este procedimiento se ilustra en la figura 1-3. 1401 7094 1401 (a) (b) (c) (d) (e) (f) Lector de tarjetas Unidad de cinta Cinta de entrada Salida de cinta Cinta del sistema Impresora Figura 1-3. Uno de los primeros sistemas de procesamiento por lotes. a) Los programa- dores llevan las tarjetas a la 1401. b) La 1401 lee los lotes de trabajos y los coloca en cin- ta. c) El operador lleva la cinta de entrada a la 7094. d) La 7094 realiza los clculos. e) El operador lleva la cinta de salida a la 1401. f) La 1401 imprime los resultados. Despus de aproximadamente una hora de recolectar un lote de trabajos, las tarjetas se lean y se colocaban en una cinta magntica, la cual se llevaba al cuarto de mquinas, en donde se monta- ba en una unidad de cinta. Despus, el operador cargaba un programa especial (el ancestro del sis- tema operativo de hoy en da), el cual lea el primer trabajo de la cinta y lo ejecutaba. Los resultados se escriban en una segunda cinta, en vez de imprimirlos. Despus de que terminaba cada trabajo, el sistema operativo lea de manera automtica el siguiente trabajo de la cinta y empezaba a ejecu- tarlo. Cuando se terminaba de ejecutar todo el lote, el operador quitaba las cintas de entrada y de salida, reemplazaba la cinta de entrada con el siguiente lote y llevaba la cinta de salida a una 1401 para imprimir fuera de lnea (es decir, sin conexin con la computadora principal). En la figura 1-4 se muestra la estructura tpica de un trabajo de entrada ordinario. Empieza con una tarjeta $JOB, especificando el tiempo mximo de ejecucin en minutos, el nmero de cuenta al que se va a cargar y el nombre del programador. Despus se utiliza una tarjeta $FORTRAN, indi- cando al sistema operativo que debe cargar el compilador FORTRAN de la cinta del sistema. Des- pus le sigue inmediatamente el programa que se va a compilar y luego una tarjeta $LOAD, que indica al sistema operativo que debe cargar el programa objeto que acaba de compilar (a menudo, los programas compilados se escriban en cintas reutilizables y tenan que cargarse en forma expl- cita). Despus se utiliza la tarjeta $RUN, la cual indica al sistema operativo que debe ejecutar el 36. programa con los datos que le suceden. Por ltimo, la tarjeta $END marca el final del trabajo. Es- tas tarjetas de control primitivas fueron las precursoras de los shells e intrpretes de lnea de coman- dos modernos. 10 INTRODUCCIN CAPTULO 1 $JOB, 10,6610802, MARVIN TANENBAUM $FORTRAN $LOAD $RUN $END Programa en Fortran Datos para el programa Figura 1-4. Estructura de un trabajo tpico de FMS. Las computadoras grandes de segunda generacin se utilizaron principalmente para clculos cientficos y de ingeniera, tales como resolver ecuaciones diferenciales parciales que surgen a me- nudo en fsica e ingeniera. En gran parte se programaron en FORTRAN y lenguaje ensamblador. Los sistemas operativos tpicos eran FMS (Fortran Monitor System) e IBSYS, el sistema operativo de IBM para la 7094. 1.2.3 La tercera generacin (1965 a 1980): circuitos integrados y multiprogramacin A principio de la dcada de 1960, la mayora de los fabricantes de computadoras tenan dos lneas de productos distintas e incompatibles. Por una parte estaban las computadoras cientficas a gran escala orientadas a palabras, como la 7094, que se utilizaban para clculos numricos en ciencia e ingeniera. Por otro lado, estaban las computadoras comerciales orientadas a caracteres, como la 1401, que se utilizaban ampliamente para ordenar cintas e imprimir datos en los bancos y las com- paas de seguros. Desarrollar y dar mantenimiento a dos lneas de productos completamente distintos era una propuesta costosa para los fabricantes. Adems, muchos nuevos clientes de computadoras necesita- ban al principio un equipo pequeo, pero ms adelante ya no era suficiente y deseaban una mqui- na ms grande que pudiera ejecutar todos sus programas anteriores, pero con mayor rapidez. 37. SECCIN 1.2 HISTORIA DE LOS SISTEMAS OPERATIVOS 11 IBM intent resolver ambos problemas de un solo golpe con la introduccin de la lnea de compu- tadoras System/360. La 360 era una serie de mquinas compatibles con el software, que variaban desde un tamao similar a la 1401 hasta algunas que eran ms potentes que la 7094. Las mquinas slo diferan en el precio y rendimiento (mxima memoria, velocidad del procesador, nmero de dispositivos de E/S permitidos, etctera). Como todas las mquinas tenan la misma arquitectura y el mismo conjunto de instrucciones, los programas escritos para una mquina podan ejecutarse en todas las dems, por lo menos en teora. Lo que es ms, la 360 se dise para manejar tanto la compu- tacin cientfica (es decir, numrica) como comercial. Por ende, una sola familia de mquinas po- da satisfacer las necesidades de todos los clientes. En los aos siguientes, mediante el uso de tecnologa ms moderna, IBM ha desarrollado sucesores compatibles con la lnea 360, a los cuales se les conoce como modelos 370, 4300, 3080 y 3090. La serie zSeries es el descendiente ms re- ciente de esta lnea, aunque diverge considerablemente del original. La IBM 360 fue la primera lnea importante de computadoras en utilizar circuitos integrados (ICs) (a pequea escala), con lo cual se pudo ofrecer una mayor ventaja de precio/rendimiento en comparacin con las mquinas de segunda generacin, las cuales fueron construidas a partir de tran- sistores individuales. Su xito fue inmediato y la idea de una familia de computadoras compatibles pronto fue adoptada por todos los dems fabricantes importantes. Los descendientes de estas mqui- nas se siguen utilizando hoy da en centros de cmputo. En la actualidad se utilizan con frecuencia para manejar bases de datos enormes (por ejemplo, para sistemas de reservaciones de aerolneas) o como servidores para sitios de World Wide Web que deben procesar miles de solicitudes por se- gundo. La mayor fortaleza de la idea de una sola familia fue al mismo tiempo su mayor debilidad. La intencin era que todo el software, incluyendo al sistema operativo OS/360, funcionara en to- dos los modelos. Deba ejecutarse en los sistemas pequeos, que por lo general slo reemplazaban a la 1401s, que copiaba tarjetas a cinta, y en los sistemas muy grandes, que a menudo reemplazaban a la 7094s, que realizaba predicciones del clima y otros clculos pesados. Tena que ser bueno en sis- temas con pocos dispositivos perifricos y en sistemas con muchos. Tena que funcionar en ambos entornos comerciales y cientficos. Por encima de todo, tena que ser eficiente para todos estos usos distintos. No haba forma en que IBM (o cualquier otra) pudiera escribir una pieza de software que cum- pliera con todos estos requerimientos en conflicto. El resultado fue un enorme y extraordinariamen- te complejo sistema operativo, tal vez de dos a tres rdenes de magnitud ms grande que el FMS. Consista en millones de lneas de lenguaje ensamblador escrito por miles de programadores, con miles de errores, los cuales requeran un flujo continuo de nuevas versiones en un intento por co- rregirlos. Cada nueva versin correga algunos errores e introduca otros, por lo que probablemen- te el nmero de errores permaneca constante en el tiempo. Fred Brooks, uno de los diseadores del OS/360, escribi posteriormente un libro ingenioso e incisivo (Brooks, 1996) que describa sus experiencias con el OS/360. Aunque sera imposible re- sumir este libro aqu, basta con decir que la portada muestra una manada de bestias prehistricas atrapadas en un pozo de brea. La portada de Silberschatz y coautores (2005) muestra un punto de vista similar acerca de que los sistemas operativos son como dinosaurios. A pesar de su enorme tamao y sus problemas, el OS/360 y los sistemas operativos similares de tercera generacin producidos por otros fabricantes de computadoras en realidad dejaban razo- 38. nablemente satisfechos a la mayora de sus clientes. Tambin popularizaron varias tcnicas clave ausentes en los sistemas operativos de segunda generacin. Quiz la ms importante de stas fue la multiprogramacin. En la 7094, cuando el trabajo actual se detena para esperar a que se comple- tara una operacin con cinta u otro dispositivo de E/S, la CPU simplemente permaneca inactiva hasta terminar la operacin de E/S. Con los clculos cientficos que requieren un uso intensivo de la CPU, la E/S no es frecuente, por lo que este tiempo desperdiciado no es considerable. Con el pro- cesamiento de datos comerciales, el tiempo de espera de las operaciones de E/S puede ser a menu- do de 80 a 90 por ciento del tiempo total, por lo que deba hacerse algo para evitar que la (costosa) CPU est inactiva por mucho tiempo. La solucin que surgi fue particionar la memoria en varias piezas, con un trabajo distinto en cada particin, como se muestra en la figura 1-5. Mientras que un trabajo esperaba a que se com- pletara una operacin de E/S, otro poda estar usando la CPU. Si pudieran contenerse suficientes trabajos en memoria principal al mismo tiempo, la CPU poda estar ocupada casi 100 por ciento del tiempo. Para tener varios trabajos de forma segura en memoria a la vez, se requiere hardware espe- cial para proteger cada trabajo y evitar que los otros se entrometan y lo malogren; el 360 y los de- ms sistemas de tercera generacin estaban equipados con este hardware. 12 INTRODUCCIN CAPTULO 1 Trabajo 3 Trabajo 2 Trabajo 1 Sistema operativo Particiones de memoria Figura 1-5. Un sistema de multiprogramacin con tres trabajos en memoria. Otra caracterstica importante de los sistemas operativos de tercera generacin fue la capacidad para leer trabajos en tarjetas y colocarlos en el disco tan pronto como se llevaban al cuarto de compu- tadoras.As, cada vez que terminaba un trabajo en ejecucin, el sistema operativo poda cargar un nue- vo trabajo del disco en la particin que entonces estaba vaca y lo ejecutaba.Aesta tcnica se le conoce como spooling (de Simultaneous Peripheral Operation On Line, operacin perifrica simultnea en lnea) y tambin se utiliz para las operaciones de salida. Con el spooling, las mquinas 1401 no eran ya necesarias y desapareci la mayor parte del trabajo de transportar las cintas. Aunque los sistemas operativos de tercera generacin eran apropiados para los clculos cient- ficos extensos y las ejecuciones de procesamiento de datos comerciales masivos, seguan siendo en esencia sistemas de procesamiento por lotes. Muchos programadores aoraban los das de la prime- ra generacin en los que tenan toda la mquina para ellos durante unas cuantas horas, por lo que po- dan depurar sus programas con rapidez. Con los sistemas de tercera generacin, el tiempo que transcurra entre enviar un trabajo y recibir de vuelta la salida era comnmente de varias horas, por lo que una sola coma mal colocada poda ocasionar que fallara la compilacin, y el programador des- perdiciara la mitad del da. Este deseo de obtener un tiempo rpido de respuesta allan el camino para el tiempo compar- tido (timesharing), una variante de la multiprogramacin donde cada usuario tena una terminal en 39. SECCIN 1.2 HISTORIA DE LOS SISTEMAS OPERATIVOS 13 lnea. En un sistema de tiempo compartido, si 20 usuarios estn conectados y 17 de ellos estn pen- sando en dar un paseo o tomar caf, la CPU se puede asignar por turno a los tres trabajos que de- sean ser atendidos. Como las personas que depuran programas generalmente envan comandos cortos (por ejemplo, compilar un procedimiento de cinco hojas) en vez de largos (por ejemplo, or- denar un archivo con un milln de registros), la computadora puede proporcionar un servicio rpi- do e interactivo a varios usuarios y, tal vez, tambin ocuparse en trabajos grandes por lotes en segundo plano, cuando la CPU estara inactiva de otra manera. El primer sistema de tiempo com- partido de propsito general, conocido como CTSS (Compatible Time Sharing System, Sistema compatible de tiempo compartido), se desarroll en el M.I.T. en una 7094 modificada en forma especial (Corbat y colaboradores, 1962). Sin embargo, en realidad el tiempo compartido no se po- pulariz sino hasta que el hardware de proteccin necesario se empez a utilizar ampliamente du- rante la tercera generacin. Despus del xito del sistema CTSS, el M.I.T., Bell Labs y General Electric (que en ese enton- ces era un importante fabricante de computadoras) decidieron emprender el desarrollo de una uti- lera para computadora, una mquina capaz de servir a varios cientos de usuarios simultneos de tiempo compartido. Su modelo fue el sistema de electricidad: cuando se necesita energa, slo hay que conectar un contacto a la pared y, dentro de lo razonable, toda la energa que se requiera esta- r ah. Los diseadores del sistema conocido como MULTICS (MULTiplexed Information and Computing Service; Servicio de Informacin y Cmputo MULTiplexado), imaginaron una enor- me mquina que proporcionaba poder de cmputo a todos los usuarios en el rea de Boston. La idea de que, slo 40 aos despus, se vendieran por millones mquinas 10,000 veces ms rpidas que su mainframe GE-645 (a un precio muy por debajo de los 1000 dlares) era pura ciencia ficcin. Al- go as como la idea de que en estos das existiera un transatlntico supersnico por debajo del agua. MULTICS fue un xito parcial. Se dise para dar soporte a cientos de usuarios en una mqui- na que era slo un poco ms potente que una PC basada en el Intel 386, aunque tena mucho ms capacidad de E/S. Esto no es tan disparatado como parece, ya que las personas saban cmo escri- bir programas pequeos y eficientes en esos das, una habilidad que se ha perdido con el tiempo. Hubo muchas razones por las que MULTICS no acapar la atencin mundial; una de ellas fue el que estaba escrito en PL/I y el compilador de PL/I se demor por aos, adems de que apenas fun- cionaba cuando por fin lleg. Aparte de eso, MULTICS era un sistema demasiado ambicioso para su poca, algo muy parecido a la mquina analtica de Charles Babbage en el siglo diecinueve. Para resumir esta larga historia, MULTICS introdujo muchas ideas seminales en la literatura de las computadoras, pero convertirlas en un producto serio y con xito comercial importante era algo mucho ms difcil de lo que cualquiera hubiera esperado. Bell Labs se retir del proyecto y Gene- ral Electric dej el negocio de las computadoras por completo. Sin embargo, el M.I.T. persisti y logr hacer en un momento dado que MULTICS funcionara. Al final, la compaa que compr el negocio de computadoras de GE (Honeywell) lo vendi como un producto comercial y fue instala- do por cerca de 80 compaas y universidades importantes a nivel mundial. Aunque en nmero pe- queo, los usuarios de MULTICS eran muy leales. Por ejemplo, General Motors, Ford y la Agencia de Seguridad Nacional de los Estados Unidos desconectaron sus sistemas MULTICS slo hasta En este libro utilizaremos los trminos procedimiento, subrutina y funcin de manera indistinta. 40. finales de la dcada de 1990, 30 aos despus de su presentacin en el mercado y de tratar durante aos de hacer que Honeywell actualizara el hardware. Por ahora, el concepto de una utilera para computadora se ha disipado, pero tal vez regrese en forma de servidores masivos de Internet centralizados a los que se conecten mquinas de usua- rio relativamente tontas, donde la mayora del trabajo se realice en los servidores grandes. Es pro- bable que la motivacin en este caso sea que la mayora de las personas no desean administrar un sistema de cmputo cada vez ms complejo y melindroso, y prefieren delegar esa tarea a un equi- po de profesionales que trabajen para la compaa que opera el servidor. El comercio electrnico ya est evolucionando en esta direccin, en donde varias compaas operan centros comerciales elec- trnicos en servidores multiprocesador a los que se conectan las mquinas cliente simples, algo muy parecido al diseo de MULTICS. A pesar de la carencia de xito comercial, MULTICS tuvo una enorme influencia en los siste- mas operativos subsecuentes. Se describe en varios artculos y en un libro (Corbat y colaboradores, 1972; Corbat y Vyssotsky, 1965; Daley y Dennis, 1968; Organick, 1972; y Staltzer, 1974). Tambin tuvo (y an tiene) un sitio Web activo, ubicado en www.multicians.org, con mucha informacin acer- ca del sistema, sus diseadores y sus usuarios. Otro desarrollo importante durante la tercera generacin fue el increble crecimiento de las mi- nicomputadoras, empezando con la DEC PDP-1 en 1961. La PDP-1 tena slo 4K de palabras de 18 bits, pero a $120,000 por mquina (menos de 5 por ciento del precio de una 7094) se vendi co- mo pan caliente. Para cierta clase de trabajo no numrico, era casi tan rpida como la 7094 y dio origen a una nueva industria. A esta minicomputadora le sigui rpidamente una serie de otras PDP (a diferencia de la familia de IBM, todas eran incompatibles), culminando con la PDP-11. Posteriormente, Ken Thompson, uno de los cientficos de cmputo en Bell Labs que trabaj en el proyecto MULTICS, encontr una pequea minicomputadora PDP-7 que nadie estaba usando y se dispuso a escribir una versin simple de MULTICS para un solo usuario. Ms adelante, este tra- bajo se convirti en el sistema operativo UNIX, que se hizo popular en el mundo acadmico, las agencias gubernamentales y muchas compaas. La historia de UNIX ya ha sido contada en muchos otros libros (por ejemplo, Salus, 1994). En el captulo 10 hablaremos sobre parte de esa historia. Por ahora baste con decir que, debido a que el cdigo fuente estaba disponible ampliamente, varias organizaciones desarrollaron sus propias versiones (incompatibles entre s), lo cual produjo un caos. Se desarrollaron dos versiones princi- pales: System V de AT&T y BSD (Berkeley Software Distribution, Distribucin de Software de Berkeley) de la Universidad de California en Berkeley. Estas versiones tenan tambin variantes menores. Para que fuera posible escribir programas que pudieran ejecutarse en cualquier sistema UNIX, el IEEE desarroll un estndar para UNIX conocido como POSIX, con el que la mayora de las versiones de UNIX actuales cumplen. POSIX define una interfaz mnima de llamadas al sis- tema a la que los sistemas UNIX deben conformarse. De hecho, algunos de los otros sistemas ope- rativos tambin admiten ahora la interfaz POSIX. Como agregado, vale la pena mencionar que en 1987 el autor liber un pequeo clon de UNIX conocido como MINIX, con fines educativos. En cuanto a su funcionalidad, MINIX es muy simi- lar a UNIX, incluyendo el soporte para POSIX. Desde esa poca, la versin original ha evolucio- nado en MINIX 3, que es altamente modular y est enfocada a presentar una muy alta confiabilidad. Tiene la habilidad de detectar y reemplazar mdulos con fallas o incluso inutilizables (como los dis- 14 INTRODUCCIN CAPTULO 1 41. SECCIN 1.2 HISTORIA DE LOS SISTEMAS OPERATIVOS 15 positivos controladores de dispositivos de E/S) al instante, sin necesidad de reiniciar y sin pertur- bar a los programas en ejecucin. Tambin hay disponible un libro que describe su operacin inter- na y contiene un listado del cdigo fuente en un apndice (Tanenbaum y Woodhull, 2006). El sistema MINIX 3 est disponible en forma gratuita (incluyendo todo el cdigo fuente) a travs de Internet, en www.minix3.org. El deseo de una versin de produccin (en vez de educativa) gratuita de MINIX llev a un es- tudiante finlands, llamado Linus Torvalds, a escribir Linux. Este sistema estaba inspirado por MI- NIX, adems de que fue desarrollado en este sistema y originalmente ofreca soporte para varias caractersticas de MINIX (por ejemplo, el sistema de archivos de MINIX). Desde entonces se ha extendido en muchas formas, pero todava retiene cierta parte de su estructura subyacente comn para MINIX y UNIX. Los lectores interesados en una historia detallada sobre Linux y el movimien- to de cdigo fuente abierto tal vez deseen leer el libro de Glyn Moody (2001). La mayor parte de lo que se haya dicho acerca de UNIX en este libro se aplica tambin a System V, MINIX, Linux y otras versiones y clones de UNIX. 1.2.4 La cuarta generacin (1980 a la fecha): las computadoras personales Con el desarrollo de los circuitos LSI (Large Scale Integration, Integracin a gran escala), que contienen miles de transistores en un centmetro cuadrado de silicio (chip), naci la era de la computadora personal. En trminos de arquitectura, las computadoras personales (que al princi- pio eran conocidas como microcomputadoras) no eran del todo distintas de las minicomputado- ras de la clase PDP-11, pero en trminos de precio sin duda eran distintas. Mientras que la minicomputadora hizo posible que un departamento en una compaa o universidad tuviera su propia computadora, el chip microprocesador logr que un individuo tuviera su propia compu- tadora personal. Cuando Intel present el microprocesador 8080 en 1974 (la primera CPU de 8 bits de prop- sito general), deseaba un sistema operativo, en parte para poder probarlo. Intel pidi a uno de sus consultores, Gary Kildall, que escribiera uno. Kildall y un amigo construyeron primero un dispo- sitivo controlador para el disco flexible de 8 pulgadas de Shugart Associates que recin haba si- do sacado al mercado, y conectaron el disco flexible con el 8080, con lo cual produjeron la primera microcomputadora con un disco. Despus Kildall escribi un sistema operativo basado en disco conocido como CP/M (Control Program for Microcomputers; Programa de Control para Microcomputadoras) para esta CPU. Como Intel no pens que las microcomputadoras basadas en disco tuvieran mucho futuro, cuando Kildall pidi los derechos para CP/M, Intel le concedi su peticin. Despus Kildall form una compaa llamada Digital Research para desarrollar y vender el CP/M. En 1977, Digital Research redise el CP/M para adaptarlo de manera que se pudiera ejecutar en todas las microcomputadoras que utilizaban los chips 8080, Zilog Z80 y otros. Se escribieron muchos programas de aplicacin para ejecutarse en CP/M, lo cual le permiti dominar por comple- to el mundo de la microcomputacin durante un tiempo aproximado de 5 aos. 42. A principios de la dcada de 1980, IBM dise la IBM PC y busc software para ejecutarlo en ella. La gente de IBM se puso en contacto con Bill Gates para obtener una licencia de uso de su in- trprete de BASIC. Tambin le preguntaron si saba de un sistema operativo que se ejecutara en la PC. Gates sugiri a IBM que se pusiera en contacto con Digital Research, que en ese entonces era la compaa con dominio mundial en el rea de sistemas operativos. Kildall rehus a reunirse con IBM y envi a uno de sus subordinados, a lo cual se le considera sin duda la peor decisin de ne- gocios de la historia. Para empeorar ms an las cosas, su abogado se rehus a firmar el contrato de no divulgacin de IBM sobre la PC, que no se haba anunciado todava. IBM regres con Gates para ver si poda proveerles un sistema operativo. Cuando IBM regres, Gates se haba enterado de que un fabricante local de computadoras, Seattle Computer Products, tena un sistema operativo adecuado conocido como DOS (Disk Ope- rating System; Sistema Operativo en Disco). Se acerc a ellos y les ofreci comprarlo (supues- tamente por 75,000 dlares), a lo cual ellos accedieron de buena manera. Despus Gates ofreci a IBM un paquete con DOS/BASIC, el cual acept. IBM quera ciertas modificaciones, por lo que Gates contrat a la persona que escribi el DOS, Tim Paterson, como empleado de su recin creada empresa de nombre Microsoft, para que las llevara a cabo. El sistema rediseado cambi su nombre a MS-DOS (Microsoft Disk Operating System; Sistema Operativo en Disco de Micro- Soft) y rpidamente lleg a dominar el mercado de la IBM PC. Un factor clave aqu fue la deci- sin de Gates (que en retrospectiva, fue en extremo inteligente) de vender MS-DOS a las empresas de computadoras para que lo incluyeran con su hardware, en comparacin con el inten- to de Kildall por vender CP/M a los usuarios finales, uno a la vez (por lo menos al principio). Despus de que se supo todo esto, Kildall muri en forma repentina e inesperada debido a cau- sas que an no han sido reveladas por completo. Para cuando sali al mercado en 1983 la IBM PC/AT, sucesora de la IBM PC, con la CPU Intel 80286, MS-DOS estaba muy afianzado y CP/M daba sus ltimos suspiros. Ms adelante, MS-DOS se utiliz ampliamente en el 80386 y 80486. Aunque la versin inicial de MS-DOS era bastante primitiva, las versiones siguientes tenan caractersticas ms avanzadas, incluyendo muchas que se tomaron de UNIX. (Microsoft estaba muy al tanto de UNIX e inclusive venda una versin de este sistema para microcomputadora, conocida como XENIX, durante los primeros aos de la com- paa). CP/M, MS-DOS y otros sistemas operativos para las primeras microcomputadoras se basaban en que los usuarios escribieran los comandos mediante el teclado. Con el tiempo esto cambi debi- do a la investigacin realizada por Doug Engelbart en el Stanford Research Institute en la dcada de 1960. Engelbart invent la Interfaz Grfica de Usuario GUI, completa con ventanas, iconos, mens y ratn. Los investigadores en Xerox PARC adoptaron estas ideas y las incorporaron en las mquinas que construyeron. Un da, Steve Jobs, que fue co-inventor de la computadora Apple en su cochera, visit PARC, vio una GUI y de inmediato se dio cuenta de su valor potencial, algo que la administracin de Xe- rox no hizo. Esta equivocacin estratgica de gigantescas proporciones condujo a un libro titulado Fumbling the Future (Smith y Alexander, 1988). Posteriormente, Jobs emprendi el proyecto de construir una Apple con una GUI. Este proyecto culmin en Lisa, que era demasiado costosa y fra- cas comercialmente. El segundo intento de Jobs, la Apple Macintosh, fue un enorme xito, no s- lo debido a que era mucho ms econmica que Lisa, sino tambin porque era amigable para el 16 INTRODUCCIN CAPTULO 1 43. SECCIN 1.2 HISTORIA DE LOS SISTEMAS OPERATIVOS 17 usuario (user friendly), lo cual significaba que estaba diseada para los usuarios que no slo no sa- ban nada acerca de las computadoras, sino que adems no tenan ninguna intencin de aprender. En el mundo creativo del diseo grfico, la fotografa digital profesional y la produccin de video digital profesional, las Macintosh son ampliamente utilizadas y sus usuarios son muy entusiastas sobre ellas. Cuando Microsoft decidi crear un sucesor para el MS-DOS estaba fuertemente influenciado por el xito de la Macintosh. Produjo un sistema basado en GUI llamado Windows, el cual en un principio se ejecutaba encima del MS-DOS (es decir, era ms como un shell que un verdadero sis- tema operativo). Durante cerca de 10 aos, de 1985 a 1995, Windows fue slo un entorno grfico encima de MS-DOS. Sin embargo, a partir de 1995 se liber una versin independiente de Win- dows, conocida como Windows 95, que incorporaba muchas caractersticas de los sistemas opera- tivos y utilizaba el sistema MS-DOS subyacente slo para iniciar y ejecutar programas de MS-DOS antiguos. En 1998, se liber una versin ligeramente modificada de este sistema, conocida como Windows 98. Sin embargo, tanto Windows 95 como Windows 98 an contenan una gran cantidad de lenguaje ensamblador para los procesadores Intel de 16 bits. Otro de los sistemas operativos de Microsoft es Windows NT (NT significa Nueva Tecnolo- ga), que es compatible con Windows 95 en cierto nivel, pero fue completamente rediseado en su interior. Es un sistema completo de 32 bits. El diseador en jefe de