Sei sulla pagina 1di 20

UNIX'

PROGRAMACIN PRCTICA
Gua para la Concurrencia, la Comunicacin y los Multihilos
RPC y el modelo cliente-servidor Seales de tiempo real POSIX Multihilos de control POSIX y sincroniz,

pH

I'KKMIIT. HAI.I.

A Simn & Schuster Company

Kay A. Robbins Steven Robbins

POKTIFIGI* WHVt* MD QAIOURA ttl PM(I

BIBLIOTECA

COMPRA

UNIX PROGRAMACION PRACTICA

UNIX PROGRAMACION PRCTICA


.

. .

PRIMERA EDICION

Kay A. Robbins y Steven Robbins


The Univesity of Texas at San Antonio

TRADUCCIN: Roberto Escalona Garca M. en C , UNAM, Mxico REVISIN TCNICA: Gabriel Guerrero Doctor en Informtica Universidad de Pars V I

P R E N T I C E - H A L L HISPANOAMERICANA, S.A.
MXICO NUEVA Y O R K BOGOT LONDRES S Y D N E Y PARS MUNICH TORONTO NUEVA DELHI TOKIO SINGAPUR RO D E JANEIRO ZURICH

EDICIN E N E S P A O L : DIRECTOR G E N E R A L : G E R E N T E DIVISION C O L L E G E : GERENTE EDITORIAL C O L L E G E : GERENTE DE EDICIONES: G E R E N T E D E PRODUCCIN : G E R E N T E D E TRADUCCIN : DIRECTOR DE EDICIONES: S U P E R V I S O R A D E TRADUCCIN : SUPERVISORA D E PRODUCCIN: EDICIN EN INGLS: Editorial/production supervisin: Jane Bonnell Cover design director: Jerry Votta Cover design: Lundgren Graphics, Ltd. Manufacturing manager: Alexis R. Heydt Acquisitions editor: Gregory G. Doench Editorial assistant: Meg Cowen MOISS PREZ Z A V A L A JOS T O M A S PREZ B O N I L L A LUIS G E R A R D O C E D E O P L A S C E N C I A J U A N A N T O N I O RODRGUEZ M O R E N O JULIN E S C A M I L L A L I Q U I D A N O JORGE B O N I L L A T A L A V E R A ALBERTO SIERRA O C H O A ROCO C A B A N A S CHVEZ O L G A ADRIANA SNCHEZ N A V A R R E T E

ROBBINS: UNIX PROGRAMACIN

PRACTICA, la. ed.

Traducido del ingls de la obra: P R A C T I C A L UNIX P R O G R A M M I N G A Guide to Currency, Communication, and Multithreading All rights reserved. Authorized translation from English language edition published by Prcntice-Hall, Inc. A Simn & Schuster Company. Todos los derechos reservados. Traduccin autorizada de la edicin en ingls publicada por Prentice-Hall, Inc. A Simn & Schuster Company. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage and retrieval system, without permission in writing from the publisher. Prohibida la reproduccin total o parcial de esta obra, por cualquier medio o mtodo sin autorizacin por escrito del editor. Derechos reservados 1997 respecto a la primera edicin en espaol publicada por: P R E N T I C E - H A L L HISPANOAMERICANA, S.A. Enrique Jacob 20, Col. E l Conde 53500 Naucalpan de Jurez, Edo. de Mxico ISBN 968-880-959-4 Miembro de la Cmara Nacional de la Industria Editorial, Reg. Nm. 1524. Original English Language Edition Published by Prentice-Hall, Inc. A Simn & Schuster Company Copyright M C M X C V I All rights reserved ISBN 0-13-443706-3 IMPRESO E N MXICO/ PRINTED IN M E X I C O

!f
UtOGKUlCAINGRMtX. SA I* CU. MXE0.P. CJ-.0M13

ammuo.w

A nuestros estudiantes

Contenido
I Fundamentos 1 Qu es la concurrencia? 1.1 Multiprogramacin y multitarea 1.2 Concurrencia a nivel de aplicaciones 1.3 Estndares UNIX 1.4 Programacin en UNIX 1.5 Cmo hacer que las funciones sean seguras 1.6 Ejercicio: arreglos de argumento 1.7 Lecturas adicionales Programas y procesos 2.1 Estructura de un programa ejecutable 2.2 Objetos estticos 2.3 El proceso ID 2.4 Estado de un proceso 2.5 Creacin de procesos y el f ork de UNIX 2.6 Llamada wait al sistema 2.7 Llamada exec al sistema 2.8 Procesos en plano secundario y demonios 2.9 Ambiente de los procesos 2.10 Terminacin de procesos en UNIX 2.11 Secciones crticas 2.12 Ejercicio: cadenas de procesos 2.13 Ejercicio: abanicos de procesos 2.14 Ejercicio: b i f f sencillo 2.15 Ejercicio: News b i f f 2.16 Lecturas adicionales Archivos 3.1 3.2 3.3 3.4 3.5 3.6 3.7

Directorios y rutas de acceso Representacin de archivos en UNIX Representacin de archivos con identificadores Filtros y redireccionamiento Entubamiento (Pipes) Lectura y escritura de archivos E/S sin bloqueo

vi

Contenido 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 4 La llamada s e l o c t . FIFO Archivos especialesel dispositivo Audio Ejercicio: recorrido de directorios Ejercicio: sistema de archivo proc Ejercicio: Audio Ejercicio: control de la terminal Lecturas adicionales

v i i

117 119 122 128 130 133 136 137 139 140 149 150 152 153 155 157 159 164 165

Proyecto: Anillo de procesos 4.1 Formacin del anillo 4.2 Comunicacin simple 4.3 Exclusin mutua con fichas (tokens) 4.4 Exclusin mutua por votacin 4.5 Eleccin del lder en un anillo annimo 4.6 Anillo de fichas (toke ring) para comunicacin 4.7 Procesador con estructura de entubamiento 4.8 Algoritmos de anillo paralelos 4.9 Anillo flexible 4.10 Lecturas adicionales

II

Eventos asincronos 5 Seales 5.1 Envo de seales 5.2 Mscara de seal y conjunto de seales 5.3 Atrapar e ignorar seales: s i g a c t i o n 5.4 Espera de seales: pause y sigsuspend 5.5 Ejemplo: b i f f 5.6 Llamadas al sistema y seales 5.7 siglongjmp y s i g s e t jmp 5.8 Seales de tiempo real 5.9 E/S asincrona 5.10 Ejercicio: vaciado de estadsticas 5.11 Ejercicio: proc Filesystem I I 5.12 Ejercicio: Operacin en lnea de un dispositivo lento 5.13 Lecturas adicionales Proyecto: Temporizadores 6.1 Tiempo en UNIX 6.2 Temporizadores de intervalo 6.3 Panorama del proyecto 6.4 Temporizadores sencillos

167 169 170 175 150 182 185 188 191 193 197 201 202 202 204 205 206 210 217 219

viii 6.5 6.6 6.7 6.8 6.9 6.10 7 Configuracin de uno de cinco temporizadores Temporizadores mltiples Implantacin robusta de varios temporizadores mycron, pequeo servicio tipo Cron pequeo Implantacin de temporizadores POSIX Lecturas adicionales

Contenido 223 233 240 241 242 250 253 255 259 262 266 270 274 279 281 285

Proyecto: Desarrollo de intrpretes de comando 7.1 Un intrprete de comandos sencillo 7.2 Redireccin 7.3 Entubamientos 7.4 Seales 7.5 Grupos de proceso, sesiones y terminales controladoras 7.6 Control de procesos de fondo en ush 7.7 Control de trabajo 7.8 Control de trabajo para ush 7.9 Lecturas adicionales

III

Concurrencia 8 Secciones crticas y semforos 8.1 Operaciones atmicas 8.2 Semforos 8.3 Semforos en POSIX 8.4 Semforos en System V (Spec 1170) 8.5 Semforos y seales 8.6 Ejercicio: Semforos no nombrados POSIX 8.7 Ejercicio: Semforos nombrados POSIX 8.8 Ejercicio: Manejador de licencias 8.9 Ejercicio: Memoria compartida en System V 8.10 Ejercicio: Colas de mensajes del System V 8.11 Lecturas adicionales Hilos POSIX 9.1 Un problema motivador: Vigilancia de descriptores de archivo 9.2 Hilos POSIX 9.3 Gestin de hilos bsica 9.4 Usuario de hilos versus hilos de ncleos (cernel) 9.5 Atributos de los hilos 9.6 Ejercicio: Copiado de archivos en paralelo 9.7 Lecturas adicionales

287 289 291 296 304 310 323 324 325 326 328 332 332 333 335 347 348 356 359 362 364

Contenido 10 Sincronizacin de hilos 10.1 Mutex 10.2 Semforos 10.3 Variables de condicin 10.4 Manejo de seales e hilos 10.5 Ejercicio: Servidor de impresin con hilos 10.6 Lecturas adicionales Proyecto: La mquina virtual no muy paralela 11.1 La mquina virtual no muy paralela 11.2 Panorama general del proyecto NTPVM 11.3 E/S y prueba del despachador 11.4 Una sola tarea sin entradas 11.5 Tareas secuenciales 11.6 Tareas concurrentes 11.7 Difusin y barreras 11.8 Terminacin y seales 11.9 Lecturas adicionales

I X

365 367 373 378 385 395 400 401 403 405 410 418 420 425 426 427 427 429 431 432 437 445 447 453 460 465 469 473 474 476 477 478 479 481 483 486 487 488 489 489 490

11

IV

Comunicacin 12 Comunicacin cliente-servidor 12.1 Estrategias cliente-servidor 12.2 La interfaz universal de comunicaciones de Internet (UICI) 12.3 Comunicacin en red 12.4 Implementacin de UICI con sockets 12.5 Interfaz de la capa de transporte (TLI) 12.6 STREAMS 12.7 Implementacin de UICI con STREAMS 12.8 UICI segura con respecto de los hilos 12.9 Ejercicio: Transmisin de audio 12.10 Ejercicio: Servidor de ping 12.11 Lecturas adicionales Proyecto: Radio por Internet 13.1 Panorama general del multiplexor 13.2 Comunicacin unidireccional 13.3 Comunicacin bidireccional 13.4 El buffer de transmisin 13.5 Multiplexin del buffer de transmisin 13.6 Receptores de red 13.7 Sintonizacin y desintonizacin 13.8 Difusor de red 13.9 Manejo de seales 13.10 Lecturas adicionales

13

Contenido 14 Llamadas a procedimientos remotos 14.1 Funcionamiento bsico 14.2 Conversin de una llamada local sencilla en una RPC 14.3 Un servicio remoto de nmeros pseudoaleatorios mejorado 14.4 Estado del servidor y solicitudes equipotentes 14.5 Servicio de archivos equipotente remoto 14.6 Vinculacin y asignacin de nombres a servicios 14.7 Fracasos 14.8 NFS Sistema de archivos de red 14.9 Hilos y llamadas a procedimientos remotos 14.10 Ejercicio: Servidor de archivos sin estados 14.11 Lecturas adicionales Proyecto: Espacio de tupias 15.1 Linda 15.2 Richard, un Linda simplificado 15.3 Un espacio de tupias Richard sencillo 15.4 Pizarrones: Una aplicacin de espacio de tupias 15.5 Tupias activas en Richard 15.6 Espacios de tupias como tupias en Richard 15.7 Un servidor multihilo para Richard 15.8 Lecturas adicionales Fundamentos de UNIX A.l Cmo obtener ayuda A.2 Compilacin A.3 Archivos Makefile A.4 Archivos de encabezado A.5 Enlace y bibliotecas A.6 Ayudas para depuracin A.7 Ambiente del usuario A. 8 Lecturas adicionales Implementacin de U I C I B. l Prototipos de UICI B.2 Implementacin con sockets B.3 Implementacin T L I B.4 Implementacin con B.5 Bibliografa ndice 491 492 497 508 515 519 523 525 526 531 536 538 539 541 544 547 555 564 569 573 576 577 577 585 587 590 591 593 596 598 599 599 600 609 614 621 633 641

15

Apndice A

Apndice B

flujos

Implementacin de UICI segura respecto de los hilos

Prefacio
Los sistemas de cmputo estn evolucionando con rapidez de las computadoras grandes, a las que se tiene acceso mediante terminales, hacia redes de estaciones de trabajo con varios procesadores. Ideas tales como la concurrencia, la comunicacin y el uso de multihilos de control (multithreading) han trascendido la comunidad de investigacin y se han extendido hacia el mundo comercial. El programador de aplicaciones debe comprender estos conceptos, y el presente libro est diseado para hacerlos accesibles en todos sus detalles. El libro utiliza un enfoque "manos a la obra" en un sentido no tradicional. En el enfoque tradicional, los programadores implementan o modifican un sistema operativo existente para aadirle funcionalidad. Este enfoque brinda una comprensin profunda del diseo bsico de sistemas operativos, pero es difcil que los programadores profesionales lo sigan de manera independiente. Cuando es utilizado en una universidad promedio, los profesores invierten un tiempo considerable de clase en cubrir detalles de la implantacin, lo que deja poco tiempo para abarcar una gran variedad de temas. Por otra parte, el enfoque tradicional usualmente no proporciona experiencia de programacin prctica con construcciones avanzadas de sincronizacin y comunicacin. Una alternativa es la presentacin terica. Si bien este tipo de cursos abarca mucho ms material, no proporciona al lector una comprensin profunda de los conceptos en la prctica. Programacin prctica en UNIX : Una Gua de la concurrencia, la comunicacin y el uso de multihilos de control llena el hueco entre los enfoques prctico y terico al estudio de sistemas operativos al tratar la programacin bajo UNIX estndar. El programador profesional puede emplear el libro de manera independiente o como complemento de un libro de referencia, tal como el Advanced Programming in the UNIX Environment [86] de Stevens, con lo que obtendr un mejor conocimiento de los sistemas operativos y de la programacin de sistemas. Los estudiantes pueden usar del libro como complemento de un texto tradicional, como el Operating Systems Concepts [80] de Silbershatz y Galvin o el Sistemas Operativos Modernos [92] de Tanenbaum, para aprender sistemas operativos con un enfoque prctico. Los ejercicios y proyectos hacen que este libro sea nico. De hecho, el libro se inici como un proyecto de cuaderno de ejercicios. Despus del desarrollo preliminar, result evidente que el material necesario para realizar los proyectos se encontraba disperso en muchos lugares, a menudo en libros de referencia que proporcionaban muchos detalles pero un panorama conceptual reducido. Desde entonces, el libro ha evolucionado como una referencia autocontenida que descansa sobre los ltimos estndares UNIX. El libro est organizado en cuatro partes, las cuales contienen captulos de tema y captulos de proyecto. Un captulo de tema cubre material especfico y contiene muchos ejemplos y ejercicios breves de la forma "intente esto" o "qu pasa si." Los captulos de tema terminan con una o ms secciones de ejercicios. El libro proporciona ejercicios de programacin para muchos conceptos fundamentales en administracin de procesos, concurrencia y comunicacin. Estos ejercicios satisfacen la misma necesidad que los experimentos de laboratorio en un curso tradicional de ciencias. Para comprender los conceptos es necesario utilizarlos ampliaxi

xii

Prefacio

mente. Los ejercicios estn especificados por un desarrollo por pasos y muchos pueden implantarse en menos de 100 lneas de cdigo. Los captulos de proyecto integran material de varios captulos de tema mediante el desarrollo de una aplicacin extensa. Los proyectos trabajan en dos niveles. Adems de ilustrar las ideas de programacin, los proyectos conducen a la comprensin de un tema avanzado relacionado con una aplicacin. El diseo de stos se hace por etapas, y muchas ejecuciones completas tienen varios cientos de lneas. Dado que no es necesario escribir una cantidad grande de cdigo, el programador puede concentrarse en la comprensin de los conceptos ms que en la depuracin de cdigo. Para simplificar la programacin, los autores tienen bibliotecas disponibles para comunicacin por redes. La siguiente tabla presenta un resumen de la organizacin del libro, 15 captulos agrupados en cuatro partes. Los nueve captulos de tema no dependen de los seis captulos de proyecto, y el lector puede omitir stos al hacer una primera lectura del libro. Parte I Fundamentos Tema del captulo Concurrencia Proceso Archivos # 1 2 3 El anillo de fichas II Eventos asincronos Seales 5 Temporizadores Capas cracking Semforos Hilos POSIX Sincrona de hilos 8 9 10 Mquina virtual Cliente-servidor IV Comunicacin RPC 12 Radio por Internet 14 Espacio de tupias 15 13 11 6 7 4 Proyecto del captulo #

III Concurrencia

Existen muchas formas de leer el libro. Los tres captulos de tema de la parte I son un requisito previo para el resto del libro. Los lectores pueden estudiar las partes I I a la IV en cualquier orden despus de leer los captulos de tema de la parte I . La excepcin es el estudio, al final de los ltimos captulos, sobre las interacciones (esto es, la forma en que los hilos de control interactan con las seales). Los autores suponen que los lectores de este libro son buenos programadores en C, aunque no necesariamente programadores en C de UNIX. El lector debe estar familiarizado con la

Prefacio

xiii

programacin en C y las estructuras de datos bsicas. El apndice A cubre los aspectos esenciales del desarrollo de programas para lectores que no tienen experiencia en UNIX. Es probable que los programadores de UNIX conozcan ya buena parte del material presentado en los captulos 2 y 3, pero la cobertura es bastante detallada y muchos de los proyectos finales dependen en buena medida de este material. El lector no debe dar por sentado que la lectura de un captulo es suficiente para comprender los conceptos, a menos que desarrolle con xito algunos programas que hagan uso de stos. Para un programador profesional, los ejercicios que se encuentran al final de los captulos de tema proporcionan una introduccin prctica mnima al material. En general, el profesor que haga uso de este libro para un curso de sistemas operativos puede seleccionar varios ejercicios ms uno de los proyectos grandes para ejecutarlos durante el semestre. Cada proyecto tiene muchas variaciones, as que puede emplearse en varios semestres. El libro incluye una sinopsis de muchas funciones estndares. Los estndares importantes que especifican la funcin aparecen en la esquina inferior derecha del cuadro de sinopsis. En general, ISO C es un subconjunto de POSIX. 1 y Spec 1170. En algunos casos, la lista de archivos de encabezado requerida difiere entre estndares, donde algunos archivos de encabezado son opcionales para algunos estndares. En estos casos, el cuadro de sinopsis contiene una lista con todos los archivos de encabezado importantes. Un libro como este nunca termina, pero tenamos que detenernos. Agradeceremos los comentarios y sugerencias de los lectores, los cuales pueden enviarlos por (correo electrnico) a pup@vip. es . u t s a . edu. Puede obtenerse informacin sobre el libro en WWW h t t p : / / v i p . es . u t s a . edu/pup. Todo el cdigo incluido en el libro puede obtenerse de WWW o por ftp annimo a v i p . es . u t s a . edu, en el directorio pub/pup.

Agradecimientos Nuestro reconocimiento ms sincero es para Neal Wagner amigo, colega y polica de la voz pasiva. Neal es el responsable, ms que cualquier otro, de la escritura de este libro. Despus de todo, argumentaba, si ya tienen los proyectos, cunto trabajo ms representa escribir un l i bro? Despus de esto, l nos proporcion mucha ayuda lectura y crtica una y otra vez de las versiones previas del material, lo que mejor considerablemente el libro. Nuestro segundo reconocimiento es para la audiencia de los ms de doce cursos sobre sistemas operativos que impartimos entre 1988 y 1995, que es el periodo durante el cual se desarroll este material. Agradecemos a los estudiantes de estos cursos por sufrir las versiones previas del libro durante el desarrollo de ste y por poner a prueba los proyectos a medida que iban surgiendo. Los errores en sus programas, sus comentarios, las quejas y sugerencias mejoraron mucho el libro y nos proporcionaron una idea ms acabada de la forma en que se relacionan los temas. Tambin damos las gracias a muchas otras personas que leyeron el libro e hicieron sugerencias o correcciones para mejorarlo, o que nos ayudaron de otras maneras. Dennis Cadena ley la versin preliminar e hizo muchas sugerencias. Otras personas que nos hicieron comentarios o ayudaron en otras formas son Jeff Adamek, Laura Connor, Sandy Dykes, Richard Hatch, Philip Helsel, Robert Hiromoto, Clint Jeffery, George Leach, C. Ed Nicol, Richard Rybacki, Robert Shenk, Devang Shah, Dennis Wenzel y Andrea Whitlock.

xiv

Prefacio

Tambin damos las gracias a Greg Doench, nuestro editor en Prentice Hall, y a Meg Cowen, su asistente, por orientarnos en todo el proceso. Ellos nos ayudaron a mejorar el libro haciendo sugerencias y brindndonos su amable apoyo sin presionarnos. Tambin queremos dar las gracias a Jane Bonnell, nuestro editor de produccin, por toda la ayuda que nos brind para publicar el libro. Fue un placer trabajar con estos profesionales. Muchos revisores annimos hicieron sugerencias excelentes que nos ayudaron mucho en la revisin final del libro. La formacin del libro se hizo utilizando IATgX2f:, y deseamos expresar nuestro aprecio a sus productores por proporcionar este software sin costo alguno. Gracias especialmente a nuestras esposas e hijos por la paciencia que tuvieron mientras preparbamos este libro. Finalmente, queremos hacer un reconocimiento a la National Science Foundation por proporcionarnos apoyo a travs del financiamiento NSF-ILI USE-0950497 para construir un laboratorio de modo que tuviramos la oportunidad de desarrollar el currculo original en el que se basa este libro.

Parte I

Fundamentos

Captulo 1

Qu es la concurrencia?
La concurrencia se refiere al hecho de compartir recursos en el mismo marco de tiempo. Esto por lo comn significa que varios procesos comparten la misma CPU (esto es, son ejecutados concurrentemente) o la memoria o un dispositivo de E/S. El manejo incorrecto de la concurrencia puede dar como resultado programas que fallan sin razn aparente, incluso con la misma entrada para la que pareca que trabajaban perfectamente. Los sistemas operativos administran los recursos compartidos, y en el pasado los programadores podan permitir que el sistema manejara todos los aspectos de la concurrencia. En el caso de los programas complejos desarrollados en la actualidad, los cuales necesitan ejecutarse con eficiencia en las computadoras modernas, ya no es as. Las mquinas de escritorio con varios procesadores y los sistemas distribuidos son ejemplos de arquitecturas en las que el control de la concurrencia adquiere un significado nuevo e importante para los diseadores de sistemas. Este captulo presenta el tema de la concurrencia y proporciona lineamientos para la programacin en sistemas UNIX en un ambiente concurrente.

La potencia de cmputo ha aumentado de manera geomtrica durante casi 50 aos [60] en muchas reas, incluyendo la velocidad de cmputo, la capacidad de memoria y de almacenamiento masivo, la complejidad de los circuitos, la confiabilidad del hardware y el ancho de banda E/S. Este crecimiento continu en la dcada pasada, junto con entubamientos (pipelines), instrucciones de ejecucin traslapada en una sola CPU, la colocacin de varias CPU en un escritorio, y la explosin en la conectividad de redes. El aumento tan marcado en la comunicacin y la potencia de cmputo ha iniciado cambios fundamentales en el software comercial. Las bases de datos grandes as como otras aplicaciones, que antes se ejecutaban en una mquina central conectada con varias terminales, ahora estn distribuidas sobre mquinas ms pequeas y de menor precio. Las terminales han abierto camino a las estaciones de trabajo de escritorio, con interfaces de usuario de grficas y capaci3

Captulo 1. Qu es la concurrencia?

dades para multimedia. En el otro extremo del espectro, las aplicaciones de cmputo personal han evolucionado hacia el uso de comunicaciones por redes. Una hoja de clculo ya no es un programa aislado que slo apoya a un usuario debido a que una actualizacin de la hoja de clculo puede provocar la actualizacin automtica de otras aplicaciones ligadas con ella, por ejemplo, grficas de datos o la realizacin de las proyecciones de ventas. Aplicaciones tales como la edicin cooperativa, las conferencias, y los pizarrones blancos, facilitan el trabajo y la interaccin entre grupos. Las tendencias de cmputo van hacia la compleja comparticin de datos, la interaccin en tiempo real de las aplicaciones, las interfaces de usuario inteligentes, y los flujos de datos complejos que incluyen audio y video, adems de texto. Todos estos desarrollos dependen de la comunicacin y la concurrencia. La comunicacin es el transporte de informacin de una entidad a otra. La concurrencia es la comparticin de recursos en el mismo marco de tiempo. Cuando dos programas se ejecutan en el mismo sistema de modo que la ejecucin de stos est entrelazada en el tiempo, entonces ellos comparten un recurso del procesador. Los programas tambin pueden compartir datos, cdigo y dispositivos. Las entidades concurrentes pueden ser hilos de control (threads) de ejecucin dentro de programas o dentro de otros objetos abstractos. La concurrencia tambin puede presentarse en un sistema con una sola CPU. De hecho, uno de los trabajos ms importantes de un sistema operativo moderno es administrar las operaciones concurrentes de un sistema de cmputo. Tratar con la concurrencia no es fcil: los programas concurrentes no siempre se comportan como se espera, y los errores comunes en estos programas no siempre aparecen de manera regular. (El problema puede aparecer slo una vez en un conjunto de un milln de ejecuciones.) No hay ningn sustituto a la experiencia prctica con estos conceptos. Este captulo describe ejemplos de concurrencia, comenzando con la ms simple de las situaciones en las que puede ocurrir. El resto del libro ampla estas ideas y proporciona ejemplos especficos.

1.1 Mu ti programacin y multi tarea


Los sistemas operativos administran los recursos del sistema procesadores, memoria y dispositivos de E/S, incluyendo teclados, monitores, impresoras, ratones, disquetes, cintas, unidades de CD-ROM, e interfaces de red. La manera tan complicada en la que al parecer trabajan los sistemas operativos es una consecuencia de las caractersticas de los dispositivos perifricos, en particular de la velocidad relativa de stos con respecto de la CPU o el procesador. La tabla 1.1 proporciona velocidades tpicas, en nanosegundos, para el procesador, la memoria y los dispositivos perifricos. La tercera columna indica las mismas velocidades pero escaladas por un factor de 100 millones, lo que brinda tiempos en trminos de los seres humanos. El tiempo escalado de una operacin por segundo es, a grandes rasgos, la rapidez de las viejas calculadoras mecnicas de hace cincuenta aos. Las velocidades citadas se encuentran en constante cambio, pero la tendencia es que las que corresponden al procesador aumenten de manera exponencial, provocando con ello un hueco cada vez mayor en el desempeo entre los procesadores y los perifricos. Las unidades de disco han mejorado en lo que respecta a la velocidad de acceso, pero la naturaleza mecnica de stas limita su desempeo y los tiempos de acceso no mejoran exponencial mente.

Potrebbero piacerti anche