90% encontró este documento útil (10 votos)
4K vistas812 páginas

Sistemas Operativos. Un Enfoque Basado en Conceptos PDF

Cargado por

Carlos Zúñiga
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
90% encontró este documento útil (10 votos)
4K vistas812 páginas

Sistemas Operativos. Un Enfoque Basado en Conceptos PDF

Cargado por

Carlos Zúñiga
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

00 MAQ. PRELIMI(F0694).

indd ii 8/10/07 12:35:38 AM


SISTEMAS
OPERATIVOS

00 MAQ. PRELIMI(F0694).indd i 8/10/07 12:35:37 AM


00 MAQ. PRELIMI(F0694).indd ii 8/10/07 12:35:38 AM
2
Segunda edición

SISTEMAS
OPERATIVOS

Dhananjay M. Dhamdhere
Indian Institute of Technology, Mumbai

Revisor técnico
Jorge Valeriano Assem
Universidad Nacional Autónoma de México

MÉXICO • BOGOTÁ • BUENOS AIRES • CARACAS • GUATEMALA • LISBOA


MADRID • NUEVA YORK • SAN JUAN • SANTIAGO
AUCKLAND • LONDRES • MILÁN • MONTREAL • NUEVA DELHI
SAN FRANCISCO • SINGAPUR • SAN LUIS • SIDNEY • TORONTO

00 MAQ. PRELIMI(F0694).indd iii 8/10/07 12:35:38 AM


Director Higher Education: Miguel Ángel Toledo C.
Director editorial: Ricardo del Bosque A.
Editor sponsor: Pablo Eduardo Roig V.
Editora de desarrollo: Ana Laura Delgado R.
Supervisor de producción: Zeferino García G.

Traducción: Thomas W. Bartenbach


Hugo Villagómez Velázquez
Raúl Arrioja Juárez

SISTEMAS OPERATIVOS
Segunda edición

Prohibida la reproducción total o parcial de esta obra,


por cualquier medio, sin la autorización escrita del editor.

DERECHOS RESERVADOS © 2008, respecto a la segunda edición en español por


McGRAW-HILL/INTERAMERICANA EDITORES, S.A. de C.V.
A Subsidiary of The McGraw-Hill Companies, Inc.
Edificio Punta Santa Fe
Prolongación Paseo de la Reforma 1015, Torre A
Piso 17, Colonia Desarrollo Santa Fe,
Delegación Álvaro Obregón
C.P. 01376, México, D. F.
Miembro de la Cámara Nacional de la Industria Editorial Mexicana, Reg. Núm. 736

ISBN-13: 978-970-10-6405-4
ISBN-10: 970-10-6405-4

Traducido de la segunda edición de: Operating Systems. A Concept-based Approach.


Copyright © MMVI by Tata McGraw-Hill Publishing Company Limited.
All rights reserved

ISBN: 0-07-061194-7

1234567890 09765432108

Impreso en México Printed in Mexico

00 MAQ. PRELIMI(F0694).indd iv 8/10/07 12:35:38 AM


A
mi esposa Snehalata

00 MAQ. PRELIMI(F0694).indd v 8/10/07 12:35:38 AM


00 MAQ. PRELIMI(F0694).indd vi 8/10/07 12:35:38 AM
Contenido
Acerca del autor xiii
Prefacio xv
1 Introducción 1
1.1 Visión abstracta del sistema operativo 1
1.2 Metas de un sistema operativo 5
1.3 La operación de un sistema operativo 7
1.4 Panorama preliminar del libro 16
Ejercicio 1 23
Bibliografía 25

Parte I
Conceptos fundamentales
2 Visión general de los sistemas operativos 31
2.1 El sistema operativo y el sistema de cómputo 31
2.2 La eficiencia, el desempeño de sistema y la conveniencia del usuario 46
2.3 Las clases de sistemas operativos 49
2.4 Los sistemas de proceso por lotes 52
2.5 Sistemas de multiprogramación 56
2.6 Los sistemas de tiempo compartido 65
2.7 Sistemas operativos de tiempo real 71
2.8 Los sistemas operativos distribuidos 73
2.9 Los sistemas operativos modernos 75
Ejercicio 2 77
Bibliografía 80
3 Los procesos y los hilos 84
3.1 Los procesos y los programas 84
3.2 El punto de vista del programador sobre los procesos 87
3.3 La visión del sistema operativo de los procesos 92
3.4 Los hilos 106
3.5 Estudios de casos de procesos y de hilos 115
3.6 Procesos interactuantes: una vista avanzada del programador de los procesos 130
Ejercicio 3 139
Bibliografía 141
4 Planificación 143
4.1 Preliminares 143
4.2 Políticas de planificación no priorizante 148
4.3 Políticas de planificación priorizante 151
4.4 La planificación en la práctica 156
4.5 Planificación en tiempo real 168
4.6 Planificación en Unix 175

00 MAQ. PRELIMI(F0694).indd vii 8/10/07 12:35:38 AM


viii Contenido

4.7 Planificación en Linux 178


4.8 Planificación en Windows 181
4.9 Análisis de desempeño de las políticas de planificación 181
Ejercicio 4 186
Bibliografía 188
5 Administración de la memoria 191
5.1 Administración de la jerarquía de la memoria 191
5.2 Asignaciones estática y dinámica de la memoria 193
5.3 Asignación de memoria a un proceso 196
5.4 Reúso de la memoria 202
5.5 Asignación de memoria contigua 211
5.6 Asignación de memoria no contigua 213
5.7 Paginamiento 217
5.8 Segmentación 219
5.9 Segmentación con paginamiento 220
5.10 Asignación de memoria por el kernel 221
5.11 Repaso de relocalización, ligamiento y formas del programa 226
Ejercicio 5 233
Bibliografía 235
6 Memoria virtual 237
6.1 Fundamentos de la memoria virtual 237
6.2 Paginamiento por demanda 240
6.3 Políticas de reemplazo de página 266
6.4 Asignación de memoria a un proceso 275
6.5 Páginas compartidas 279
6.6 Archivos mapeados en la memoria 282
6.7 Memoria virtual Unix 284
6.8 Memoria virtual Linux 288
6.9 Memoria virtual en Windows 290
6.10 Memoria virtual usando segmentación 291
Ejercicio 6 295
Bibliografía 299
7 Sistema de archivos 302
7.1 Sistema de archivos e IOCS 302
7.2 Archivos y operación de archivos 305
7.3 Organizaciones fundamentales de archivos 307
7.4 Estructuras de directorio 311
7.5 Protección de archivos 318
7.6 Interfaz entre el sistema de archivos y el IOCS 319
7.7 Asignación de espacio de disco 322
7.8 Implementación del acceso a archivos 326
7.9 Semántica para compartir archivos 331
7.10 Confiabilidad del sistema de archivos 333
7.11 Sistema de archivos virtuales 341

00 MAQ. PRELIMI(F0694).indd viii 8/10/07 12:35:39 AM


Contenido ix

7.12 Sistema de archivos de Unix 343


7.13 Sistema de archivos Linux 348
7.14 Sistema de archivos Windows 348
7.15 Desempeño de los sistemas de archivos 350
Ejercicio 7 352
Bibliografía 355
8 Seguridad y protección 357
8.1 Visión general de seguridad y protección 357
8.2 Objetivos de la seguridad y de la protección 360
8.3 Ataques a la seguridad 362
8.4 Aspectos formales y prácticos de la seguridad 364
8.5 Cifrado 366
8.6 Autentificación y seguridad de la contraseña 373
8.7 Descriptores de acceso y matriz de control de acceso 375
8.8 Estructuras de protección 377
8.9 Capacidades 382
8.10 Seguridad Unix 390
8.11 Seguridad Linux 391
8.12 Seguridad Windows 392
Ejercicio 8 394
Bibliografía 395

Parte II
Tópicos avanzados
9 Sincronización de procesos 403
9.1 La sincronización de acceso a datos y la sincronización de controles 403
9.2 Secciones críticas 404
9.3 Condiciones de ejecución en la sincronización de controles 409
9.4 La implementacion de secciones críticas y operaciones indivisibles 411
9.5 Problemas clásicos de la sincronización de procesos 414
9.6 Estructura de sistemas concurrentes 421
9.7 El planteamiento algorítmico para la implementación de secciones críticas 423
9.8 Semáforos 431
9.9 Regiones críticas condicionadas 443
9.10 Monitores 447
9.11 La sincronización de procesos en Unix 456
9.12 La sincronización de procesos en Linux 457
9.13 La sincronización de procesos en Windows 458
Ejercicio 9 459
Bibliografía 463
10 Paso de mensajes 466
10.1 Vista de conjunto del paso de mensajes 466
10.2 Implementar el paso de mensajes 470

00 MAQ. PRELIMI(F0694).indd ix 8/10/07 12:35:39 AM


x Contenido

10.3 Buzones 474


10.4 Paso de mensajes en Unix 476
10.5 El paso de mensajes en Windows 480
Ejercicio 10 481
Bibliografía 482
11 Bloqueos mutuos 483
11.1 Definición del bloqueo mutuo 483
11.2 Bloqueos mutuos en la asignación de recursos 484
11.3 El manejo de bloqueos mutuos 490
11.4 Detección y resolución de bloqueos mutuos 491
11.5 Prevención de bloqueos mutuos 496
11.6 Cómo evitar los bloqueos mutuos 500
11.7 Caracterización formal de bloqueos mutuos de recursos 506
11.8 Manejo del bloqueo mutuo en la práctica 513
Ejercicio 11 515
Bibliografía 518
12 Implementación de operaciones de archivos 520
12.1 Capas del sistema de control entrada salida 520
12.2 Visión general de la organización de E/S 523
12.3 Dispositivos de E/S 525
12.4 E/S de nivel de dispositivo 537
12.5 Planificación del disco 551
12.6 Almacenamiento temporal de registros 554
12.7 Bloqueo de registros 559
12.8 Métodos de acceso 562
12.9 Caché de disco unificada 564
12.10 Procesamiento de archivos en Unix 565
12.11 Procesamiento de archivos en Linux 568
12.12 Procesamiento de archivos en Windows 569
Ejercicio 12 571
Bibliografía 573
13 Sincronización y planificación en sistemas operativos multiprocesador 576
13.1 La arquitectura de sistemas multiprocesadores 576
13.2 Sistemas operativos multiprocesadores 583
13.3 Estructura del kernel 584
13.4 Sincronización de procesos 587
13.5 Planificación de procesos 591
13.6 Estudio de caso real 593
Ejercicio 13 596
Bibliografía 597
14 La estructura de los sistemas operativos 599
14.1 Operación de un SO 600
14.2 Estructura de un sistema operativo 601
14.3 Sistemas operativos con estructura monolítica 603

00 MAQ. PRELIMI(F0694).indd x 8/10/07 12:35:39 AM


Contenido xi

14.4 El diseño por capas de sistemas operativos 604


14.5 Sistemas operativos de máquina virtual 607
14.6 Sistemas operativos basados en el kernel 610
14.7 Sistemas operativos basados en microkernel 612
14.8 Configuración e instalación del kernel 614
14.9 Arquitectura de Unix 615
14.10 El kernel de Linux 617
14.11 Arquitectura de Windows 618
Ejercicio 14 619
Bibliografía 619

Parte III
Sistemas operativos distribuidos
15 Sistemas operativos distribuidos 625
15.1 Características de sistemas distribuidos 625
15.2 Nodos de sistemas distribuidos 627
15.3 Sistemas operativos de red 627
15.4 Sistemas operativos distribuidos 628
15.5 Comunicación interproceso confiable 631
15.6 Paradigmas de computación distribuidos 637
15.7 Realización de redes (Networking) 644
15.8 Modelo de un sistema distribuido 657
15.9 Cuestiones de diseño en sistemas operativos distribuidos 659
Ejercicio 15 661
Bibliografía 662
16 Problemas teóricos en sistemas distribuidos 664
16.1 Nociones de tiempo y estado 665
16.2 Estados y eventos en un sistema distribuido 665
16.3 Precedencias de tiempo, relojes y eventos 666
16.4 Registrar el estado de un sistema distribuido 672
Ejercicio 16 680
Bibliografía 682
17 Algoritmos de control distribuido 684
17.1 Operación de algoritmos de control distribuido 684
17.2 Corrección de algoritmos de control distribuido 686
17.3 Exclusión mutua distribuida 688
17.4 Manejo del bloqueo mutuo distribuido 693
17.5 Algoritmos de planificación distribuida 698
17.6 Detección de terminación distribuida 701
17.7 Algoritmos de elección 703
17.8 Asuntos prácticos en el uso de algoritmos de control distribuido 705
Ejercicio 17 707
Bibliografía 708

00 MAQ. PRELIMI(F0694).indd xi 8/10/07 12:35:39 AM


xii Contenido

18 Recuperación y tolerancia de fallas 710


18.1 Fallas, averías y recuperación 711
18.2 Fallas bizantinas y protocolos de acuerdo 714
18.3 Recuperación 715
18.4 Técnicas de tolerancia de fallas 717
18.5 Resiliencia 721
Ejercicio 18 722
Bibliografía 723
19 Sistemas de archivos distribuidos 725
19.1 Asuntos de diseño en sistemas de archivos distribuidos 725
19.2 Transparencia 728
19.3 Semántica de compartición de archivos 729
19.4 Tolerancia de fallas 730
19.5 Desempeño de DFS 735
19.6 Estudios de casos reales 740
Ejercicio 19 747
Bibliografía 748
20 Seguridad de archivos distribuidos 750
20.1 Problemas de seguridad en sistemas distribuidos 750
20.2 Seguridad de mensajes 753
20.3 Autentificación de datos y mensajes 760
20.4 Autentificación por terceros 762
Ejercicio 20 768
Bibliografía 769
Índice analítico 770

00 MAQ. PRELIMI(F0694).indd xii 8/10/07 12:35:40 AM


Acerca del autor
Dhananjay Dhamdhere es profesor y ex director del Departamento de Ciencias de la Computación e Ingeniería
del Indian Institute of Technology (IIT) de Bombay. Durante más de treinta años ha impartido cursos de siste-
mas operativos, lenguajes de programación y compiladores, a nivel de licenciatura y de posgrado, en universi-
dades de India y Estados Unidos.
El autor ha publicado libros y artículos especializados sobre algoritmos distribuidos para los sistemas
operativos y optimización de compiladores, y ha recibido apoyo para investigación de Sun Microsystems,
Microsoft e Intel. Además, es consultor con diversas compañías de tecnologías de la información, como Tata
Consultancy Services y Wipro.

00 MAQ. PRELIMI(F0694).indd xiii 8/10/07 12:35:40 AM


00 MAQ. PRELIMI(F0694).indd xiv 8/10/07 12:35:40 AM
Prefacio
El objetivo principal de un primer curso sobre este tema es desarrollar una comprensión de los conceptos
y las técnicas fundamentales de los sistemas operativos. Actualmente, una gran porción de estudiantes ya está
expuesta a información diversa sobre los sistemas operativos debido al acceso práctico a los mismos y a la
literatura existente en el Internet; estos estudiantes tienen mucha información pero pocos conceptos acerca de
los sistemas operativos. Tal situación hace que la enseñanza de estos conceptos sea un reto; por un lado, es ne-
cesario remodelar los conceptos en la información presentada a estos estudiantes a fin de no aburrirlos; y, por el
otro, hacerlo de manera que se introduzcan los conceptos a los alumnos aprendices de los sistemas operativos,
sin espantarlos. Este libro presenta los conceptos y las técnicas de los sistemas operativos de modo que se in-
corporan los requerimientos citados.

Enfoque general

El libro comienza con la formación de un núcleo de conocimientos sobre lo que hace funcionar a un sistema
operativo, expuestos en el capítulo 2. Se presenta a un sistema operativo como un intermediario entre un sis-
tema de cómputo y los cálculos de los usuarios, cuya tarea es suministrar un buen servicio a éstos y alcanzar
un uso eficiente del sistema de cómputo. Un estudio de la interacción de un sistema operativo con el sistema
de cómputo, por un lado, y con los cálculos del usuario, por el otro, consolida esta visión y le añade detalles
prácticos. Este enfoque tiene el efecto de desmitificar al sistema operativo para el lector nuevo, y adaptarlo a la
formación de un lector experimentado. También enfatiza los aspectos clave de la arquitectura de computadoras,
esenciales para el estudio de los sistemas operativos. Esta parte del libro suministra una base para el estudio de
los detalles de las funciones que realiza un sistema operativo más a fondo.
El resto del libro sigue un enfoque análogo. Cada capítulo identifica conceptos fundamentales incluidos en
alguna funcionalidad de un sistema operativo, describe aspectos relevantes de la arquitectura de computadoras,
estudia técnicas relevantes de los sistemas operativos e ilustra su operación a través de ejemplos. Los aspectos
más importantes de este enfoque son:

• Los conceptos fundamentales se introducen mediante términos sencillos.


• Se incluyen numerosos ejemplos con el fin de ilustrar los conceptos y las técnicas.
• Se organizan detalles de implementación y de casos de estudio como cápsulas pequeñas diseminadas a
lo largo del texto.
• Secciones optativas son dedicadas a temas avanzados; por ejemplo, la caracterización del bloqueo mu-
tuo, la asignación de la memoria de núcleo, la sincronización y la programación en los sistemas de
multiprocesos, la semántica para compartir archivos, la confiabilidad y las capacidades de un sistema
de archivos.

La principal ventaja de este enfoque es que los conceptos, las técnicas y los casos de estudio se integran en
capítulos coherentes. Así, muchos detalles de diseño y de implementación parecen “obvios” cuando el lector
los encuentra. Este hecho ayuda a enfatizar la idea de que el estudio de los sistemas operativos debe basarse en
una comprensión sólida de los conceptos. Éste es el mensaje más importante que un texto puede dar a un estu-
diante de sistemas operativos, quien enfrentará tanto una rica diversidad como rápidos cambios en los sistemas
operativos durante su carrera.

00 MAQ. PRELIMI(F0694).indd xv 8/10/07 12:35:40 AM


xvi Prefacio

Aspectos pedagógicos

Parte I Parte Introducción


Cada parte del libro comienza con una
descripción de su contenido y con un
Conceptos fundamentales mapa de caminos de los capítulos que
incluye.

Un sistema operativo controla el uso de los recursos de un sistema de cómputo, tales como los
CPU, la memoria y los dispositivos de E/S a fin de satisfacer los requerimientos computacionales
de los usuarios. Éstos esperan conveniencia, calidad de servicio y seguridad al ejecutar sus pro-
gramas, mientras que los administradores del sistema esperan un uso eficiente de los recursos de
la computadora y un buen desempeño al ejecutar los programas de los usuarios. Estas diversas
expectativas se conocen como la conveniencia del usuario, la seguridad y el uso eficiente de
los recursos, y forman las metas principales de un sistema operativo. El grado hasta el cual el
sistema operativo satisface estas metas depende del ambiente de cómputo, es decir, del hardware
del sistema de cómputo, sus interfaces con otras computadoras y la naturaleza de los cómputos
realizados por los usuarios.

Figuras y cuadros
Las figuras ilustran disposiciones prácti-
cas empleadas para manejar los cálculos
Evento
del usuario y el uso de los recursos, la
Contexto de salvar
operación paso a paso de técnicas es-
Manipulación de eventos pecíficas, o la comparación de técnicas
Planificación
alternas para proyectar sus fortalezas y
debilidades. Los cuadros se usan para
Despacho
encerrar aspectos clave de las funcio-
Figura 3.5 Funciones fundamentales para los procesos de control. nalidades del sistema operativo que se
esté estudiando. También sirven como
panorama general o como resúmenes de
temas específicos

Secuencia de programas individuales Cada programa individual en la secuencia es ini- Ejemplos


ciado por el usuario a través de un comando separado. Sin embargo, una secuencia de programas
individuales tiene su propia semántica: un programa deberá ejecutarse sólo si los progra-
mas previos en la secuencia se ejecutaron con éxito. Para lograr una meta común, los programas Los ejemplos muestran los aspectos cla-
explícitamente deben hacer interfaz de las entradas y las salidas con otros programas de la se-
cuencia. El ejemplo 1.1 analiza la noción de secuencia de programas individuales en el sistema
ve relativos a los conceptos y las técni-
operativo de disco de Microsoft Corp (MS DOS). cas que se estudian. Están impresos en
Ejemplo 1.1 El archivo .bat del MS DOS, puede usarse para formar una secuencia de programas
individuales. Contiene una secuencia de comandos y cada comando indica la ejecución de un pro-
un estilo diferente para distinguirlos del
grama. En el caso de un archivo .bat que contiene comandos para iniciar una secuencia de
programas para compilar, ligar y ejecutar un programa en C: el compilador de C compila un pro-
cuerpo principal del texto. Esta opción
grama en C existente en el archivo alfa.c, el ligador liga la salida del compilador para generar
un programa ejecutable nombrado demo y el programa demo se ejecuta con los datos contenidos en ayuda al lector a no detenerse en un
el archivo muestra. El intérprete de comandos carga el compilador C en la memoria para la ejecu-
ción. Cuando el compilador termina su operación, el intérprete de comandos inicia la ejecución del ejemplo si no quiere interrumpir el flujo
ligador. Finalmente, inicia la ejecución de demo.
de ideas, especialmente cuando lee un
capítulo por primera vez.

00 MAQ. PRELIMI(F0694).indd xvi 8/10/07 12:35:40 AM


Prefacio xvii

begin
size : integer value (..);
buffer: array[1..size] of ...;
copy sample, disk write, housekeeping : string;
Código de programa no of samples : integer;
/* Crear los procesos */
copy sample := create process(move to buffer(), 3);
El código de programa se presenta en for- disk write := create process(write to disk(), 2);
housekeeping := create process(analysis(), 1);
ma de pseudocódigo fácil de entender. /* Mandar información del tamaño a copy sample y disk write */
send (copy sample, size);
send (disk write, size);
/* Verificar el estatus de todos los procesos */
over := false;
while (over = false)
if status(copy sample) = terminated and status(disk write) =
terminated and status(housekeeping) = terminated then
over := true;
terminate();
end;

procedure move to buffer();


buf size : integer;

Ejercicios EJERCICIO 2

Se incluyen ejercicios al final de cada ca- 1. ¿Cuáles de las siguientes deberían ser instrucciones privilegiadas? Explique por qué.
a) Ponga al CPU en modo privilegiado
pítulo. Éstos contienen problemas numé- b) Cargue los registros acotados
c) Cargue un valor en un registro del CPU
ricos basados en el material estudiado en d) Desenmascare algunas interrupciones
e) Termine a la fuerza la operación de E/S.
el texto, así como preguntas conceptuales 2. El CPU deberá estar en el modo privilegiado al ejecutar el código del kernel y en el modo de usuario
(es decir, el modo no privilegiado) al ejecutar un programa del usuario. Explique cómo se logra esto
desafiantes que miden la comprensión de durante la operación de un sistema operativo.
3. Justifique la siguiente declaración: “Debido a la presencia de la memoria cache, un programa requiere
los conceptos y de las técnicas compren- más tiempo del CPU para ejecutarse en un sistema de multiprogramación o de tiempo compartido que
lo que requeriría si fuera a ejecutarse completamente solo, es decir, sin tener a ningún otro programa en
didas en cada capítulo y que también su- el sistema”.

ministran una visión más profunda. 4. Escriba una nota sobre el contenido de los diversos campos de un vector de interrupción.
5. ¿Qué es un estado del CPU? Explique cómo es útil la noción de estado del CPU para implementar la
multiprogramación.

Introducción del capítulo La introducción precede a la primera sección de cada capítulo. Describe su
objetivo, la importancia del capítulo y los temas cubiertos en el mismo.
Instantáneas de los sistemas concurrentes Los estudiantes tienen dificultad para visualizar la operación
concurrente de los procesos en un sistema de software. Esta dificultad conduce a una comprensión inadecuada
de la sincronización de los procesos. Una instantánea ilustra el estado de los diferentes procesos y de los datos de
sincronización a fin de suministrar una visión holística de las actividades en un sistema concurrente.
Secciones optativas Las secciones optativas están dedicadas a temas avanzados. Estas secciones estudian
las bases teóricas de ciertos temas o de aspectos avanzados de su implementación. El instructor las puede incluir
como oferta para un curso de sistemas operativos, dependiendo de la disponibilidad de tiempo, o asignarlas en
forma selectiva para su estudio en casa.
Casos de estudio Los casos de estudio se organizan como secciones independientes. Ilustran aspectos
prácticos, disposiciones e intercambios en el diseño y la implementación de un sistema operativo. Los principa-
les sistemas operativos cubiertos por los casos de estudio son las diferentes versiones de los sistemas operativos
de Unix y Windows, así como el Linux.

00 MAQ. PRELIMI(F0694).indd xvii 8/10/07 12:35:45 AM


xviii Prefacio

Organización del libro


El libro trata tanto los sistemas operativos convencionales para usarse en los sistemas de cómputo independien-
tes, como los sistemas operativos distribuidos, que se usan en sistemas de cómputo formados por computadoras
independientes organizadas en red. La introducción estudia los aspectos fundamentales de un sistema operativo
y describe los diferentes tipos de cálculos y métodos empleados para asegurar el uso eficiente de los recursos. El
estudio de los sistemas operativos convencionales está organizado en dos partes, dedicadas a los conceptos fun-
damentales y a los temas avanzados, respectivamente. El estudio de los sistemas operativos distribuidos forma
por sí mismo la tercera parte. La estructura de las partes y la interdependencia entre capítulos es la siguiente:

Parte I: Conceptos fundamentales


Panorama general
de los sistemas
operativos

Estructuras Procesos Administración Sistemas


de los sistemas y hebras de de la memoria de archivos
operativos control

Protección
Sincronización Memoria
Programación y
de procesos virtual
seguridad

Implementación
Pase de Bloqueos Sincronización y programación de las operaciones
mensajes mutuos en los SO de multiproceso con archivos

Parte II: Conceptos avanzados

Parte I: Conceptos fundamentales La primera parte consta de siete capítulos. El capítulo 2 se centra en la
interacción de un sistema operativo con un sistema de cómputo y con los cálculos del usuario. También describe
diferentes clases de sistemas operativos, así como los conceptos y las técnicas fundamentales que emplean.
Un sistema operativo usa los conceptos de proceso y hebra de control para administrar la ejecución de los pro-
gramas: de manera informal, tanto un proceso como una hebra de control representan la ejecución de un progra-
ma; usamos proceso como un término genérico. El capítulo 3 describe la visión de los procesos del usuario y del
sistema operativo, es decir, cómo se crean los procesos, cómo interactúan entre sí y cómo los controla el sistema
operativo. Éste traslapa la ejecución de los procesos para suministrar un buen servicio al usuario y asegurar el uso
eficiente de los recursos. El capítulo 4 describe las técnicas de programación que se usan con este propósito.
El sistema operativo comparte la memoria de la computadora entre los procesos. El capítulo 5 trata del
aspecto clave de la fragmentación de la memoria, que es una situación en la cual un área de ésta no puede ser
usada porque es demasiado pequeña; igualmente, este capítulo se refiere a técnicas que abordan la fragmenta-
ción de la memoria. También se estudian las técnicas usadas por el núcleo para administrar sus propias estruc-
turas de datos. El capítulo 6 estudia la implementación de la memoria virtual, que permite la ejecución de un
programa cuyo tamaño excede al de la memoria.
Los dos siguientes capítulos tratan del sistema File, así como la seguridad y la protección de los datos y
los programas almacenados en los archivos. El capítulo 7 describe las instalaciones para la creación, el acceso,

00 MAQ. PRELIMI(F0694).indd xviii 8/10/07 12:35:46 AM


Prefacio xix

la forma de compartir y el almacenaje confiable de los archivos. El capítulo 8 estudia la manera como se prote-
gen los archivos contra formas ilegales de acceso cometidas por los usuarios.

Parte II: Conceptos avanzados Esta parte consta de seis capítulos dedicados a temas avanzados que tie-
nen que ver con los procesos y su operación, con la implementación de los sistemas de archivos y con la estruc-
tura de los sistemas operativos. El capítulo 9 trata de las técnicas de sincronización que permiten a los procesos
de una aplicación compartir los datos comunes o coordinar sus actividades para alcanzar un objetivo común,
mientras que el capítulo 10 estudia cómo los procesos intercambian mensajes a fin de pasarse información. El
capítulo 11 estudia el bloqueo mutuo, una situación en la cual los procesos se esperan mutuamente por tiempo
indefinido, paralizando con ello una aplicación. El capítulo 12 describe cómo un SO administra los dispositivos
de E/S y describe las técnicas que usa para alcanzar una implementación eficiente de las operaciones con archi-
vos. El capítulo 13 trata acerca de la sincronización y la programación en un sistema operativo de multiproceso.
El capítulo 14 estudia las técnicas de diseño de los sistemas operativos que facilitan la modificación sencilla de
un sistema operativo: 1) para usarse en un sistema de cómputo con una arquitectura diferente, o 2) para satisfa-
cer los nuevos requerimientos de los usuarios.

Parte III: Sistemas operativos distribuidos Un sistema operativo distribuido difiere de uno convencio-
nal en que los recursos, los procesos y las operaciones de control del SO se distribuyen entre nodos diferentes.
Esta diferencia da lugar a una multiplicidad de aspectos relativos a la confiabilidad, la eficiencia, la consistencia
y la seguridad de los cálculos y del SO mismo. Esta parte contiene seis pequeños capítulos que encaran tales
aspectos.

Sistemas
operativos
distribuidos

Aspectos teóricos Seguridad de


de los sistemas un sistema
distribuidos distribuido

Algoritmos Tolerancia en la
de control recuperación
distribuidos y en las fallas

Sistemas de
archivos
distribuidos

Parte III: Sistemas operativos distribuidos

Cómo usar este libro


Este libro está pensado como un texto para un curso sobre sistemas operativos que está modelado de acuerdo
con los planes de estudio del IEEE y de la ACM para ciencias de la computación. La primera parte cubre los

00 MAQ. PRELIMI(F0694).indd xix 8/10/07 12:35:46 AM


xx Prefacio

principios fundamentales de los SO, de modo que por sí misma es adecuada para un curso introductorio sobre
los principios de los sistemas operativos. Las dos primeras partes del libro y las secciones seleccionadas de los
capítulos 15 a 20 de la tercera parte pueden funcionar como un curso sobre los principios de los sistemas opera-
tivos para un plan de estudios de ciencias de la computación o temas relacionados. Sin embargo, todos los temas
estudiados aquí no pueden cubrirse en un semestre, de modo que el instructor podría escoger omitir algunas de
las secciones sobre temas avanzados o los capítulos sobre el pase de mensajes, la sincronización y la programa-
ción en los sistemas operativos de multiproceso, y la estructura de los sistemas operativos; o asignarlos para su
estudio en casa. Juntas, las tres partes del libro cubren los temas necesarios para una secuencia de dos cursos
sobre los principios de los sistemas operativos. Un curso sobre sistemas operativos distribuidos, posiblemente
para alumnos de posgrado, podría emplear la tercera parte del libro como parte sustancial.
Con la excepción de una introducción a la computación, este libro no requiere de ninguna formación
específica. Así, los instructores y los estudiantes posiblemente encuentren que contiene una gran cantidad de
material introductorio que éstos ya conocen. He incluido este material por una razón muy importante: como
se menciona al inicio del prefacio, los estudiantes saben muchas cosas por sí mismos, pero frecuentemente les
faltan conceptos. De modo que es útil que lean incluso material elemental que se presenta con base en concep-
tos. Por la misma razón, considero esencial que los instructores cubran en la clase la mayoría del capítulo 2, y
especialmente los siguientes temas:

• Sección 2.1: SO y el sistema de cómputo, especialmente el hardware para E/S, interrupciones y de pro-
tección de la memoria; y las llamadas del sistema.
• Sección 2.5: Multiprogramación, especialmente la mezcla y la prioridad de los problemas.

Diferencias con la primera edición


El libro ha sido reestructurado sustancialmente. Ciertas partes de los capítulos y su secuencia son diferentes de
los de la primera edición. Los capítulos y sus secciones han sido reorganizados, se han agregado nuevos temas
y se han introducido tablas para lograr un mejor enfoque de los conceptos. En el primer capítulo se ha añadido
una sección que contiene un preámbulo del libro, e introducciones a partes y capítulos para motivar mejor al
lector. Espero que a los estudiantes y a los instructores les guste el nuevo formato del libro.

D. M. DHAMDHERE

La presente edición en español contó con el apoyo de:

Sergio Fuenlabrada Velázquez Instituto Politécnico Nacional


Raúl Morales Carrasco Instituto Tecnológico de Puebla

00 MAQ. PRELIMI(F0694).indd xx 8/14/07 11:01:18 AM


Capítulo
1
Introducción

Un sistema operativo (SO) tiene significados distintos para diferentes usuarios. La visión de cada
uno de éstos se denomina visión abstracta porque enfatiza las características que son importan-
tes desde la perspectiva del observador, ignorando todos los otros aspectos. Un sistema operativo
implementa una visión abstracta al actuar como intermediario entre el usuario y el sistema de
cómputo. Este arreglo no solamente permite que un sistema operativo suministre varias funcio-
nalidades al mismo tiempo, sino que también cambie y evolucione con el tiempo. Estudiaremos
de qué manera las visiones abstractas también son útiles para el diseño y la operación de un
sistema, así como durante su operación.
Un sistema operativo tiene dos metas: el uso eficiente de un sistema de cómputo y la conve-
niencia del usuario. Desafortunadamente, esta última a menudo está en conflicto con la primera.
En consecuencia, un sistema operativo no puede proveer a ambos. Comúnmente, encuentra el
equilibrio que resulte más efectivo en el ambiente en el cual se usa un sistema de cómputo;
el uso eficiente es importante cuando un sistema de cómputo es compartido por varios usuarios,
mientras la conveniencia del usuario es importante en computadoras personales. Destinamos
el término utilización efectiva para referirnos al balance entre la eficiencia y la conveniencia
del usuario, que a su vez se ajuste mejor al ambiente. En este capítulo analizamos las facetas de
la conveniencia de uso eficiente y del usuario.
La función primaria de un sistema operativo es admitir la ejecución de los programas del
usuario para asegurar su conveniencia y el uso eficiente de los recursos. En este capítulo descri-
bimos las funciones realizadas por el sistema operativo para atender estas preocupaciones.

1.1 VISIÓN ABSTRACTA DEL SISTEMA OPERATIVO

La pregunta ¿qué es un sistema operativo? probablemente evoque respuestas diferentes. Por


ejemplo,
• Para un escolar o estudiante joven de universidad, un sistema operativo es el software
que permite el acceso a la riqueza de conocimiento disponible en el Internet.
• Para un programador, un sistema operativo es el software que permite el uso de un siste-
ma de cómputo para el desarrollo de programas.

01 MAQ. CAP. 01(F0694).indd 1 8/10/07 12:44:42 AM


2 CAPÍTULO 1 Introducción

• Para una persona que usa un paquete de aplicaciones, un sistema operativo es simple-
mente el software que hace posible que use el paquete.
• Para un técnico en una planta química informatizada, el sistema operativo es el compo-
nente invisible de un sistema de cómputo que controla la planta.

Las respuestas difieren porque la percepción de un usuario acerca de un sistema operativo depen-
de de tres factores: el propósito para el cual una computadora está siendo usada; el ambiente de
cómputo, es decir, el ambiente en el cual se usa el sistema de cómputo; y el grado de identidad
del sistema de cómputo con el propósito que se está atendiendo.
Para el estudiante, el propósito único del sistema de cómputo podría ser usar un navegador
del Internet. El sistema operativo coadyuva a lograr esto, así es que se identifica con el uso del
sistema de cómputo para la navegación en Internet. Un programador desea destinar un sistema
de cómputo al desarrollo de programas de uso general, así es que la habilidad para usar un
compilador para un lenguaje específico es de importancia suprema. Para una persona que usa
un paquete de aplicaciones, el sistema operativo es simplemente un medio de uso del paquete.
Tal usuario es indiferente a las demás capacidades de un sistema operativo. De manera semejan-
te, un técnico en una planta química informatizada considera al sistema operativo como un todo
en el sistema de control de la planta. Un diseñador de sistemas operativos indudablemente tiene
una percepción diferente acerca de lo que es un sistema operativo.
Un concepto común en todas estas percepciones es la utilización de un sistema de cómputo
para un propósito específico o para un conjunto de propósitos. Las intenciones en los ejemplos
anteriores son diferentes, así es que las percepciones del papel del sistema operativo lo son
también.
De entre estos ejemplos, es claro que un usuario percibe al sistema operativo como el soft-
ware que le ayuda a lograr el uso buscado de un sistema de cómputo; las demás capacidades
del sistema de cómputo y su ambiente no parecen tener importancia. Así, el sistema operativo
es simplemente una manera de lograr un propósito establecido. Un usuario preferirá un sistema
operativo que le permite alcanzar su propósito de la manera más simple y rápida posible. Así,
la perspectiva de un usuario siempre está determinada por la conveniencia y la rapidez en la
utilización de la computadora.
Ninguno de los cuatro puntos de vista de un sistema operativo descritos al principio de esta
sección (que se ilustran en la figura 1.1) es completo, pero cada visión es correcta y útil porque le
ayuda a un usuario a entender cómo usar un sistema operativo. Tales visiones se llaman visiones
abstractas. Una visión abstracta se centra en las características esenciales de una entidad desde
la perspectiva del observador. Consecuentemente, contiene algunos elementos de realidad, pero
ignora otros.

1.1.1 Usos de las visiones abstractas

La visión abstracta de un usuario contiene características importantes de un sistema desde su


perspectiva. Le ayuda al diseñador de sistemas operativos a entender los requisitos del usuario,
lo cual coadyuva a planificar las características de un sistema operativo. Los puntos de vis-
ta abstractos son útiles para otros propósitos, resumidos en la tabla 1.1. La ventaja crucial de
usar una visión abstracta en el diseño es que ayuda a controlar la complejidad del diseño al sepa-
rar las funciones de las diferentes partes del sistema. Las visiones abstractas son también útiles
para entender el diseño y la implementación del sistema.

01 MAQ. CAP. 01(F0694).indd 2 8/10/07 12:44:43 AM


1.1 Visión abstracta del sistema operativo 3

INTERNET

INVERSIONES EN LA
BOLSA DE VALORES

Figura 1.1 La visión abstracta de un sistema operativo en el caso del estudiante,


el programador, el usuario y el técnico.

Tabla 1.1 Usos de las visiones abstractas

Uso Descripción
Recopilación de los La visión abstracta del usuario indica los servicios importantes que un sis-
requerimientos del tema debe suministrar. Puede usarse un conjunto de visiones abstractas para
sistema integrar una especificación de los requerimientos del sistema.
Diseño del sistema El uso de las visiones abstractas permite que un diseñador se centre en una
parte específica del sistema. Los detalles de las demás partes están “ocultos”;
se supone que estas partes se encuentran disponibles. Este enfoque ayuda a
controlar la complejidad del proceso de diseño.
Implementación del La parte cuyos detalles están ocultos en una visión de diseño se convierte en
sistema un módulo, que puede invocarse desde otros módulos. Este hecho conduce
a una implementación modular.

La figura 1.2 contiene una visión abstracta de la estructura de un sistema operativo, que
muestra tres partes principales del mismo. Cada una consta de varios programas. El núcleo
(kernel) es el corazón del sistema operativo, controla la operación de la computadora y provee
un conjunto de funciones y servicios para usar el CPU y los recursos de la computadora. Los
programas que no son de kernel implementan los comandos del usuario. Estos programas no
interactúan con el hardware, sino que usan recursos provistos por los programas de kernel. Los
programas de la interfaz del usuario proveen al usuario una interfaz de comando de línea o bien
una de usuario gráfico (la interfaz gráfica del usuario). Estos programas usan recursos provistos

01 MAQ. CAP. 01(F0694).indd 3 8/10/07 12:44:44 AM


4 CAPÍTULO 1 Introducción

por los programas que no son de kernel. Un usuario interactúa con los programas en la interfaz
del usuario (comúnmente con el intérprete de comandos) para solicitar el uso de recursos y los
servicios provistos por el sistema.

Interfaz del usuario

Programas que no
son de kernel

Kernel (núcleo)

Hardware de la computadora

Figura 1.2 La visión abstracta de un diseñador de sistemas operativos.

La visión abstracta de la figura 1.2 tiene propiedades interesantes. Contiene un arreglo jerár-
quico de las capas del programa, en el cual los programas de la capa más alta usan los recursos
provistos por los programas de la capa de abajo. De hecho, cada capa toma una visión abstracta
de la capa inferior. En esta visión, la capa inferior aparece como un sistema que es capaz de eje-
cutar ciertos comandos. Incluso podría ser una máquina que es capaz de realizar ciertas operacio-
nes. El hecho de que la capa inferior conste de un conjunto de programas en vez de un sistema de
cómputo da lo mismo para la capa superior. Cada capa prolonga las capacidades de la máquina
provistas por la capa inferior. La máquina provista por la capa de la interfaz del usuario entiende
los comandos en el lenguaje de comandos del sistema operativo. Esta visión abstracta ayuda a
entender el diseño de un sistema operativo.

Organización lógica y física La visión del programador de una entidad es comúnmente


una visión abstracta. Contiene características y propiedades útiles de la entidad desde la perspec-
tiva del programador. Tres entidades importantes de esta clase son el programa, el archivo y el
dispositivo de E/S. La visión abstracta de una entidad se designa como visión lógica, y el arreglo
y la rel