Sistemas operativos modernos

1106

description

libro de Sistemas Operativos

Transcript of Sistemas operativos modernos

  • 1. SISTEMAS OPERATIVOSMODERNOSTERCERA EDICINPrincipios y ParadigmasSegunda edicin

2. SISTEMAS OPERATIVOSMODERNOSTERCERA EDICINANDREW S. TANENBAUMVrije UniversiteitAmsterdam, HolandaTRADUCCINAlfonso Vidal Romero ElizondoIngeniero en Sistemas ComputacionalesInstituto Tecnolgico y de Estudios Superiores de MonterreyCampus MonterreyREVISIN TCNICAJos Ramn Ros SnchezDepartamento Acadmico de ComputacinInstituto Tecnolgico Autnomo de MxicoAarn Jimnez GoveaCatedrtico del Departamento de Ciencias ComputacionalesUniversidad de Guadalajara, Mxico 3. Datos de catalogacin bibliogrficaTANENBAUM, ANDREW S. yMAARTEN VAN STEENSistemas operativos modernos. Tercera edicinPEARSON EDUCACIN, Mxico, 2009ISBN: 978-607-442-046-3rea: ComputacinFormato: 18.5 23.5 cm Pginas: 1104Authorized 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 9780136006633Traduccin 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 espaolEditor: Luis Miguel Cruz Castilloe-mail:[email protected] de desarrollo: Bernardino Gutirrez HernndezSupervisor de produccin: Jos D. Hernndez GarduoEdicin en inglsEditorial Director, Computer Science, Engineering, Cover Illustrator: Steve Lefkowitzand Advanced Mathematics: Marcia J. Horton Interior design: Andrew S. TanenbaumExecutive Editor: Tracy Dunkelberger Typesetting: Andrew S. TanenbaumEditorial Assistant: Melinda Haggerty Art Director: Kenny BeckAssocitate Editor: ReeAnne Davis Art Editor: Gregory DullesSenior Managing Editor: Scott Disanno Media Editor: David AlickProduction Editor: Irwin Zucker Manufacturing Manager: Alan FischerCover Concept: Andrews S. Tanenbaum and Tracy Dunkelberger Manufacturing Buyer: Lisa McDowellCover Design: Tamara Newman Marketing Manager: Mack PattersonTERCERA EDICIN, 2009D.R. 2009 por Pearson Educacin de Mxico, S.A. de C.V.Atlacomulco 500-5o. pisoCol. Industrial Atoto53519, Naucalpan de Jurez, Estado de MxicoCmara 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 editoro de sus representantes.ISBN: 978-607-442-046-3Impreso en Mxico. Printed in Mexico.1 2 3 4 5 6 7 8 9 0 09 10 11 12 4. Para Suzanne, Barbara, Marvin y a la memoria de Bram y Sweetie 5. CONTENIDOPREFACIO xxiv1 INTRODUCCIN 11.1 QU ES UN SISTEMA OPERATIVO? 31.1.1 El sistema operativo como una mquina extendida 41.1.2 El sistema operativo como administrador de recursos 61.2 HISTORIA DE LOS SISTEMAS OPERATIVOS 71.2.1 La primera generacin (1945 a 1955): tubos al vaco 71.2.2 La segunda generacin (1955 a 1965): transistoresy sistemas de procesamiento por lotes 81.2.3 La tercera generacin (1965 a 1980): circuitos integradosy multiprogramacin 101.2.4 La cuarta generacin (1980 a la fecha):las computadoras personales 151.3 REVISIN DEL HARDWARE DE COMPUTADORA 191.3.1 Procesadores 191.3.2 Memoria 231.3.3 Discos 261.3.4 Cintas 271.3.5 Dispositivos de E/S 271.3.6 Buses 301.3.7 Arranque de la computadora 33vii 6. viii CONTENIDO1.4 LOS TIPOS DE SISTEMAS OPERATIVOS 331.4.1 Sistemas operativos de mainframe 341.4.2 Sistemas operativos de servidores 341.4.3 Sistemas operativos de multiprocesadores 341.4.4 Sistemas operativos de computadoras personales 351.4.5 Sistemas operativos de computadoras de bolsillo 351.4.6 Sistemas operativos integrados 351.4.7 Sistemas operativos de nodos sensores 361.4.8 Sistemas operativos en tiempo real 361.4.9 Sistemas operativos de tarjetas inteligentes 371.5 CONCEPTOS DE LOS SISTEMAS OPERATIVOS 371.5.1 Procesos 381.5.2 Espacios de direcciones 401.5.3 Archivos 401.5.4 Entrada/salida 431.5.5 Proteccin 441.5.6 El shell 441.5.7 La ontogenia recapitula la filogenia 461.6 LLAMADAS AL SISTEMA 491.6.1 Llamadas al sistema para la administracin de procesos 521.6.2 Llamadas al sistema para la administracin de archivos 561.6.3 Llamadas al sistema para la administracin de directorios 571.6.4 Miscelnea de llamadas al sistema 581.6.5 La API Win32 de Windows 591.7 ESTRUCTURA DE UN SISTEMA OPERATIVO 621.7.1 Sistemas monolticos 621.7.2 Sistemas de capas 631.7.3 Microkernels 641.7.4 Modelo cliente-servidor 671.7.5 Mquinas virtuales 671.7.6 Exokernels 711.8 EL MUNDO SEGN C 721.8.1 El lenguaje C 721.8.2 Archivos de encabezado 731.8.3 Proyectos de programacin extensos 741.8.4 El modelo del tiempo de ejecucin 751.9 INVESTIGACIN ACERCA DE LOS SISTEMAS OPERATIVOS 761.10 DESCRIPCIN GENERAL SOBRE EL RESTO DE ESTE LIBRO 77 7. CONTENIDO ix1.11 UNIDADES MTRICAS 781.12 RESUMEN 792 PROCESOS E HILOS 832.1 PROCESOS 832.1.1 El modelo del proceso 842.1.2 Creacin de un proceso 862.1.3 Terminacin de procesos 882.1.4 Jerarquas de procesos 892.1.5 Estados de un proceso 902.1.6 Implementacin de los procesos 912.1.7 Modelacin de la multiprogramacin 932.2 HILOS 952.2.1 Uso de hilos 952.2.2 El modelo clsico de hilo 1002.2.3 Hilos en POSIX 1042.2.4 Implementacin de hilos en el espacio de usuario 1062.2.5 Implementacin de hilos en el kernel 1092.2.6 Implementaciones hbridas 1102.2.7 Activaciones del planificador 1112.2.8 Hilos emergentes 1122.2.9 Conversin de cdigo de hilado simple a multihilado 1142.3 COMUNICACIN ENTRE PROCESOS 1172.3.1 Condiciones de carrera 1172.3.2 Regiones crticas 1192.3.3 Exclusin mutua con espera ocupada 1202.3.4 Dormir y despertar 1252.3.5 Semforos 1282.3.6 Mutexes 1302.3.7 Monitores 1342.3.8 Pasaje (transmisin) de mensajes 1402.3.9 Barreras 1442.4 PLANIFICACIN 1452.4.1 Introduccin a la planificacin 1452.4.2 Planificacin en sistemas de procesamiento por lotes 1522.4.3 Planificacin en sistemas interactivos 1542.4.4 Planificacin en sistemas de tiempo real 160 8. x CONTENIDO2.4.5 Poltica contra mecanismo 1612.4.6 Planificacin de hilos 1622.5 PROBLEMAS CLSICOS DE COMUNICACINENTRE PROCESOS (IPC) 1632.5.1 El problema de los filsofos comelones 1642.5.2 El problema de los lectores y escritores 1672.6 INVESTIGACIN ACERCA DE LOS PROCESOS E HILOS 1682.7 RESUMEN 1693 ADMINISTRACIN DE MEMORIA 1753.1 SIN ABSTRACCIN DE MEMORIA 1763.2 UNAABSTRACCIN DE MEMORIA:ESPACIOS DE DIRECCIONES 1793.2.1 La nocin de un espacio de direcciones 1803.2.2 Intercambio 1813.2.3 Administracin de memoria libre 1843.3 MEMORIA VIRTUAL 1883.3.1 Paginacin 1893.3.2 Tablas de pginas 1933.3.3 Aceleracin de la paginacin 1943.3.4 Tablas de pginas para memorias extensas 1983.4 ALGORITMOS DE REEMPLAZO DE PGINAS 2013.4.1 El algoritmo de reemplazo de pginas ptimo 2023.4.2 El algoritmo de reemplazo de pginas: no usadasrecientemente 2033.4.3 El algoritmo de reemplazo de pginas:Primera en entrar, primera en salir (FIFO) 2043.4.4 El algoritmo de reemplazo de pginas: segunda oportunidad 2043.4.5 El algoritmo de reemplazo de pginas: reloj 2053.4.6 El algoritmo de reemplazo de pginas:menos usadas recientemente (LRU) 2063.4.7 Simulacin de LRU en software 2073.4.8 El algoritmo de reemplazo de pginas: conjunto de trabajo 2093.4.9 El algoritmo de reemplazo de pginas WSClock 2133.4.10 Resumen de los algoritmos de reemplazo de pginas 215 9. CONTENIDO xi3.5 CUESTIONES DE DISEO PARALOS SISTEMAS DE PAGINACIN 2163.5.1 Polticas de asignacin local contra las de asignacin global 2163.5.2 Control de carga 2183.5.3 Tamao de pgina 2193.5.4 Espacios separados de instrucciones y de datos 2213.5.5 Pginas compartidas 2213.5.6 Bibliotecas compartidas 2233.5.7 Archivos asociados 2253.5.8 Poltica de limpieza 2263.5.9 Interfaz de memoria virtual 2263.6 CUESTIONES DE IMPLEMENTACIN 2273.6.1 Participacin del sistema operativo en la paginacin 2273.6.2 Manejo de fallos de pgina 2283.6.3 Respaldo de instruccin 2293.6.4 Bloqueo de pginas en memoria 2303.6.5 Almacn de respaldo 2313.6.6 Separacin de poltica y mecanismo 2333.7 SEGMENTACIN 2343.7.1 Implementacin de segmentacin pura 2373.7.2 Segmentacin con paginacin: MULTICS 2383.7.3 Segmentacin con paginacin: Intel Pentium 2423.8 INVESTIGACIN ACERCA DE LAADMINISTRACINDE MEMORIA 2473.9 RESUMEN 2484 SISTEMAS DE ARCHIVOS 2554.1 ARCHIVOS 2574.1.1 Nomenclatura de archivos 2574.1.2 Estructura de archivos 2594.1.3 Tipos de archivos 2604.1.4 Acceso a archivos 2624.1.5 Atributos de archivos 2634.1.6 Operaciones de archivos 2644.1.7 Un programa de ejemplo que utiliza llamadas al sistemade archivos 265 10. xii CONTENIDO4.2 DIRECTORIOS 2684.2.1 Sistemas de directorios de un solo nivel 2684.2.2 Sistemas de directorios jerrquicos 2684.2.3 Nombres de rutas 2694.2.4 Operaciones de directorios 2724.3 IMPLEMENTACIN DE SISTEMAS DE ARCHIVOS 2734.3.1 Distribucin del sistema de archivos 2734.3.2 Implementacin de archivos 2744.3.3 Implementacin de directorios 2804.3.4 Archivos compartidos 2834.3.5 Sistemas de archivos estructurados por registro 2854.3.6 Sistemas de archivos por bitcora 2874.3.7 Sistemas de archivos virtuales 2884.4 ADMINISTRACIN Y OPTIMIZACINDE SISTEMAS DE ARCHIVOS 2924.4.1 Administracin del espacio en disco 2924.4.2 Respaldos del sistema de archivos 2984.4.3 Consistencia del sistema de archivos 3044.4.4 Rendimiento del sistema de archivos 3074.4.5 Desfragmentacin de discos 3114.5 EJEMPLOS DE SISTEMAS DE ARCHIVOS 3124.5.1 Sistemas de archivos de CD-ROM 3124.5.2 El sistema de archivos MS-DOS 3184.5.3 El sistema de archivos V7 de UNIX 3214.6 INVESTIGACIN ACERCA DE LOS SISTEMASDE ARCHIVOS 3244.7 RESUMEN 3245 ENTRADA/SALIDA 3295.1 PRINCIPIOS DEL HARDWARE DE E/S 3295.1.1 Dispositivos de E/S 3305.1.2 Controladores de dispositivos 3315.1.3 E/S por asignacin de memoria 3325.1.4 Acceso directo a memoria (DMA) 3365.1.5 Repaso de las interrupciones 339 11. CONTENIDO xiii5.2 FUNDAMENTOS DEL SOFTWARE DE E/S 3435.2.1 Objetivos del software de E/S 3435.2.2 E/S programada 3445.2.3 E/S controlada por interrupciones 3465.2.4 E/S mediante el uso de DMA 3475.3 CAPAS DEL SOFTWARE DE E/S 3485.3.1 Manejadores de interrupciones 3485.3.2 Drivers de dispositivos 3495.3.3 Software de E/S independiente del dispositivo 3535.3.4 Software de E/S en espacio de usuario 3595.4 DISCOS 3605.4.1 Hardware de disco 3615.4.2 Formato de disco 3765.4.3 Algoritmos de programacin del brazo del disco 3795.4.4 Manejo de errores 3825.4.5 Almacenamiento estable 3855.5 RELOJES 3885.5.1 Hardware de reloj 3885.5.2 Software de reloj 3905.5.3 Temporizadores de software 3935.6 INTERFACES DE USUARIO: TECLADO,RATN, MONITOR 3945.6.1 Software de entrada 3945.6.2 Software de salida 3995.7 CLIENTES DELGADOS 4155.8 ADMINISTRACIN DE ENERGA 4175.8.1 Cuestiones de hardware 4185.8.2 Cuestiones del sistema operativo 4195.8.3 Cuestiones de los programas de aplicaciones 4245.9 INVESTIGACIN ACERCA DE LA E/S 4255.10 RESUMEN 4266 INTERBLOQUEOS 4336.1 RECURSOS 434 12. xiv CONTENIDO6.1.1 Recursos apropiativos y no apropiativos 4346.1.2 Adquisicin de recursos 4356.2 INTRODUCCIN A LOS INTERBLOQUEOS 4376.2.1 Condiciones para los interbloqueos de recursos 4386.2.2 Modelado de interbloqueos 4386.3 EL ALGORITMO DE LAAVESTRUZ 4416.4 DETECCIN Y RECUPERACIN DE UN INTERBLOQUEO 4426.4.1 Deteccin de interbloqueos con un recurso de cada tipo 4426.4.2 Deteccin del interbloqueo con varios recursos de cada tipo 4446.4.3 Recuperacin de un interbloqueo 4476.5 CMO EVITAR INTERBLOQUEOS 4486.5.1 Trayectorias de los recursos 4496.5.2 Estados seguros e inseguros 4506.5.3 El algoritmo del banquero para un solo recurso 4516.5.4 El algoritmo del banquero para varios recursos 4526.6 CMO PREVENIR INTERBLOQUEOS 4546.6.1 Cmo atacar la condicin de exclusin mutua 4546.6.2 Cmo atacar la condicin de contencin y espera 4556.6.3 Cmo atacar la condicin no apropiativa 4556.6.4 Cmo atacar la condicin de espera circular 4566.7 OTRAS CUESTIONES 4576.7.1 Bloqueo de dos fases 4576.7.2 Interbloqueos de comunicaciones 4586.7.3 Bloqueo activo 4596.7.4 Inanicin 4616.8 INVESTIGACIN SOBRE LOS INTERBLOQUEOS 4616.9 RESUMEN 4627 SISTEMAS OPERATIVOS MULTIMEDIA 4677.1 INTRODUCCIN A MULTIMEDIA 4687.2 ARCHIVOS DE MULTIMEDIA 4727.2.1 Codificacin de video 473 13. CONTENIDO xv7.2.2 Codificacin de audio 4767.3 COMPRESIN DE VIDEO 4787.3.1 El estndar JPEG 4787.3.2 El estndar MPEG 4817.4 COMPRESIN DE AUDIO 4847.5 PROGRAMACIN DE PROCESOS MULTIMEDIA 4877.5.1 Procesos de programacin homogneos 4887.5.2 Programacin general en tiempo real 4887.5.3 Programacin monotnica en frecuencia 4907.5.4 Programacin del menor tiempo de respuesta primero 4917.6 PARADIGMAS DE LOS SISTEMAS DE ARCHIVOS MULTIMEDIA 4937.6.1 Funciones de control de VCR 4947.6.2 Video casi bajo demanda 4967.6.3 Video casi bajo demanda con funciones de VCR 4987.7 COLOCACIN DE LOS ARCHIVOS 4997.7.1 Colocacin de un archivo en un solo disco 5007.7.2 Dos estrategias alternativas de organizacin de archivos 5017.7.3 Colocacin de archivos para el video casi bajo demanda 5047.7.4 Colocacin de varios archivos en un solo disco 5067.7.5 Colocacin de archivos en varios discos 5087.8 USO DE CACH 5107.8.1 Cach de bloque 5117.8.2 Cach de archivo 5127.9 PROGRAMACIN DE DISCOS PARA MULTIMEDIA 5137.9.1 Programacin de discos esttica 5137.9.2 Programacin de disco dinmica 5157.10 INVESTIGACIN SOBRE MULTIMEDIA 5167.11 RESUMEN 5178 SISTEMAS DE MLTIPLES PROCESADORES 5238.1 MULTIPROCESADORES 5268.1.1 Hardware de multiprocesador 526 14. xvi CONTENIDO8.1.2 Tipos de sistemas operativos multiprocesador 5348.1.3 Sincronizacin de multiprocesadores 5388.1.4 Planificacin de multiprocesadores 5428.2 MULTICOMPUTADORAS 5488.2.1 Hardware de una multicomputadora 5498.2.2 Software de comunicacin de bajo nivel 5538.2.3 Software de comunicacin a nivel de usuario 5558.2.4 Llamada a procedimiento remoto 5588.2.5 Memoria compartida distribuida 5608.2.6 Planificacin de multicomputadoras 5658.2.7 Balanceo de carga 5658.3 VIRTUALIZACIN 5688.3.1 Requerimientos para la virtualizacin 5708.3.2 Hipervisores de tipo 1 5718.3.3 Hipervisores de tipo 2 5728.3.4 Paravirtualizacin 5748.3.5 Virtualizacin de la memoria 5768.3.6 Virtualizacin de la E/S 5788.3.7 Dispositivos virtuales 5798.3.8 Mquinas virtuales en CPUs de multincleo 5798.3.9 Cuestiones sobre licencias 5808.4 SISTEMAS DISTRIBUIDOS 5808.4.1 Hardware de red 5838.4.2 Protocolos y servicios de red 5868.4.3 Middleware basado en documentos 5908.4.4 Middleware basado en sistemas de archivos 5918.4.5 Middleware basado en objetos 5968.4.6 Middleware basado en coordinacin 5988.4.7 Grids (Mallas) 6038.5 INVESTIGACIN SOBRE LOS SISTEMASDE MLTIPLES PROCESADORES 6048.6 RESUMEN 6059 SEGURIDAD 6119.1 EL ENTORNO DE SEGURIDAD 6139.1.1 Amenazas 613 15. CONTENIDO xvii9.1.2 Intrusos 6159.1.3 Prdida accidental de datos 6169.2 FUNDAMENTOS DE LA CRIPTOGRAFA (CIFRADO) 6169.2.1 Criptografa de clave secreta 6179.2.2 Criptografa de clave pblica 6189.2.3 Funciones de una va 6199.2.4 Firmas digitales 6199.2.5 Mdulo de plataforma confiable 6219.3 MECANISMOS DE PROTECCIN 6229.3.1 Dominios de proteccin 6229.3.2 Listas de control de acceso 6249.3.3 Capacidades 6279.3.4 Sistemas confiables 6309.3.5 Base de cmputo confiable 6319.3.6 Modelos formales de los sistemas seguros 6329.3.7 Seguridad multinivel 6349.3.8 Canales encubiertos 6379.4 AUTENTICACIN 6419.4.1 Autenticacin mediante el uso de contraseas 6429.4.2 Autenticacin mediante el uso de un objeto fsico 6519.4.3 Autenticacin mediante biomtrica 6539.5 ATAQUES DESDE EL INTERIOR 6569.5.1 Bombas lgicas 6569.5.2 Trampas 6579.5.3 Suplantacin de identidad en el inicio de sesin 6589.6 CMO EXPLOTAR LOS ERRORES (BUGS) EN EL CDIGO 6599.6.1 Ataques de desbordamiento del bfer 6609.6.2 Ataques mediante cadenas de formato 6629.6.3 Ataques de retorno a libc 6649.6.4 Ataques por desbordamiento de enteros 6659.6.5 Ataques por inyeccin de cdigo 6669.6.6 Ataques por escalada de privilegios 6679.7 MALWARE 6679.7.1 Caballos de Troya (troyanos) 6709.7.2 Virus 6729.7.3 Gusanos 6829.7.4 Spyware 6849.7.5 Rootkits 688 16. xviii CONTENIDO9.8 DEFENSAS 6929.8.1 Firewalls 6939.8.2 Los antivirus y las tcnicas anti-antivirus 6959.8.3 Firma de cdigo 7019.8.4 Encarcelamiento 7029.8.5 Deteccin de intrusos basada en modelos 7039.8.6 Encapsulamiento de cdigo mvil 7059.8.7 Seguridad de Java 7099.9 INVESTIGACIN SOBRE LA SEGURIDAD 7119.10 RESUMEN 71210 CASO DE ESTUDIO 1: LINUX 71910.1 HISTORIA DE UNIX Y LINUX 72010.1.1 UNICS 72010.1.2 UNIX EN LA PDP-11 72110.1.3 UNIX portable 72210.1.4 Berkeley UNIX 72310.1.5 UNIX estndar 72410.1.6 MINIX 72510.1.7 Linux 72610.2 GENERALIDADES SOBRE LINUX 72810.2.1 Objetivos de Linux 72910.2.2 Interfaces para Linux 73010.2.3 El shell 73110.2.4 Programas utilitarios de Linux 73410.2.5 Estructura del kernel 73610.3 LOS PROCESOS EN LINUX 73910.3.1 Conceptos fundamentales 73910.3.2 Llamadas al sistema para administrar procesos en Linux 74110.3.3 Implementacin de procesos e hilos en Linux 74510.3.4 Planificacin en Linux 75210.3.5 Arranque de Linux 75510.4 ADMINISTRACIN DE LA MEMORIA EN LINUX 75810.4.1 Conceptos fundamentales 75810.4.2 Llamadas al sistema de administracin de memoria en Linux 761 17. CONTENIDO xix10.4.3 Implementacin de la administracin de la memoriaen Linux 76210.4.4 La paginacin en Linux 76810.5 ENTRADA/SALIDA EN LINUX 77110.5.1 Conceptos fundamentales 77210.5.2 Redes 77310.5.3 Llamadas al sistema de Entrada/Salida en Linux 77510.5.4 Implementacin de la entrada/salida en Linux 77510.5.5 Los mdulos en Linux 77910.6 EL SISTEMA DE ARCHIVOS DE LINUX 77910.6.1 Conceptos fundamentales 78010.6.2 Llamadas al sistema de archivos en Linux 78510.6.3 Implementacin del sistema de archivos de Linux 78810.6.4 NFS: El sistema de archivos de red 79610.7 LA SEGURIDAD EN LINUX 80310.7.1 Conceptos fundamentales 80310.7.2 Llamadas al sistema de seguridad en Linux 80510.7.3 Implementacin de la seguridad en Linux 80610.8 RESUMEN 80611 CASO DE ESTUDIO 2:WINDOWS VISTA 81311. 1 HISTORIA DE WINDOWS VISTA 81311.1.1 1980: MS-DOS 81411.1.2 1990: Windows basado en MS-DOS 81511.1.3 2000: Windows basado en NT 81511.1.4 Windows Vista 81811.2 PROGRAMACIN DE WINDOWS VISTA 81911.2.1 La Interfaz de programacin de aplicaciones de NT nativa 82211.2.2 La interfaz de programacin de aplicaciones Win32 82511.2.3 El registro de Windows 82911.3 ESTRUCTURA DEL SISTEMA 83111.3.1 Estructura del sistema operativo 83211.3.2 Booteo de Windows Vista 84711.3.3 Implementacin del administrador de objetos 84811.3.4 Subsistemas, DLLs y servicios en modo de usuario 858 18. xx CONTENIDO11.4 PROCESOS E HILOS EN WINDOWS VISTA 86111.4.1 Conceptos fundamentales 86111.4.2 Llamadas a la API para administrar trabajos, procesos,hilos y fibras 86611.4.3 Implementacin de procesos e hilos 87111.5 ADMINISTRACIN DE LA MEMORIA 87911.5.1 Conceptos fundamentales 87911.5.2 Llamadas al sistema para administrar la memoria 88411.5.3 Implementacin de la administracin de memoria 88511.6 USO DE LA CACH EN WINDOWS VISTA 89411.7 ENTRADA/SALIDA EN WINDOWS VISTA 89611.7.1 Conceptos fundamentales 89711.7.2 Llamadas a la API de entrada/salida 89811.7.3 Implementacin de la E/S 90111.8 EL SISTEMA DE ARCHIVOS NT DE WINDOWS 90611.8.1 Conceptos fundamentales 90711.8.2 Implementacin del sistema de archivos NT 90811.9 LA SEGURIDAD EN WINDOWS VISTA 91811.9.1 Conceptos fundamentales 91911.9.2 Llamadas a la API de seguridad 92111.9.3 Implementacin de la seguridad 92211.10 RESUMEN 92412 CASO DE ESTUDIO 3: SYMBIAN OS 92912.1 LA HISTORIA DE SYMBIAN OS 93012.1.1 Races de Symbian OS: Psion y EPOC 93012.1.2 Symbian OS versin 6 93112.1.3 Symbian OS versin 7 93212.1.4 Symbian OS en la actualidad 93212.2 GENERALIDADES SOBRE SYMBIAN OS 93212.2.1 Orientacin a objetos 93312.2.2 Diseo del microkernel 93412.2.3 El nanokernel de Symbian OS 93512.2.4 Acceso a los recursos de cliente/servidor 935 19. CONTENIDO xxi12.2.5 Caractersticas de un sistema operativo ms grande 93612.2.6 Comunicaciones y multimedia 93712.3 PROCESOS E HILOS EN SYMBIAN OS 93712.3.1 Hilos y nanohilos 93812.3.2 Procesos 93912.3.3 Objetos activos 93912.3.4 Comunicacin entre procesos 94012.4 ADMINISTRACIN DE LA MEMORIA 94112.4.1 Sistemas sin memoria virtual 94112.4.2 Cmo direcciona Symbian OS la memoria 94312.5 ENTRADA Y SALIDA 94512.5.1 Drivers de dispositivos 94512.5.2 Extensiones del kernel 94612.5.3 Acceso directo a la memoria 94612.5.4 Caso especial: medios de almacenamiento 94712.5.5 Bloqueo de E/S 94712.5.6 Medios removibles 94812.6 SISTEMAS DE ALMACENAMIENTO 94812.6.1 Sistemas de archivos para dispositivos mviles 94812.6.2 Sistemas de archivos de Symbian OS 94912.6.3 Seguridad y proteccin del sistema de archivos 94912.7 LA SEGURIDAD EN SYMBIAN OS 95012.8 LA COMUNICACIN EN SYMBIAN OS 95312.8.1 Infraestructura bsica 95312.8.2 Un anlisis ms detallado de la infraestructura 95412.9 RESUMEN 95713 DISEO DE SISTEMAS OPERATIVOS 95913.1 LA NATURALEZA DEL PROBLEMA DE DISEO 96013.1.1 Objetivos 96013.1.2 Por qu es difcil disear un sistema operativo? 96113.2 DISEO DE INTERFACES 96313.2.1 Principios de gua 963 20. xxii CONTENIDO13.2.2 Paradigmas 96513.2.3 La interfaz de llamadas al sistema 96813.3 IMPLEMENTACIN 97113.3.1 Estructura del sistema 97113.3.2 Comparacin entre mecanismo y directiva 97513.3.3 Ortogonalidad 97613.3.4 Nomenclatura 97713.3.5 Tiempo de vinculacin 97813.3.6 Comparacin entre estructuras estticas y dinmicas 97913.3.7 Comparacin entre la implementacin de arriba-abajoy la implementacin de abajo-arriba 98013.3.8 Tcnicas tiles 98113.4 RENDIMIENTO 98713.4.1 Por qu son lentos los sistemas operativos? 98713.4.2 Qu se debe optimizar? 98813.4.3 Concesiones entre espacio y tiempo 98813.4.4 Uso de cach 99113.4.5 Sugerencias 99213.4.6 Explotar la localidad 99313.4.7 Optimizar el caso comn 99313.5 ADMINISTRACIN DE PROYECTOS 99413.5.1 El mtico hombre-mes 99413.5.2 Estructura de equipos 99513.5.3 La funcin de la experiencia 99713.5.4 Sin bala de plata 99813.6 TENDENCIAS EN EL DISEO DE SISTEMAS OPERATIVOS 99813.6.1 Virtualizacin 99913.6.2 Chips multincleo 99913.6.3 Sistemas operativos con espacios de direcciones extensos 100013.6.4 Redes 100013.6.5 Sistemas paralelos y distribuidos 100113.6.6 Multimedia 100113.6.7 Computadoras operadas por bateras 100213.6.8 Sistemas embebidos 100213.6.9 Nodos de monitoreo 100313.7 RESUMEN 1003 21. CONTENIDO xxiii14 LISTA DE LECTURAS Y BIBLIOGRAFA 100714.1 SUGERENCIAS PARA CONTINUAR LA LECTURA 100714.1.1 Introduccin y obras generales 100814.1.2 Procesos e hilos 100814.1.3 Administracin de la memoria 100914.1.4 Entrada/salida 100914.1.5 Sistemas de archivos 101014.1.6 Interbloqueos 101014.1.7 Sistemas operativos multimedia 101014.1.8 Sistemas con varios procesadores 101114.1.9 Seguridad 101214.1.10 Linux 101414.1.11 Windows Vista 101414.1.12 El sistema operativo Symbian 101514.1.13 Principios de diseo 101514.2 BIBLIOGRAFA EN ORDEN ALFABTICO 1016NDICE 1049 22. PREFACIOLa tercera edicin de este libro difiere de la segunda en muchos aspectos. Para empezar, reordena-moslos captulos para colocar el material central al principio. Tambin pusimos mayor nfasis enel sistema operativo como el creador de las abstracciones. El captulo 1, se ha actualizado en formaconsiderable y ofrece una introduccin de todos los conceptos; el captulo 2 trata sobre la abstrac-cinde la CPU en varios procesos; el 3 aborda la abstraccin de la memoria fsica en espacios dedirecciones (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 proporcionanlos sistemas operativos, y es la razn por la que hayamos colocado los captulos correspondientesantes de lo establecido en la edicin anterior.El captulo 1 se modific y actualiz de manera considerable. Por ejemplo, ahora proporcionauna introduccin al lenguaje de programacin C y al modelo de C en tiempo de ejecucin para loslectores que estn familiarizados slo con Java.En el captulo 2, el anlisis de los hilos (threads) se modific y expandi para reflejar su nue-vaimportancia. Entre otras cosas, ahora hay una seccin acerca de los hilos Pthreads del estndarde IEEE.El captulo 3, sobre la administracin de memoria, se reorganiz para poner nfasis en la ideade que una de las funciones clave de un sistema operativo es proporcionar la abstraccin de un es-paciode direcciones virtuales para cada proceso. Se elimin el material que trata de la administra-cinde memoria en los sistemas de procesamiento por lotes, y se actualiz el referente a laimplementacin de la paginacin, con el fin de destacar la necesidad de administrar espacios de di-reccionesms extensos (ahora muy comunes) y de ofrecer una mayor velocidad.xxiv 23. PREFACIO xxvSe actualizaron los captulos 4 a 7: se elimin cierto material anterior y se agreg nuevo. Lassecciones sobre las actividades actuales de investigacin en estos captulos se reescribieron desdecero y se agregaron muchos nuevos problemas y ejercicios de programacin.Se actualiz el captulo 8, incluyendo cierto material acerca de los sistemas multincleo. Seagreg una nueva seccin sobre la tecnologa de hipervirtualizacin, los hipervisores y las mqui-nasvirtuales, donde se utiliz VMware como ejemplo.El captulo 9 se modific y reorganiz de manera considerable, con mucho material actuali-zadoreferente a la explotacin de los errores (bugs) en el cdigo, el malware y las defensas con-trastos.El captulo 10, que trata acerca de Linux, es una readaptacin del anterior (que trataba so-breUNIX y Linux). Sin duda, ahora el nfasis est en Linux y hay una gran cantidad de mate-rialnuevo.El captulo 11, sobre Windows Vista, es una importante revisin del captulo 11 anterior, quetrataba 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-molos 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 enel mercado que PCs y computadoras porttiles. Esta edicin remedia este problema con un an-lisisextendido de Symbian OS, que se utiliza ampliamente en los telfonos inteligentes (SmartPhones).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-mentospara 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 sistemasoperativos, experimentos de laboratorio para los estudiantes, simuladores y material adicional parautilizar en sus cursos. Los instructores que utilicen este libro como texto definitivamente deben dar-leun 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. Tracyfue 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, actuarcomo 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-trictoitinerario de trabajo para poder lograr que este libro se imprimiera a tiempo, e hizo todo esto man-tenindoseanimosa y alegre, a pesar de tener muchas otras actividades que exigan gran parte de suatencin. Gracias Tracy, en verdad te lo agradezco.Ada Gavrilovska de Georgia Tech, experta en los aspectos internos sobre Linux, actualiz elcaptulo 10 que estaba basado en UNIX (con nfasis en FreeBSD) para convertirlo en algo ms en-focadoen Linux, aunque gran parte del captulo sigue siendo genrico para todos los sistemasUNIX. 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, paraconcentrarlo 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 ladiferencia entre los puntos en los que Microsoft hizo lo correcto y en los que se equivoc. Comoresultado de su trabajo este libro es mucho mejor. 24. Mike Jipping de Hope College escribi el captulo acerca de Symbian OS. No abordar los sis-temasembebidos en tiempo real era una grave omisin en el libro; gracias a Mike se resolvi eseproblema. Los sistemas embebidos en tiempo real se estn volviendo cada vez ms importantes enel 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, ShivakantMishra, de la University of Colorado en Boulder, fungi ms como un sistema distribuido, leyendoy haciendo comentarios sobre muchos captulos, adems de proporcionar una gran cantidad de ejer-ciciosy problemas de programacin nuevos a lo largo del libro.Hugh Lauer tambin merece una mencin especial. Cuando le pedimos ideas sobre cmo re-visarla segunda edicin, no esperbamos un informe de 23 pginas con interlineado sencillo; ysin embargo eso fue lo que obtuvimos. Muchos de los cambios, como el nuevo nfasis sobre lasabstracciones 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 elsugerir nuevos temas a cubrir, leer el manuscrito con cuidado, hacer suplementos y contribuir connuevos 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-kery 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-nepor su amor y paciencia recientes.Andrew S. Tanenbaum.xxvi PREFACIO 25. ACERCA DELAUTORAndrew S. Tanenbaum tiene una licenciatura en ciencias del M.I.T. y un doctorado de la Universityof California, en Berkeley. En la actualidad es profesor de Ciencias computacionales en la VrijeUniversiteit, en Amsterdam, Holanda, donde encabeza el Grupo de sistemas computacionales. FueDecano de la Advanced School for Computing and Imaging, una escuela de graduados interuniver-sidadesque realiza investigaciones acerca de los sistemas paralelos avanzados, distribuidos y decreacin de imgenes. Ahora es Profesor acadmico de la Royal Netherlands Academy of Arts andSciencies, lo cual le ha salvado de convertirse en un burcrata.Tanenbaum ha realizado investigaciones sobre compiladores, sistemas operativos, redes, siste-masdistribuidos de rea local y sistemas distribuidos de rea amplia que se escalan hasta mil mi-llonesde usuarios. Estos proyectos de investigacin han producido ms de 140 artculos evaluadospor expertos en publicaciones especializadas y conferencias. Tambin ha participado como autoro coautor en cinco libros, que a la fecha han aparecido en 18 ediciones. Estos libros se han traduci-doa 21 idiomas, desde vasco hasta tailands, y se utilizan en universidades de todo el mundo; Lacombinacin idioma+edicin da 130 versiones.El profesor Tanenbaum tambin ha producido una cantidad considerable de software. Fue el ar-quitectoprincipal del Amsterdam Compiler Kit, un kit de herramientas utilizado ampliamente paraescribir compiladores portables. Tambin fue uno de los diseadores principales de Amoeba, unode los primeros sistemas distribuidos utilizado en una coleccin de estaciones de trabajo conecta-dasmediante 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-loen los laboratorios de programacin de los estudiantes. Fue la inspiracin directa para Linux y laplataforma en la que se desarroll inicialmente. La versin actual de MINIX, conocida como MI-NIX3, se concentra en un sistema operativo extremadamente confiable y seguro. El profesor Ta-nenbaumconsidera que su labor habr terminado el da que sea innecesario equipar cadacomputadora 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 descargaruna 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 degraduarse y l est muy orgulloso de ellos.Tanenbaum es miembro del ACM, del IEEE y de la Royal Netherlands Academy of Arts andSciences. 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 AwardTambin pertenece a la lista de Quin es quin en el mundo (Whos Who in the World). Su pginaWeb se encuentra en el URL http://www.cs.vu.nl/~ast /. 26. 1INTRODUCCINUna 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 aplicacionestuvieran que comprender el funcionamiento de todas estas partes, no escribiran cdigo alguno. Esms: el trabajo de administrar todos estos componentes y utilizarlos de manera ptima es una tareamuy desafiante. Por esta razn, las computadoras estn equipadas con una capa de software llama-dasistema operativo, cuyo trabajo es proporcionar a los programas de usuario un modelo de compu-tadoramejor, ms simple y pulcro, as como encargarse de la administracin de todos los recursosantes mencionados. Los sistemas operativos son el tema de este libro.La mayora de los lectores habrn tenido cierta experiencia con un sistema operativo comoWindows, Linux, FreeBSD o Mac OS X, pero las apariencias pueden ser engaosas. El progra-macon el que los usuarios generalmente interactan se denomina shell, cuando est basado entexto, y GUI (Graphical User Interface; Interfaz grfica de usuario) cuando utiliza elementosgrficos o iconos. En realidad no forma parte del sistema operativo, aunque lo utiliza para llevara 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 encuentrael software. La mayora de las computadoras tienen dos modos de operacin: modo kernel y modousuario. 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 acceso1 27. 2 INTRODUCCIN CAPTULO 1completo a todo el hardware y puede ejecutar cualquier instruccin que la mquina sea capaz deejecutar. El resto del software se ejecuta en modo usuario, en el cual slo un subconjunto de lasinstrucciones de mquina es permitido. En particular, las instrucciones que afectan el control de la m-quinao que se encargan de la E/S (entrada/salida) estn prohibidas para los programas en modousuario. Volveremos a tratar las diferencias entre el modo kernel y el modo usuario repetidamentea lo largo de este libro.SoftwareHardwareModo usuarioNavegadorWebLector decorreoelectrnicoModo kernel Sistema operativoReproductorde msicaPrograma de interfaz de usuarioFigura 1-1. Ubicacin del sistema operativo.El programa de interfaz de usuario, shell o GUI, es el nivel ms bajo del software en modousuario y permite la ejecucin de otros programas, como un navegador Web, lector de correo elec-trnicoo reproductor de msica. Estos programas tambin utilizan en forma intensiva el sistemaoperativo.La ubicacin del sistema operativo se muestra en la figura 1-1. Se ejecuta directamente sobreel 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-rioes que, si a un usuario no le gusta, por ejemplo, su lector de correo electrnico, es libre de con-seguirotro o incluso escribir el propio si as lo desea; sin embargo, no es libre de escribir su propiomanejador de interrupciones de reloj, que forma parte del sistema operativo y est protegido por elhardware 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-nocecomo 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 utilizaninterpretacin y no el hardware).Adems, en muchos sistemas hay programas que se ejecutan en modo de usuario, pero ayudanal sistema operativo o realizan funciones privilegiadas. Por ejemplo, a menudo hay un programa quepermite a los usuarios cambiar su contrasea. Este programa no forma parte del sistema operativo yno se ejecuta en modo kernel, pero sin duda lleva a cabo una funcin delicada y tiene que proteger- 28. SECCIN 1.1 QU ES UN SISTEMA OPERATIVO? 3se de una manera especial. En ciertos sistemas, la idea se lleva hasta el extremo y partes de lo quetradicionalmente se considera el sistema operativo (por ejemplo, el sistema de archivos) se ejecutanen el espacio del usuario. En dichos sistemas es difcil trazar un lmite claro. Todo lo que se ejecuta enmodo kernel forma, sin duda, parte del sistema operativo, pero podra decirse que algunos progra-masque se ejecutan fuera de este modo tambin forman parte del mismo sistema, o por lo menos es-tnestrechamente asociados a l.Los sistemas operativos difieren de los programas de usuario (es decir, de aplicacin) en variascuestiones 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 cincomillones de lneas de cdigo. Para tener una idea de lo que esto significa, considere el trabajo deimprimir cinco millones de lneas en un formato de libro: con 50 lneas por pgina y 1000 pginaspor 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 aun 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-riocomo la interfaz grfica, las bibliotecas y el software de aplicacin bsico (como el Exploradorde 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 unalarga vida: es muy difcil escribir uno y, por lo tanto, el propietario se resiste a tirarlo y empezar denuevo. 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 aparienciasimilar para los usuarios, ya que Microsoft se asegur bien de ello, sin embargo, tuvo muy buenasrazones para deshacerse de Windows 98, las cuales describiremos cuando estudiemos Windows condetalle en el captulo 11.El otro ejemplo principal que utilizaremos a lo largo de este libro (adems de Windows) esUNIX, con sus variantes y clones. Tambin ha evolucionado a travs de los aos con versiones ta-lescomo System V, Solaris y FreeBSD que se derivan del sistema original, mientras que Linux tie-neuna base de cdigo nueva, modelada estrechamente de acuerdo con UNIX y altamente compatiblecon l. Utilizaremos ejemplos de UNIX a lo largo de este libro y analizaremos Linux con detalle enel 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 losconceptos bsicos y su estructura. En captulos posteriores volveremos a hablar sobre muchos deestos 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 enmodo kernel (adems de que esto no siempre es cierto). Parte del problema es que los sistemas ope-rativosrealizan dos funciones bsicas que no estn relacionadas: proporcionar a los programadoresde aplicaciones (y a los programas de aplicaciones, naturalmente) un conjunto abstracto de recur-sossimples, en vez de los complejos conjuntos de hardware; y administrar estos recursos de hard- 29. 4 INTRODUCCIN CAPTULO 1ware. Dependiendo de quin se est hablando, el lector podra escuchar ms acerca de una funcino de la otra. Ahora analizaremos ambas.1.1.1 El sistema operativo como una mquina extendidaLa arquitectura (conjunto de instrucciones, organizacin de memoria, E/S y estructura de bus) dela 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 selleva 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 enIntel (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 mssimple que un disco duro moderno. El PD765 tiene 16 comandos, cada uno de los cuales se espe-cificamediante la carga de 1 a 9 bytes en un registro de dispositivo. Estos comandos son para leery 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-quiere13 parmetros, empaquetados en 9 bytes. Estos parmetros especifican elementos tales co-mola direccin del bloque de disco a leer, el nmero de sectores por pista, el modo de grabacinutilizado en el medio fsico, el espacio de separacin entre sectores y lo que se debe hacer con unamarca 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 en7 bytes. Como si esto no fuera suficiente, el programador del disco flexible tambin debe estar cons-tantementeal 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 motorno se debe dejar demasiado tiempo encendido porque se desgastar. Por lo tanto, el programador seve obligado a lidiar con el problema de elegir entre tener retrasos largos de arranque o desgastar losdiscos flexibles (y llegar a perder los datos).Sin entrar en los detalles reales, debe quedar claro que el programador promedio tal vez no de-seeinvolucrarse demasiado con la programacin de los discos flexibles (o de los discos duros, queson an ms complejos). En vez de ello, lo que desea es una abstraccin simple de alto nivel que seencargue de lidiar con el disco. En el caso de los discos, una abstraccin comn sera que el discocontiene 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 grabacindebe 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 conviertenuna tarea casi imposible en dos tareas manejables. La primera de stas es definir e implementar lasabstracciones; la segunda, utilizarlas para resolver el problema en cuestin. Una abstraccin que ca-sicualquier usuario de computadora comprende es el archivo: es una pieza til de informacin, co-mouna fotografa digital, un mensaje de correo electrnico almacenado o una pgina Web. Es msfcil lidiar con fotografas, correos electrnicos y pginas Web que con los detalles de los discos, 30. SECCIN 1.1 QU ES UN SISTEMA OPERATIVO? 5como en el caso del disco flexible descrito. El trabajo del sistema operativo es crear buenas abstrac-cionespara despus implementar y administrar los objetos abstractos entonces creados. En este li-brohablaremos mucho acerca de las abstracciones, dado que son claves para comprender lossistemas operativos.Este punto es tan importante que vale la pena repetirlo en distintas palabras. Con el debidorespeto 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 escribirsoftware para utilizarlos. Algunas veces esto se debe a la necesidad de tener compatibilidad con elhardware anterior; otras, a un deseo de ahorrar dinero, y otras ms, a que los diseadores de hard-wareno tienen idea (o no les importa) qu tan grave es el problema que estn ocasionando para elsoftware. Una de las principales tareas del sistema operativo es ocultar el hardware y presentar alos programas (y a sus programadores) abstracciones agradables, elegantes, simples y consisten-tescon las que puedan trabajar. Los sistemas operativos ocultan la parte fea con la parte hermosa,como se muestra en la figura 1-2.Sistema operativoHardwareInterfaz hermosaInterfaz feaProgramas de aplicacinFigura 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-tecon el sistema operativo y sus abstracciones. En contraste, los usuarios finales tienen que lidiarcon las abstracciones que proporciona la interfaz de usuario, ya sea un shell de lnea de comandoso una interfaz grfica. Aunque las abstracciones en la interfaz de usuario pueden ser similares a lasque proporciona el sistema operativo, ste no siempre es el caso. Para aclarar este punto, considereel escritorio normal de Windows y el indicador para comandos orientado a texto. Ambos son pro-gramasque se ejecutan en el sistema operativo Windows y utilizan las abstracciones que este siste-maproporciona, pero ofrecen interfaces de usuario muy distintas. De manera similar, un usuario deLinux que ejecuta Gnome o KDE ve una interfaz muy distinta a la que ve un usuario de Linux quetrabaja directamente encima del Sistema X Window subyacente (orientado a texto), pero las abs-traccionesdel sistema operativo subyacente son las mismas en ambos casos. 31. 6 INTRODUCCIN CAPTULO 1En este libro estudiaremos detalladamente las abstracciones que se proporcionan a los progra-masde aplicacin, pero trataremos muy poco acerca de las interfaces de usuario, que es un temabastante 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 recursosEl concepto de un sistema operativo cuya funcin principal es proporcionar abstracciones a los pro-gramasde aplicacin responde a una perspectiva de arriba hacia abajo. La perspectiva alterna, deabajo hacia arriba, sostiene que el sistema operativo est presente para administrar todas las piezasde 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 ordenaday controlada de los procesadores, memorias y dispositivos de E/S, entre los diversos programas quecompiten por estos recursos.Los sistemas operativos modernos permiten la ejecucin simultnea de varios programas. Ima-ginelo que ocurrira si tres programas que se ejecutan en cierta computadora trataran de imprimirsus resultados en forma simultnea en la misma impresora. Las primeras lneas de impresin po-dranprovenir del programa 1, las siguientes del programa 2, despus algunas del programa 3, y asen 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 unprograma, el sistema operativo puede entonces copiar su salida, previamente almacenada, del archi-voen disco a la impresora, mientras que al mismo tiempo el otro programa puede continuar gene-randoms salida, ajeno al hecho de que la salida en realidad no se est enviando a la impresoratodava.Cuando una computadora (o red) tiene varios usuarios, la necesidad de administrar y protegerla memoria, los dispositivos de E/S y otros recursos es cada vez mayor; de lo contrario, los usua-riospodran interferir unos con otros. Adems, los usuarios necesitan con frecuencia compartir noslo 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 quprograma est utilizando qu recursos, de otorgar las peticiones de recursos, de contabilizar su usoy de mediar las peticiones en conflicto provenientes de distintos programas y usuarios.La administracin de recursos incluye el multiplexaje (compartir) de recursos en dos formasdistintas: en el tiempo y en el espacio. Cuando un recurso se multiplexa en el tiempo, los distintosprogramas o usuarios toman turnos para utilizarlo: uno de ellos obtiene acceso al recurso, despusotro, y as en lo sucesivo. Por ejemplo, con slo una CPU y varios programas que desean ejecutar-seen ella, el sistema operativo primero asigna la CPU a un programa y luego, una vez que se haejecutado por el tiempo suficiente, otro programa obtiene acceso a la CPU, despus otro, y en unmomento dado el primer programa vuelve a obtener acceso al recurso. La tarea de determinar c-mose multiplexa el recurso en el tiempo (quin sigue y durante cunto tiempo) es responsabilidaddel 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. 32. SECCIN 1.2 HISTORIA DE LOS SISTEMAS OPERATIVOS 7El otro tipo de multiplexaje es en el espacio. En vez de que los clientes tomen turnos, cada unoobtiene una parte del recurso. Por ejemplo, normalmente la memoria principal se divide entre va-riosprogramas 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 paracontener varios programas, es ms eficiente contener varios programas en memoria a la vez, en vezde 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 correspondeal sistema operativo resolverlos. Otro recurso que se multiplexa en espacio es el disco duro. En mu-chossistemas, un solo disco puede contener archivos de muchos usuarios al mismo tiempo. Asig-narespacio en disco y llevar el registro de quin est utilizando cules bloques de disco es una tareatpica de administracin de recursos comn del sistema operativo.1.2 HISTORIA DE LOS SISTEMAS OPERATIVOSLos sistemas operativos han ido evolucionando a travs de los aos. En las siguientes seccionesanalizaremos brevemente algunos de los hitos ms importantes. Como los sistemas operativos hanestado estrechamente relacionados a travs de la historia con la arquitectura de las computadoras enlas que se ejecutan, analizaremos generaciones sucesivas de computadoras para ver cmo eran sussistemas operativos. Esta vinculacin de generaciones de sistemas operativos con generaciones decomputadoras es un poco burda, pero proporciona cierta estructura donde de cualquier otra formano habra.La progresin que se muestra a continuacin es en gran parte cronolgica, aunque el desarro-lloha 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. Ellector 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-truirsu mquina analtica, nunca logr hacer que funcionara de manera apropiada, debido a queera puramente mecnica y la tecnologa de su era no poda producir las ruedas, engranes y dientescon 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-quinaanaltica, por lo cual contrat a una joven llamada Ada Lovelace, hija del afamado poeta bri-tnicoLord Byron, como la primera programadora del mundo. El lenguaje de programacin Adalleva su nombre.1.2.1 La primera generacin (1945 a 1955): tubos al vacoDespus de los esfuerzos infructuosos de Babbage, no hubo muchos progresos en la construccinde computadoras digitales sino hasta la Segunda Guerra Mundial, que estimul una explosin deesta actividad. El profesor John Atanasoff y su estudiante graduado Clifford Berry construyeron loque ahora se conoce como la primera computadora digital funcional en Iowa State University. Uti-lizaba300 tubos de vaco (bulbos). Aproximadamente al mismo tiempo, Konrad Zuse en Berln 33. 8 INTRODUCCIN CAPTULO 1construy la computadora Z3 a partir de relevadores. En 1944, la mquina Colossus fue construidapor un equipo de trabajo en Bletchley Park, Inglaterra; la Mark I, por Howard Aiken en Harvard, yla ENIAC, por William Mauchley y su estudiante graduado J. Presper Eckert en la Universidad dePennsylvania. Algunas fueron binarias, otras utilizaron bulbos, algunas eran programables, pero to-daseran 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 serealizaba exclusivamente en lenguaje mquina o, peor an, creando circuitos elctricos mediantela conexin de miles de cables a tableros de conexiones (plugboards) para controlar las funcionesbsicas de la mquina. Los lenguajes de programacin eran desconocidos (incluso se desconocael lenguaje ensamblador). Los sistemas operativos tambin se desconocan. El modo usual de ope-racinconsista en que el programador trabajaba un periodo dado, registrndose en una hoja defirmas, y despus entraba al cuarto de mquinas, insertaba su tablero de conexiones en la compu-tadorae inverta varias horas esperando que ninguno de los cerca de 20,000 bulbos se quemara du-rantela 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 lastarjetas perforadas. Entonces fue posible escribir programas en tarjetas y leerlas en vez de usar ta-blerosde conexiones; aparte de esto, el procedimiento era el mismo.1.2.2 La segunda generacin (1955 a 1965): transistoresy sistemas de procesamiento por lotesLa 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-lasa clientes dispuestos a pagar por ellas, con la expectativa de que seguiran funcionando eltiempo suficiente como para poder llevar a cabo una cantidad til de trabajo. Por primera vez ha-bauna clara separacin entre los diseadores, constructores, operadores, programadores y el per-sonalde mantenimiento.Estas mquinas, ahora conocidas como mainframes, estaban encerradas en cuartos especialescon aire acondicionado y grupos de operadores profesionales para manejarlas. Slo las empresasgrandes, universidades o agencias gubernamentales importantes podan financiar el costo multimi-llonariode operar estas mquinas. Para ejecutar un trabajo (es decir, un programa o conjunto deprogramas), 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-tradade datos y lo entregaba a uno de los operadores; despus se iba a tomar un caf a esperar aque los resultados estuvieran listos.Cuando la computadora terminaba el trabajo que estaba ejecutando en un momento dado, unoperador iba a la impresora y arrancaba las hojas de resultados para llevarlas al cuarto de salida dedatos, para que el programador pudiera recogerlas posteriormente. Entonces, el operador tomabauno 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 34. SECCIN 1.2 HISTORIA DE LOS SISTEMAS OPERATIVOS 9de archivos e introducirlo a la mquina. Se desperdiciaba mucho tiempo de la computadora mien-traslos 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 formasde reducir el tiempo desperdiciado. La solucin que se adopt en forma general fue el sistema de pro-cesamientopor lotes. La idea detrs de este concepto era recolectar una bandeja llena de trabajos enel cuarto de entrada de datos y luego pasarlos a una cinta magntica mediante el uso de una pequeacomputadora 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-vara cabo los clculos numricos se utilizaron otras mquinas mucho ms costosas, como la IBM7094. Este procedimiento se ilustra en la figura 1-3.Unidadde cinta Cinta deentradaSalida decintaCinta delsistema1401 7094 1401Lector detarjetas(a) (b) (c) (d) (e) (f)ImpresoraFigura 1-3. Uno de los primeros sistemas de procesamiento por lotes. a) Los programa-doresllevan 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 yse colocaban en una cinta magntica, la cual se llevaba al cuarto de mquinas, en donde se monta-baen una unidad de cinta. Despus, el operador cargaba un programa especial (el ancestro del sis-temaoperativo de hoy en da), el cual lea el primer trabajo de la cinta y lo ejecutaba. Los resultadosse 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 desalida, reemplazaba la cinta de entrada con el siguiente lote y llevaba la cinta de salida a una 1401para 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 conuna tarjeta $JOB, especificando el tiempo mximo de ejecucin en minutos, el nmero de cuenta alque se va a cargar y el nombre del programador. Despus se utiliza una tarjeta $FORTRAN, indi-candoal sistema operativo que debe cargar el compilador FORTRAN de la cinta del sistema. Des-pusle sigue inmediatamente el programa que se va a compilar y luego una tarjeta $LOAD, queindica 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 35. 10 INTRODUCCIN CAPTULO 1programa con los datos que le suceden. Por ltimo, la tarjeta $END marca el final del trabajo. Es-tastarjetas de control primitivas fueron las precursoras de los shells e intrpretes de lnea de coman-dosmodernos.$FORTRAN$RUN$LOAD$JOB, 10,6610802, MARVIN TANENBAUM$ENDDatos para el programaPrograma en FortranFigura 1-4. Estructura de un trabajo tpico de FMS.Las computadoras grandes de segunda generacin se utilizaron principalmente para clculoscientficos y de ingeniera, tales como resolver ecuaciones diferenciales parciales que surgen a me-nudoen 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 operativode IBM para la 7094.1.2.3 La tercera generacin (1965 a 1980): circuitos integradosy multiprogramacinA principio de la dcada de 1960, la mayora de los fabricantes de computadoras tenan dos lneasde productos distintas e incompatibles. Por una parte estaban las computadoras cientficas a granescala orientadas a palabras, como la 7094, que se utilizaban para clculos numricos en ciencia eingeniera. Por otro lado, estaban las computadoras comerciales orientadas a caracteres, como la1401, que se utilizaban ampliamente para ordenar cintas e imprimir datos en los bancos y las com-paasde seguros.Desarrollar y dar mantenimiento a dos lneas de productos completamente distintos era unapropuesta costosa para los fabricantes. Adems, muchos nuevos clientes de computadoras necesita-banal principio un equipo pequeo, pero ms adelante ya no era suficiente y deseaban una mqui-nams grande que pudiera ejecutar todos sus programas anteriores, pero con mayor rapidez. 36. SECCIN 1.2 HISTORIA DE LOS SISTEMAS OPERATIVOS 11IBM intent resolver ambos problemas de un solo golpe con la introduccin de la lnea de compu-tadorasSystem/360. La 360 era una serie de mquinas compatibles con el software, que variabandesde un tamao similar a la 1401 hasta algunas que eran ms potentes que la 7094. Las mquinasslo diferan en el precio y rendimiento (mxima memoria, velocidad del procesador, nmero dedispositivos de E/S permitidos, etctera). Como todas las mquinas tenan la misma arquitectura yel mismo conjunto de instrucciones, los programas escritos para una mquina podan ejecutarse entodas las dems, por lo menos en teora. Lo que es ms, la 360 se dise para manejar tanto la compu-tacincientfica (es decir, numrica) como comercial. Por ende, una sola familia de mquinas po-dasatisfacer las necesidades de todos los clientes. En los aos siguientes, mediante el uso detecnologa ms moderna, IBM ha desarrollado sucesores compatibles con la lnea 360, a los cualesse les conoce como modelos 370, 4300, 3080 y 3090. La serie zSeries es el descendiente ms re-cientede 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 encomparacin con las mquinas de segunda generacin, las cuales fueron construidas a partir de tran-sistoresindividuales. Su xito fue inmediato y la idea de una familia de computadoras compatiblespronto fue adoptada por todos los dems fabricantes importantes. Los descendientes de estas mqui-nasse siguen utilizando hoy da en centros de cmputo. En la actualidad se utilizan con frecuenciapara 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-doslos modelos. Deba ejecutarse en los sistemas pequeos, que por lo general slo reemplazabana la 1401s, que copiaba tarjetas a cinta, y en los sistemas muy grandes, que a menudo reemplazaban ala 7094s, que realizaba predicciones del clima y otros clculos pesados. Tena que ser bueno en sis-temascon pocos dispositivos perifricos y en sistemas con muchos. Tena que funcionar en ambosentornos comerciales y cientficos. Por encima de todo, tena que ser eficiente para todos estos usosdistintos.No haba forma en que IBM (o cualquier otra) pudiera escribir una pieza de software que cum-plieracon todos estos requerimientos en conflicto. El resultado fue un enorme y extraordinariamen-tecomplejo 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, conmiles 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-teel nmero de errores permaneca constante en el tiempo.Fred Brooks, uno de los diseadores del OS/360, escribi posteriormente un libro ingenioso eincisivo (Brooks, 1996) que describa sus experiencias con el OS/360. Aunque sera imposible re-sumireste libro aqu, basta con decir que la portada muestra una manada de bestias prehistricasatrapadas en un pozo de brea. La portada de Silberschatz y coautores (2005) muestra un punto devista 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 similaresde tercera generacin producidos por otros fabricantes de computadoras en realidad dejaban razo- 37. 12 INTRODUCCIN CAPTULO 1nablemente satisfechos a la mayora de sus clientes. Tambin popularizaron varias tcnicas claveausentes en los sistemas operativos de segunda generacin. Quiz la ms importante de stas fue lamultiprogramacin. En la 7094, cuando el trabajo actual se detena para esperar a que se comple-tarauna operacin con cinta u otro dispositivo de E/S, la CPU simplemente permaneca inactivahasta terminar la operacin de E/S. Con los clculos cientficos que requieren un uso intensivo dela CPU, la E/S no es frecuente, por lo que este tiempo desperdiciado no es considerable. Con el pro-cesamientode datos comerciales, el tiempo de espera de las operaciones de E/S puede ser a menu-dode 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 encada particin, como se muestra en la figura 1-5. Mientras que un trabajo esperaba a que se com-pletarauna operacin de E/S, otro poda estar usando la CPU. Si pudieran contenerse suficientestrabajos en memoria principal al mismo tiempo, la CPU poda estar ocupada casi 100 por ciento deltiempo. Para tener varios trabajos de forma segura en memoria a la vez, se requiere hardware espe-cialpara proteger cada trabajo y evitar que los otros se entrometan y lo malogren; el 360 y los de-mssistemas de tercera generacin estaban equipados con este hardware.Trabajo 3Trabajo 2Trabajo 1SistemaoperativoParticionesde memoriaFigura 1-5. Un sistema de multiprogramacin con tres trabajos en memoria.Otra caracterstica importante de los sistemas operativos de tercera generacin fue la capacidadpara 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-votrabajo del disco en la particin que entonces estaba vaca y lo ejecutaba. Aesta tcnica se le conocecomo spooling (de Simultaneous Peripheral Operation On Line, operacin perifrica simultnea enlnea) y tambin se utiliz para las operaciones de salida. Con el spooling, las mquinas 1401 no eranya 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-ficosextensos y las ejecuciones de procesamiento de datos comerciales masivos, seguan siendo enesencia sistemas de procesamiento por lotes. Muchos programadores aoraban los das de la prime-rageneracin en los que tenan toda la mquina para ellos durante unas cuantas horas, por lo que po-dandepurar sus programas con rapidez. Con los sistemas de tercera generacin, el tiempo quetranscurra entre enviar un trabajo y recibir de vuelta la salida era comnmente de varias horas, porlo que una sola coma mal colocada poda ocasionar que fallara la compilacin, y el programador des-perdiciarala 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 38. SECCIN 1.2 HISTORIA DE LOS SISTEMAS OPERATIVOS 13lnea. En un sistema de tiempo compartido, si 20 usuarios estn conectados y 17 de ellos estn pen-sandoen dar un paseo o tomar caf, la CPU se puede asignar por turno a los tres trabajos que de-seanser atendidos. Como las personas que depuran programas generalmente envan comandoscortos (por ejemplo, compilar un procedimiento de cinco hojas) en vez de largos (por ejemplo, or-denarun archivo con un milln de registros), la computadora puede proporcionar un servicio rpi-doe interactivo a varios usuarios y, tal vez, tambin ocuparse en trabajos grandes por lotes ensegundo plano, cuando la CPU estara inactiva de otra manera. El primer sistema de tiempo com-partidode propsito general, conocido como CTSS (Compatible Time Sharing System, Sistemacompatible de tiempo compartido), se desarroll en el M.I.T. en una 7094 modificada en formaespecial (Corbat y colaboradores, 1962). Sin embargo, en realidad el tiempo compartido no se po-pularizsino hasta que el hardware de proteccin necesario se empez a utilizar ampliamente du-rantela tercera generacin.Despus del xito del sistema CTSS, el M.I.T., Bell Labs y General Electric (que en ese enton-cesera un importante fabricante de computadoras) decidieron emprender el desarrollo de una uti-lerapara computadora, una mquina capaz de servir a varios cientos de usuarios simultneos detiempo compartido. Su modelo fue el sistema de electricidad: cuando se necesita energa, slo hayque conectar un contacto a la pared y, dentro de lo razonable, toda la energa que se requiera esta-rah. Los diseadores del sistema conocido como MULTICS (MULTiplexed Information andComputing Service; Servicio de Informacin y Cmputo MULTiplexado), imaginaron una enor-memquina que proporcionaba poder de cmputo a todos los usuarios en el rea de Boston. La ideade que, slo 40 aos despus, se vendieran por millones mquinas 10,000 veces ms rpidas que sumainframe GE-645 (a un precio muy por debajo de los 1000 dlares) era pura ciencia ficcin. Al-goas 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-naque era slo un poco ms potente que una PC basada en el Intel 386, aunque tena mucho mscapacidad de E/S. Esto no es tan disparatado como parece, ya que las personas saban cmo escri-birprogramas 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 elque estaba escrito en PL/I y el compilador de PL/I se demor por aos, adems de que apenas fun-cionabacuando por fin lleg. Aparte de eso, MULTICS era un sistema demasiado ambicioso parasu 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 delas computadoras, pero convertirlas en un producto serio y con xito comercial importante era algomucho ms difcil de lo que cualquiera hubiera esperado. Bell Labs se retir del proyecto y Gene-ralElectric dej el negocio de las computadoras por completo. Sin embargo, el M.I.T. persisti ylogr hacer en un momento dado que MULTICS funcionara. Al final, la compaa que compr elnegocio de computadoras de GE (Honeywell) lo vendi como un producto comercial y fue instala-dopor 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 Agenciade 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. 39. 14 INTRODUCCIN CAPTULO 1finales de la dcada de 1990, 30 aos despus de su presentacin en el mercado y de tratar duranteaos de hacer que Honeywell actualizara el hardware.Por ahora, el concepto de una utilera para computadora se ha disipado, pero tal vez regreseen forma de servidores masivos de Internet centralizados a los que se conecten mquinas de usua-riorelativamente tontas, donde la mayora del trabajo se realice en los servidores grandes. Es pro-bableque la motivacin en este caso sea que la mayora de las personas no desean administrar unsistema de cmputo cada vez ms complejo y melindroso, y prefieren delegar esa tarea a un equi-pode profesionales que trabajen para la compaa que opera el servidor. El comercio electrnico yaest evolucionando en esta direccin, en donde varias compaas operan centros comerciales elec-trnicosen servidores multiprocesador a los que se conectan las mquinas cliente simples, algo muyparecido al diseo de MULTICS.A pesar de la carencia de xito comercial, MULTICS tuvo una enorme influencia en los siste-masoperativos 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). Tambintuvo (y an tiene) un sitio Web activo, ubicado en www.multicians.org, con mucha informacin acer-cadel 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 de18 bits, pero a $120,000 por mquina (menos de 5 por ciento del precio de una 7094) se vendi co-mopan caliente. Para cierta clase de trabajo no numrico, era casi tan rpida como la 7094 y dioorigen 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 enel proyecto MULTICS, encontr una pequea minicomputadora PDP-7 que nadie estaba usando yse dispuso a escribir una versin simple de MULTICS para un solo usuario. Ms adelante, este tra-bajose convirti en el sistema operativo UNIX, que se hizo popular en el mundo acadmico, lasagencias gubernamentales y muchas compaas.La historia de UNIX ya ha sido contada en muchos otros libros (por ejemplo, Salus, 1994). Enel captulo 10 hablaremos sobre parte de esa historia. Por ahora baste con decir que, debido a que elcdigo fuente estaba disponible ampliamente, varias organizaciones desarrollaron sus propiasversiones (incompatibles entre s), lo cual produjo un caos. Se desarrollaron dos versiones princi-pales:System V de ATT y BSD (Berkeley Software Distribution, Distribucin de Software deBerkeley) de la Universidad de California en Berkeley. Estas versiones tenan tambin variantesmenores. Para que fuera posible escribir programas que pudieran ejecutarse en cualquier sistemaUNIX, el IEEE desarroll un estndar para UNIX conocido como POSIX, con el que la mayorade las versiones de UNIX actuales cumplen. POSIX define una interfaz mnima de llamadas al sis-temaa la que los sistemas UNIX deben conformarse. De hecho, algunos de los otros sistemas ope-rativostambin admiten ahora la interfaz POSIX.Como agregado, vale la pena mencionar que en 1987 el autor liber un pequeo clon de UNIXconocido como MINIX, con fines educativos. En cuanto a su funcionalidad, MINIX es muy simi-lara UNIX, incluyendo el soporte para POSIX. Desde esa poca, la versin original ha evolucio-nadoen 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- 40. SECCIN 1.2 HISTORIA DE LOS SISTEMAS OPERATIVOS 15positivos controladores de dispositivos de E/S) al instante, sin necesidad de reiniciar y sin pertur-bara los programas en ejecucin. Tambin hay disponible un libro que describe su operacin inter-nay contiene un listado del cdigo fuente en un apndice (Tanenbaum y Woodhull, 2006). Elsistema MINIX 3 est disponible en forma gratuita (incluyendo todo el cdigo fuente) a travs deInternet, en www.minix3.org.El deseo de una versin de produccin (en vez de educativa) gratuita de MINIX llev a un es-tudiantefinlands, 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 variascaractersticas de MINIX (por ejemplo, el sistema de archivos de MINIX). Desde entonces se haextendido en muchas formas, pero todava retiene cierta parte de su estructura subyacente comnpara MINIX y UNIX. Los lectores interesados en una historia detallada sobre Linux y el movimien-tode cdigo fuente abierto tal vez deseen leer el libro de Glyn Moody (2001). Lamayor 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 personalesCon el desarrollo de los circuitos LSI (Large Scale Integration, Integracin a gran escala), quecontienen miles de transistores en un centmetro cuadrado de silicio (chip), naci la era de lacomputadora personal. En trminos de arquitectura, las computadoras personales (que al princi-pioeran conocidas como microcomputadoras) no eran del todo distintas de las minicomputado-rasde la clase PDP-11, pero en trminos de precio sin duda eran distintas. Mientras que laminicomputadora hizo posible que un departamento en una compaa o universidad tuviera supropia computadora, el chip microprocesador logr que un individuo tuviera su propia compu-tadorapersonal.Cuando Intel present el microprocesador 8080 en 1974 (la primera CPU de 8 bits de prop-sitogeneral), deseaba un sistema operativo, en parte para poder probarlo. Intel pidi a uno de susconsultores, Gary Kildall, que escribiera uno. Kildall y un amigo construyeron primero un dispo-sitivocontrolador para el disco flexible de 8 pulgadas de Shugart Associates que recin haba si-dosacado al mercado, y conectaron el disco flexible con el 8080, con lo cual produjeron la primeramicrocomputadora con un disco. Despus Kildall escribi un sistema operativo basado en discoconocido como CP/M (Control Program for Microcomputers; Programa de Control paraMicrocomputadoras) para esta CPU. Como Intel no pens que las microcomputadoras basadas endisco tuvieran mucho futuro, cuando Kildall pidi los derechos para CP/M, Intel le concedi supeticin. Despus Kildall form una compaa llamada Digital Research para desarrollar y venderel CP/M.En 1977, Digital Research redise el CP/M para adaptarlo de manera que se pudiera ejecutaren todas las microcomputadoras que utilizaban los chips 8080, Zilog Z80 y otros. Se escribieronmuchos programas de aplicacin para ejecutarse en CP/M, lo cual le permiti dominar por comple-toel mundo de la microcomputacin durante un tiempo aproximado de 5 aos. 41. 16 INTRODUCCIN CAPTULO 1A principios de la dcada de 1980, IBM dise la IBM PC y busc software para ejecutarlo enella. La gente de IBM se puso en contacto con Bill Gates para obtener una licencia de uso de su in-trpretede BASIC. Tambin le preguntaron si saba de un sistema operativo que se ejecutara en laPC. Gates sugiri a IBM que se pusiera en contacto con Digital Research, que en ese entonces erala compaa con dominio mundial en el rea de sistemas operativos. Kildall rehus a reunirse conIBM y envi a uno de sus subordinados, a lo cual se le considera sin duda la peor decisin de ne-gociosde la historia. Para empeorar ms an las cosas, su abogado se rehus a firmar el contratode no divulgacin de IBM sobre la PC, que no se haba anunciado todava. IBM regres con Gatespara 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-ratingSystem; Sistema Operativo en Disco). Se acerc a ellos y les ofreci comprarlo (supues-tamentepor 75,000 dlares), a lo cual ellos accedieron de buena manera. Despus Gates ofrecia IBM un paquete con DOS/BASIC, el cual acept. IBM quera ciertas modificaciones, por loque Gates contrat a la persona que escribi el DOS, Tim Paterson, como empleado de su recincreada empresa de nombre Microsoft, para que las llevara a cabo. El sistema rediseado cambisu 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-sinde Gates (que en retrospectiva, fue en extremo inteligente) de vender MS-DOS a lasempresas de computadoras para que lo incluyeran con su hardware, en comparacin con el inten-tode 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-sasque 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 Intel80286, MS-DOS estaba muy afianzado y CP/M daba sus ltimos suspiros. Ms adelante, MS-DOSse utiliz ampliamente en el 80386 y 80486. Aunque la versin inicial de MS-DOS era bastanteprimitiva, las versiones siguientes tenan caractersticas ms avanzadas, incluyendo muchas quese tomaron de UNIX. (Microsoft estaba muy al tanto de UNIX e inclusive venda una versin deeste 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 basabanen que los usuarios escribieran los comandos mediante el teclado. Con el tiempo esto cambi debi-doa la investigacin realizada por Doug Engelbart en el Stanford Research Institute en la dcadade 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 lasmquinas 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-roxno hizo. Esta equivocacin estratgica de gigantescas proporciones condujo a un libro tituladoFumbling the Future (Smith y Alexander, 1988). Posteriormente, Jobs emprendi el proyecto deconstruir una Apple con una GUI. Este proyecto culmin en Lisa, que era demasiado costosa y fra-cascomercialmente. El segundo intento de Jobs, la Apple Macintosh, fue un enorme xito, no s-lodebido a que era mucho ms econmica que Lisa, sino tambin porque era amigable para el 42. SECCIN 1.2 HISTORIA DE LOS SISTEMAS OPERATIVOS 17usuario (user friendly), lo cual significaba que estaba diseada para los usuarios que no slo no sa-bannada 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 videodigital profesional, las Macintosh son ampliamente utilizadas y sus usuarios son muy entusiastassobre ellas.Cuando Microsoft decidi crear un sucesor para el MS-DOS estaba fuertemente influenciadopor el xito de la Macintosh. Produjo un sistema basado en GUI llamado Windows, el cual en unprincipio se ejecutaba encima del MS-DOS (es decir, era ms como un shell que un verdadero sis-temaoperativo). Durante cerca de 10 aos, de 1985 a 1995, Windows fue slo un entorno grficoencima 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-tivosy utilizaba el sistema MS-DOS subyacente slo para iniciar y ejecutar programas de MS-DOSantiguos. En 1998, se liber una versin ligeramente modificada de este sistema, conocida comoWindows 98. Sin embargo, tanto Windows 95 como Windows 98 an contenan una gran cantidadde 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 suinterior. Es un sistema completo de 32 bits. El diseador en jefe de Windows NT fue David Cutler,quien tambin fue uno de los diseadores del sistema operativo VMS de VAX, por lo que hay al-gunasideas de VMS presentes en NT. De hecho, haba tantas ideas de VMS presentes que el pro-pietariode VMS (DEC) demand a Microsoft. El caso se resolvi en la corte por una cantidad demuchos dgitos. Microsoft esperaba que la primera versin de NT acabara con MS-DOS y todas lasdems versiones de Windows, ya que era un sistema muy superior, pero fracas. No fue sino hastaWindows NT 4.0 que finalmente empez a tener xito, en especial en las redes corporativas. La ver-sin5 de Windows NT cambi su nombre a Windows 2000 a principios de 1999. Estaba destinadaa ser el sucesor de Windows 98 y de Windows NT 4.0.Esto tampoco funcion como se esperaba, por lo que Microsoft prepar otra versin de Win-dows98 conocida como Windows Me (Millennium edition). En el 2001 se liber una versin lige-ramenteactualizada de Windows 2000, conocida como Windows XP. Esa versin dur mucho msen el mercado (6 aos), reemplazando a casi todas las versiones anteriores de Windows. Despus,en enero del 2007 Microsoft liber el sucesor para Windows XP, conocido como Windows Vista.Tena una interfaz grfica nueva, Aero, y muchos programas de usuario nuevos o actualizados. Mi-crosoftespera que sustituya a Windows XP por completo, pero este proceso podra durar casi todauna dcada.El otro competidor importante en el mundo de las computadoras personales es UNIX (y to-dassus variantes). UNIX es ms fuerte en los servidores tanto de redes como empresariales, pe-rotambin est cada vez ms presente en las computadoras de escritorio, en especial en los pasesque se desarrollan con rapidez, como India y China. En las computadoras basadas en Pentium,Linux se est convirtiendo en una alternativa popular para Windows entre los estudiantes y cadavez ms usuarios corporativos. Como agregado, a lo largo de este libro utilizaremos el trminoPentium para denotar al Pentium I, II, III y 4, as como sus sucesores tales como el Core 2 Duo.El trmino x86 tambin se utiliza algunas veces para indicar el rango completo de CPU Intel par-tiendodesde el 8086, mientras que utilizaremos Pentium para indicar todas las CPU desde el 43. 18 INTRODUCCIN CAPTULO 1Pentium I. Admitimos que este trmino no es perfecto, pero no hay disponible uno mejor. Uno sepregunta qu genio de mercadotecnia en Intel desperdici una marca comercial (Pentium) quela mitad del mundo conoca bien y respetaba, sustituyndola con trminos como Core 2 duoque muy pocas personas comprenden; qu significan 2 y duo? Tal vez Pentium 5 (o Pen-tium5 dual core, etc.) eran demasiado difciles de recordar. FreeBSD es tambin un derivadopopular de UNIX, que se origin del proyecto BSD en Berkeley. Todas la computadoras modernasMacintosh utilizan una versin modificada de FreeBSD. UNIX tambin es estndar en las estacio-nesde trabajo operadas por chips RISC de alto rendimiento, como los que venden Hewlett-Packardy Sun Microsystems.Muchos usuarios de UNIX, en especial los programadores experimentados, prefieren una in-terfazde lnea de comandos a una GUI, por lo que casi todos los sistemas UNIX presentan un sis-temade ventanas llamado X Window System (tambin conocido como X11), producido en elM.I.T. Este sistema se encarga de la administracin bsica de las ventanas y permite a los usuarioscrear, eliminar, desplazar y cambiar el tamao de las ventanas mediante el uso de un ratn. Con fre-cuenciahay disponible una GUI completa, como Gnome o KDE, para ejecutarse encima de X11,lo cual proporciona a UNIX una apariencia parecida a la Macintosh o a Microsoft Windows, paraaquellos usuarios de UNIX que desean algo as.Un interesante desarrollo que empez a surgir a mediados de la dcada de 1980 es el crecimien-tode las redes de co