Andrew s. Tanenbaum



Descargar 4,35 Mb.
Ver original pdf
Página2/134
Fecha de conversión12.11.2019
Tamaño4,35 Mb.
1   2   3   4   5   6   7   8   9   ...   134

xv

7.2.2  Codificación de audio

476

7.3


COMPRESIÓN DE VIDEO

478


7.3.1  El estándar JPEG

478


7.3.2  El estándar MPEG

481


7.4

COMPRESIÓN DE AUDIO

484

7.5


PROGRAMACIÓN DE PROCESOS MULTIMEDIA

487


7.5.1  Procesos de programación homogéneos

488


7.5.2  Programación general en tiempo real

488


7.5.3  Programación monotónica en frecuencia

490


7.5.4  Programación del menor tiempo de respuesta primero

491


7.6

PARADIGMAS DE LOS SISTEMAS DE ARCHIVOS MULTIMEDIA

493

7.6.1  Funciones de control de VCR



494

7.6.2  Video casi bajo demanda

496

7.6.3  Video casi bajo demanda con funciones de VCR



498

7.7


COLOCACIÓN DE LOS ARCHIVOS

499


7.7.1  Colocación de un archivo en un solo disco

500


7.7.2  Dos estrategias alternativas de organización de archivos

501


7.7.3  Colocación de archivos para el video casi bajo demanda

504


7.7.4  Colocación de varios archivos en un solo disco

506


7.7.5  Colocación de archivos en varios discos

508


7.8

USO DE CACHÉ

510

7.8.1  Caché de bloque



511

7.8.2  Caché de archivo

512

7.9


PROGRAMACIÓN DE DISCOS PARA MULTIMEDIA

513


7.9.1  Programación de discos estática

513


7.9.2  Programación de disco dinámica

515


7.10

INVESTIGACIÓN SOBRE MULTIMEDIA

516

7.11


RESUMEN

517


8

SISTEMAS DE MÚLTIPLES PROCESADORES

523

8.1


MULTIPROCESADORES

526


8.1.1  Hardware de multiprocesador

526


8.1.2  Tipos de sistemas operativos multiprocesador

534


8.1.3  Sincronización de multiprocesadores

538


8.1.4  Planificación de multiprocesadores

542


8.2

MULTICOMPUTADORAS

548

8.2.1  Hardware de una multicomputadora



549

8.2.2  Software de comunicación de bajo nivel

553

8.2.3  Software de comunicación a nivel de usuario



555

8.2.4  Llamada a procedimiento remoto

558

8.2.5  Memoria compartida distribuida



560

8.2.6  Planificación de multicomputadoras

565

8.2.7  Balanceo de carga



565

8.3


VIRTUALIZACIÓN

568


8.3.1 Requerimientos para la virtualización

570


8.3.2  Hipervisores de tipo 1

571


8.3.3  Hipervisores de tipo 2

572


8.3.4  Paravirtualización

574


8.3.5  Virtualización de la memoria

576


8.3.6  Virtualización de la E/S

578


8.3.7  Dispositivos virtuales

579


8.3.8  Máquinas virtuales en CPUs de multinúcleo

579


8.3.9  Cuestiones sobre licencias

580


8.4

SISTEMAS DISTRIBUIDOS

580

8.4.1  Hardware de red



583

8.4.2  Protocolos y servicios de red

586

8.4.3  Middleware basado en documentos



590

8.4.4  Middleware basado en sistemas de archivos

591

8.4.5  Middleware basado en objetos



596

8.4.6  Middleware basado en coordinación

598

8.4.7  Grids (Mallas)



603

8.5


INVESTIGACIÓN SOBRE LOS SISTEMAS 

DE MÚLTIPLES PROCESADORES

604

8.6


RESUMEN

605


9

SEGURIDAD

611

9.1


EL ENTORNO DE SEGURIDAD

613


9.1.1 Amenazas

613


xvi

CONTENIDO

CONTENIDO

xvii

9.1.2  Intrusos

615

9.1.3  Pérdida accidental de datos



616

9.2


FUNDAMENTOS DE LA CRIPTOGRAFÍA (CIFRADO)

616


9.2.1  Criptografía de clave secreta 

617


9.2.2  Criptografía de clave pública

618


9.2.3  Funciones de una vía

619


9.2.4  Firmas digitales

619


9.2.5  Módulo de plataforma confiable

621


9.3

MECANISMOS DE PROTECCIÓN

622

9.3.1  Dominios de protección



622

9.3.2  Listas de control de acceso

624

9.3.3  Capacidades



627

9.3.4  Sistemas confiables

630

9.3.5  Base de cómputo confiable



631

9.3.6  Modelos formales de los sistemas seguros

632

9.3.7  Seguridad multinivel



634

9.3.8  Canales encubiertos 

637

9.4


AUTENTICACIÓN

641


9.4.1  Autenticación mediante el uso de contraseñas

642


9.4.2  Autenticación mediante el uso de un objeto físico

651


9.4.3  Autenticación mediante biométrica

653


9.5  ATAQUES DESDE EL INTERIOR

656


9.5.1  Bombas lógicas

656


9.5.2  Trampas 

657


9.5.3  Suplantación de identidad en el inicio de sesión

658


9.6

CÓMO EXPLOTAR LOS ERRORES (BUGS) EN EL CÓDIGO

659

9.6.1  Ataques de desbordamiento del búfer



660

9.6.2  Ataques mediante cadenas de formato

662

9.6.3  Ataques de retorno a libc



664

9.6.4  Ataques por desbordamiento de enteros

665

9.6.5  Ataques por inyección de código



666

9.6.6  Ataques por escalada de privilegios

667

9.7


MALWARE

667


9.7.1  Caballos de Troya (troyanos)

670


9.7.2  Virus

672


9.7.3  Gusanos

682


9.7.4  Spyware

684


9.7.5  Rootkits

688


9.8

DEFENSAS


692

9.8.1  Firewalls

693

9.8.2  Los antivirus y las técnicas anti-antivirus



695

9.8.3  Firma de código

701

9.8.4  Encarcelamiento



702

9.8.5  Detección de intrusos basada en modelos

703

9.8.6  Encapsulamiento de código móvil



705

9.8.7  Seguridad de Java

709

9.9  INVESTIGACIÓN SOBRE LA SEGURIDAD 



711

9.10  RESUMEN  712



10

CASO DE ESTUDIO 1: LINUX

719

10.1


HISTORIA DE UNIX Y LINUX 

720


10.1.1 UNICS

720


10.1.2  UNIX EN LA PDP-11

721


10.1.3  UNIX  portable

722


10.1.4 Berkeley UNIX

723


10.1.5  UNIX estándar 

724


10.1.6  MINIX

725


10.1.7  Linux

726


10.2

GENERALIDADES SOBRE LINUX

728

10.2.1  Objetivos de Linux



729

10.2.2  Interfaces para Linux

730

10.2.3  El shell



731

10.2.4  Programas utilitarios de Linux

734

10.2.5  Estructura del kernel



736

10.3


LOS PROCESOS EN LINUX

739


10.3.1  Conceptos fundamentales

739


10.3.2  Llamadas al sistema para administrar procesos en Linux

741


10.3.3  Implementación de procesos e hilos en Linux

745


10.3.4  Planificación en Linux

752


10.3.5  Arranque  de Linux

755


10.4

ADMINISTRACIÓN DE LA MEMORIA EN LINUX

758

10.4.1  Conceptos fundamentales



758

10.4.2  Llamadas al sistema de administración de memoria en Linux

761

xviii

CONTENIDO


CONTENIDO

xix

10.4.3  Implementación de la administración de la memoria 

en Linux

762


10.4.4  La paginación en Linux

768


10.5

ENTRADA/SALIDA EN LINUX

771

10.5.1  Conceptos fundamentales



772

10.5.2  Redes

773

10.5.3  Llamadas al sistema de Entrada/Salida en Linux



775

10.5.4  Implementación de la entrada/salida en Linux

775

10.5.5  Los módulos en Linux



779

10.6


EL SISTEMA DE ARCHIVOS DE LINUX

779


10.6.1  Conceptos fundamentales

780


10.6.2  Llamadas al sistema de archivos en Linux

785


10.6.3  Implementación del sistema de archivos de Linux

788


10.6.4  NFS: El sistema de archivos de red

796


10.7

LA SEGURIDAD EN LINUX

803

10.7.1  Conceptos fundamentales



803

10.7.2  Llamadas al sistema de seguridad en Linux

805

10.7.3  Implementación de la seguridad en Linux



806

10.8  RESUMEN  806



11

CASO DE ESTUDIO 2: WINDOWS VISTA

813

11. 1


HISTORIA DE WINDOWS VISTA

813


11.1.1  1980: MS-DOS

814


11.1.2  1990: Windows basado en MS-DOS

815


11.1.3  2000: Windows basado en NT

815


11.1.4  Windows Vista

818


11.2

PROGRAMACIÓN DE WINDOWS VISTA

819

11.2.1  La Interfaz de programación de aplicaciones de NT nativa



822

11.2.2  La interfaz de programación de aplicaciones Win32

825

11.2.3  El registro de Windows



829

11.3


ESTRUCTURA DEL SISTEMA

831


11.3.1  Estructura del sistema operativo

832


11.3.2  Booteo de Windows Vista 

847


11.3.3  Implementación del administrador de objetos

848


11.3.4  Subsistemas, DLLs y servicios en modo de usuario

858


11.4

PROCESOS E HILOS EN WINDOWS VISTA

861

11.4.1  Conceptos fundamentales



861

11.4.2  Llamadas a la API para administrar trabajos, procesos, 

hilos y fibras

866


11.4.3  Implementación de procesos e hilos

871


11.5

ADMINISTRACIÓN DE LA MEMORIA

879

11.5.1  Conceptos fundamentales



879

11.5.2  Llamadas al sistema para administrar la memoria

884

11.5.3  Implementación de la administración de memoria



885

11.6


USO DE LA CACHÉ EN WINDOWS VISTA

894


11.7

ENTRADA/SALIDA EN WINDOWS VISTA

896

11.7.1  Conceptos fundamentales



897

11.7.2  Llamadas a la API de entrada/salida

898

11.7.3  Implementación de la E/S



901

11.8


EL SISTEMA DE ARCHIVOS NT DE WINDOWS

906


11.8.1  Conceptos fundamentales

907


11.8.2  Implementación del sistema de archivos NT

908


11.9

LA SEGURIDAD EN WINDOWS VISTA

918

11.9.1  Conceptos fundamentales



919

11.9.2  Llamadas a la API de seguridad

921

11.9.3  Implementación de la seguridad



922

11.10 RESUMEN

924

12

CASO DE ESTUDIO 3: SYMBIAN OS

929

12.1


LA HISTORIA DE SYMBIAN OS

930


12.1.1  Raíces de Symbian OS: Psion y EPOC

930


12.1.2  Symbian OS versión 6

931


12.1.3  Symbian OS versión 7

932


12.1.4  Symbian OS en la actualidad

932


12.2

GENERALIDADES SOBRE SYMBIAN OS

932

12.2.1  Orientación a objetos



933

12.2.2  Diseño del microkernel

934

12.2.3  El nanokernel de Symbian OS



935

12.2.4  Acceso a los recursos de cliente/servidor

935

xx

CONTENIDO


CONTENIDO

xxi

12.2.5  Características de un sistema operativo más grande

936

12.2.6 Comunicaciones y multimedia



937

12.3


PROCESOS E HILOS EN SYMBIAN OS

937


12.3.1  Hilos y nanohilos

938


12.3.2  Procesos

939


12.3.3  Objetos activos 

939


12.3.4  Comunicación entre procesos

940


12.4

ADMINISTRACIÓN DE LA MEMORIA

941

12.4.1  Sistemas sin memoria virtual



941

12.4.2  Cómo direcciona Symbian OS la memoria

943

12.5


ENTRADA Y SALIDA

945


12.5.1  Drivers de dispositivos

945


12.5.2  Extensiones del kernel

946


12.5.3  Acceso directo a la memoria

946


12.5.4  Caso especial: medios de almacenamiento

947


12.5.5  Bloqueo de E/S

947


12.5.6  Medios removibles

948


12.6

SISTEMAS DE ALMACENAMIENTO

948

12.6.1  Sistemas de archivos para dispositivos móviles



948

12.6.2  Sistemas de archivos de Symbian OS

949

12.6.3  Seguridad y protección del sistema de archivos



949

12.7


LA SEGURIDAD EN SYMBIAN OS

950


12.8

LA COMUNICACIÓN EN SYMBIAN OS

953

12.8.1  Infraestructura básica



953

12.8.2  Un análisis más detallado de la infraestructura

954

12.9


RESUMEN

957


13

DISEÑO DE SISTEMAS OPERATIVOS

959

13.1


LA NATURALEZA DEL PROBLEMA DE DISEÑO

960


13.1.1  Objetivos

960


13.1.2  ¿Por qué es difícil diseñar un sistema operativo?

961


13.2

DISEÑO DE INTERFACES

963

13.2.1  Principios de guía



963

13.2.2  Paradigmas

965


13.2.3  La interfaz de llamadas al sistema

968


13.3

IMPLEMENTACIÓN

971

13.3.1  Estructura del sistema



971

13.3.2  Comparación entre mecanismo y directiva

975

13.3.3  Ortogonalidad



976

13.3.4  Nomenclatura

977

13.3.5  Tiempo de vinculación



978

13.3.6  Comparación entre estructuras estáticas y dinámicas

979

13.3.7  Comparación entre la implementación de arriba-abajo 



y la implementación de abajo-arriba

980


13.3.8  Técnicas útiles

981


13.4

RENDIMIENTO

987

13.4.1  ¿Por qué son lentos los sistemas operativos?



987

13.4.2  ¿Qué se debe optimizar?

988

13.4.3  Concesiones entre espacio y tiempo



988

13.4.4  Uso de caché

991

13.4.5  Sugerencias



992

13.4.6  Explotar la localidad

993

13.4.7  Optimizar el caso común



993

13.5  ADMINISTRACIÓN DE PROYECTOS 

994

13.5.1  El mítico hombre-mes



994

13.5.2  Estructura de equipos

995

13.5.3  La función de la experiencia



997

13.5.4  Sin bala de plata

998

13.6


TENDENCIAS EN EL DISEÑO DE SISTEMAS OPERATIVOS

998


13.6.1  Virtualización

999


13.6.2  Chips multinúcleo

999


13.6.3  Sistemas operativos con espacios de direcciones extensos

1000


13.6.4  Redes

1000


13.6.5  Sistemas paralelos y distribuidos

1001


13.6.6  Multimedia

1001


13.6.7  Computadoras operadas por baterías

1002


13.6.8  Sistemas embebidos

1002


13.6.9  Nodos de monitoreo

1003


13.7  RESUMEN

1003


xxii

CONTENIDO

CONTENIDO

xxiii

14

LISTA DE LECTURAS Y BIBLIOGRAFÍA

1007

14.1


SUGERENCIAS PARA CONTINUAR LA LECTURA

1007


14.1.1  Introducción y obras generales

1008


14.1.2  Procesos e hilos

1008


14.1.3  Administración de la memoria

1009


14.1.4  Entrada/salida

1009


14.1.5  Sistemas de archivos

1010


14.1.6  Interbloqueos

1010


14.1.7  Sistemas operativos multimedia

1010


14.1.8  Sistemas con varios procesadores

1011


14.1.9  Seguridad

1012


14.1.10 Linux

1014


14.1.11 Windows Vista

1014


14.1.12  El sistema operativo Symbian

1015


14.1.13 Principios de diseño

1015


14.2

BIBLIOGRAFÍA EN ORDEN ALFABÉTICO

1016

ÍNDICE

1049


La tercera edición de este libro difiere de la segunda en muchos aspectos. Para empezar, reordena-

mos los capítulos para colocar el material central al principio. También pusimos mayor énfasis en

el sistema operativo como el creador de las abstracciones. El capítulo 1, se ha actualizado en forma

considerable y ofrece una introducción de todos los conceptos; el capítulo 2 trata sobre la abstrac-

ción de la CPU en varios procesos; el 3 aborda la abstracción de la memoria física en espacios de

direcciones (memoria virtual); el 4 versa sobre la abstracción del disco en archivos. En conjunto,

los procesos, espacios de direcciones virtuales y archivos son los conceptos clave que proporcionan

los sistemas operativos, y es la razón por la que hayamos colocado los capítulos correspondientes

antes de lo establecido en la edición anterior.

El capítulo 1 se modificó y actualizó de manera considerable. Por ejemplo, ahora proporciona

una introducción al lenguaje de programación C y al modelo de C en tiempo de ejecución para los

lectores que están familiarizados sólo con Java.

En el capítulo 2, el análisis de los hilos (threads) se modificó y expandió para reflejar su nue-

va importancia. Entre otras cosas, ahora hay una sección acerca de los hilos Pthreads del estándar

de IEEE.

El capítulo 3, sobre la administración de memoria, se reorganizó para poner énfasis en la idea

de que una de las funciones clave de un sistema operativo es proporcionar la abstracción de un es-

pacio de direcciones virtuales para cada proceso. Se eliminó el material que trata de la administra-

ción de memoria en los sistemas de procesamiento por lotes, y se actualizó el referente a la

implementación de la paginación, con el fin de destacar la necesidad de administrar espacios de di-

recciones más extensos (ahora muy comunes) y de ofrecer una mayor velocidad.

PREFACIO

xxiv


PREFACIO

xxv

Se actualizaron los capítulos 4 a 7: se eliminó cierto material anterior y se agregó nuevo. Las

secciones sobre las actividades actuales de investigación en estos capítulos se reescribieron desde

cero y se agregaron muchos nuevos problemas y ejercicios de programación.

Se actualizó el capítulo 8, incluyendo cierto material acerca de los sistemas multinúcleo. Se

agregó una nueva sección sobre la tecnología de hipervirtualización, los hipervisores y las máqui-

nas virtuales, donde se utilizó VMware como ejemplo.

El capítulo 9 se modificó y reorganizó de manera considerable, con mucho material actuali-

zado referente a la explotación de los errores (bugs) en el código, el malware y las defensas con-

tra éstos.

El capítulo 10, que trata acerca de Linux, es una readaptación del anterior (que trataba so-

bre UNIX y Linux). Sin duda, ahora el énfasis está en Linux y hay una gran cantidad de mate-

rial nuevo.

El capítulo 11, sobre Windows Vista, es una importante revisión del capítulo 11 anterior, que

trataba de Windows 2000. Este capítulo muestra un análisis completamente actualizado de Win-

dows.


El capítulo 12 es nuevo. A mi parecer, los sistemas operativos embebidos, o incrustados (co-

mo los que se encuentran en los teléfonos celulares y los asistentes digitales personales, o PDAs)

se ignoran en la mayoría de los libros de texto, a pesar de que hay más de estos dispositivos en

el mercado que PCs y computadoras portátiles. Esta edición remedia este problema con un aná-

lisis extendido de Symbian OS, que se utiliza ampliamente en los teléfonos inteligentes (Smart

Phones).


El capítulo 13, sobre el diseño de sistemas operativos, no presenta modificaciones importantes.

Este libro pone a su disposición una gran cantidad de material didáctico de apoyo. Los suple-

mentos para el instructor se encuentran en el sitio web de este libro: www.pearsoneducacion.net/

tanembaum, e incluyen diapositivas de PowerPoint, herramientas de software para estudiar sistemas

operativos, experimentos de laboratorio para los estudiantes, simuladores y material adicional para

utilizar en sus cursos. Los instructores que utilicen este libro como texto definitivamente deben dar-

le un vistazo.

Varias personas me ayudaron con esta revisión. En primer lugar deseo agradecer a mi editora,

Tracy Dunkelberger. Éste es mi libro número 18 y he desgastado a muchos editores en el proceso. Tracy

fue más allá del cumplimiento de su deber con este libro, ya que hizo cosas tales como buscar colabo-

radores, organizar varias reseñas, ayudar con todos los suplementos, lidiar con los contratos, actuar 

como intermediario con PH, coordinar una gran cantidad de procesamiento en paralelo y, en general,

asegurarse de que todo saliera a tiempo, además de otras cosas. También me ayudó a mantener un es-

tricto itinerario de trabajo para poder lograr que este libro se imprimiera a tiempo, e hizo todo esto man-

teniéndose animosa y alegre, a pesar de tener muchas otras actividades que exigían gran parte de su

atención. Gracias Tracy, en verdad te lo agradezco.

Ada Gavrilovska de Georgia Tech, experta en los aspectos internos sobre Linux, actualizó el

capítulo 10 que estaba basado en UNIX (con énfasis en FreeBSD) para convertirlo en algo más en-

focado en Linux, aunque gran parte del capítulo sigue siendo genérico para todos los sistemas

UNIX. Linux es más popular entre los estudiantes que FreeBSD, por lo que éste es un cambio im-

portante. 

Dave Probert de Microsoft actualizó el capítulo 11, que estaba basado en Windows 2000, para

concentrarlo en Windows Vista. Aunque tienen varias similitudes, también tienen diferencias con-

siderables. Dave conoce mucho de Windows y tiene suficiente visión como para poder indicar la

diferencia entre los puntos en los que Microsoft hizo lo correcto y en los que se equivocó. Como

resultado de su trabajo este libro es mucho mejor.


Mike Jipping de Hope College escribió el capítulo acerca de Symbian OS. No abordar los sis-

temas embebidos en tiempo real era una grave omisión en el libro; gracias a Mike se resolvió ese

problema. Los sistemas embebidos en tiempo real se están volviendo cada vez más importantes en

el mundo, y este capítulo ofrece una excelente introducción al tema.

A diferencia de Ada, Dave y Mike, cada uno de los cuales se enfocó en un capítulo, Shivakant

Mishra, de la University of Colorado en Boulder, fungió más como un sistema distribuido, leyendo

y haciendo comentarios sobre muchos capítulos, además de proporcionar una gran cantidad de ejer-

cicios y problemas de programación nuevos a lo largo del libro.

Hugh Lauer también merece una mención especial. Cuando le pedimos ideas sobre cómo re-

visar la segunda edición, no esperábamos un informe de 23 páginas con interlineado sencillo; y

sin embargo eso fue lo que obtuvimos. Muchos de los cambios, como el nuevo énfasis sobre las

abstracciones de los procesos, los espacios de direcciones y los archivos, se deben a su participa-

ción.

También quiero agradecer a otras personas que me ayudaron de muchas formas, incluyendo el



sugerir nuevos temas a cubrir, leer el manuscrito con cuidado, hacer suplementos y contribuir con

nuevos ejercicios. Entre ellos Steve Armstrong, Jeffrey Chastine, John Connelly, Mischa Gelder-

mans, Paul Gray, James Griffioen, Jorrit Herder, Michael Howard, Suraj Kothari, Roger Kraft,

Trudy Levine, John Masiyowski, Shivakant Mishra, Rudy Pait, Xiao Qin, Mark Russinovich,

Krishna Sivalingam, Leendert van Doorn y Ken Wong.

El personal de Prentice Hall fue amistoso y cooperativo como siempre, en especial Irwin Zuc-

ker y Scott Disanno en producción, y David Alick, ReeAnne Davies y Melinda Haggerty en edito-

rial.


Por último, pero no por ello menos importante, Barbara y Marvin siguen siendo maravillosos,

como siempre, cada uno en una forma especial y única. Y desde luego, quiero agradecer a Suzan-

ne por su amor y paciencia recientes.

Andrew S. Tanenbaum.




Compartir con tus amigos:
1   2   3   4   5   6   7   8   9   ...   134


La base de datos está protegida por derechos de autor ©absta.info 2019
enviar mensaje

    Página principal