Andrew s. Tanenbaum



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

xxvi

PREFACIO

ACERCA DEL AUTOR

Andrew S. Tanenbaum tiene una licenciatura en ciencias del M.I.T. y un doctorado de la University

of California, en Berkeley. En la actualidad es profesor de Ciencias computacionales en la Vrije

Universiteit, en Amsterdam, Holanda, donde encabeza el Grupo de sistemas computacionales. Fue

Decano de la Advanced School for Computing and Imaging, una escuela de graduados interuniver-

sidades que realiza investigaciones acerca de los sistemas paralelos avanzados, distribuidos y de

creación de imágenes. Ahora es Profesor académico de la Royal Netherlands Academy of Arts and

Sciencies, lo cual le ha salvado de convertirse en un burócrata.

Tanenbaum ha realizado investigaciones sobre compiladores, sistemas operativos, redes, siste-

mas distribuidos de área local y sistemas distribuidos de área amplia que se escalan hasta mil mi-

llones de usuarios. Estos proyectos de investigación han producido más de 140 artículos evaluados

por expertos en publicaciones especializadas y conferencias. También ha participado como autor 

o coautor en cinco libros, que a la fecha han aparecido en 18 ediciones. Estos libros se han traduci-

do a 21 idiomas, desde vasco hasta tailandés, y se utilizan en universidades de todo el mundo; La

combinación idioma+edición da 130 versiones.

El profesor Tanenbaum también ha producido una cantidad considerable de software. Fue el ar-

quitecto principal del Amsterdam Compiler Kit, un kit de herramientas utilizado ampliamente para

escribir compiladores portables. También fue uno de los diseñadores principales de Amoeba, uno

de los primeros sistemas distribuidos utilizado en una colección de estaciones de trabajo conecta-

das mediante una LAN, y Globe, un sistema distribuido de área amplia.

También es autor de MINIX, un pequeño clon de UNIX cuyo propósito principal fue utilizar-

lo en los laboratorios de programación de los estudiantes. Fue la inspiración directa para Linux y la

plataforma en la que se desarrolló inicialmente. La versión actual de MINIX, conocida como MI-

NIX 3, se concentra en un sistema operativo extremadamente confiable y seguro. El profesor Ta-

nenbaum considera que su labor habrá terminado el día que sea innecesario equipar cada

computadora con un botón de reinicio. MIINIX 3 es un proyecto continuo de código fuente abier-

to, al cual todos están invitados a participar. El lector puede visitar www.minix3.org para descargar

una copia gratuita y averiguar qué es lo que está ocurriendo en la actualidad.

Los estudiantes de doctorado del profesor Tanenbaum han obtenido mayor gloria después de

graduarse y él está muy orgulloso de ellos. 

Tanenbaum es miembro del ACM, del IEEE y de la Royal Netherlands Academy of Arts and

Sciences. También ha recibido muchos premios por su labor científica, entre los que se incluyen:

• 2007 IEEE James H. Mulligan, Jr. Education Medal

• 2003 TAA McGuffey Award for Computer Science and Engineering

• 2002 TAA Texty Award for Computer Science and Engineering

• 1997 ACM/SIGCSE Award for Outstanding Contributions to Computer

• 1994 ACM Karl V. Karlstrom Outstanding Educator Award

También pertenece a la lista de Quién es quién en el mundo (Who’s Who in the World). Su página

Web se encuentra en el URL http://www.cs.vu.nl/~ast /.


1

INTRODUCCIÓN

1

Una computadora moderna consta de uno o más procesadores, una memoria principal, discos, im-

presoras, un teclado, un ratón, una pantalla o monitor, interfaces de red y otros dispositivos de en-

trada/salida. En general es un sistema complejo. Si todos los programadores de aplicaciones

tuvieran que comprender el funcionamiento de todas estas partes, no escribirían código alguno. Es

más: el trabajo de administrar todos estos componentes y utilizarlos de manera óptima es una tarea

muy desafiante. Por esta razón, las computadoras están equipadas con una capa de software llama-

da sistema operativo, cuyo trabajo es proporcionar a los programas de usuario un modelo de compu-

tadora mejor, más simple y pulcro, así como encargarse de la administración de todos los recursos

antes mencionados. Los sistemas operativos son el tema de este libro.

La mayoría de los lectores habrán tenido cierta experiencia con un sistema operativo como

Windows, Linux, FreeBSD o Mac OS X, pero las apariencias pueden ser engañosas. El progra-

ma con el que los usuarios generalmente interactúan se denomina shell, cuando está basado en

texto, y GUI  (Graphical User Interface; Interfaz gráfica de usuariocuando utiliza elementos

gráficos o iconos. En realidad no forma parte del sistema operativo, aunque lo utiliza para llevar

a cabo su trabajo.

La figura 1-1 presenta un esquema general de los componentes principales que aquí se anali-

zan. En la parte inferior se muestra el hardware, que consiste en circuitos integrados (chips), tarje-

tas, discos, un teclado, un monitor y objetos físicos similares. Por encima del hardware se encuentra

el software. La mayoría de las computadoras tienen dos modos de operación: modo kernel y modo

usuario. El sistema operativo es la pieza fundamental del software y se ejecuta en modo kernel

(también conocido como modo supervisor). En este modo, el sistema operativo tiene acceso



completo a todo el hardware y puede ejecutar cualquier instrucción que la máquina sea capaz de

ejecutar. El resto del software se ejecuta en modo usuario, en el cual sólo un subconjunto de las

instrucciones de máquina es permitido. En particular, las instrucciones que afectan el control de la má-

quina o que se encargan de la E/S (entrada/salida) están prohibidas para los programas en modo

usuario. Volveremos a tratar las diferencias entre el modo kernel y el modo usuario repetidamente

a lo largo de este libro.



2

INTRODUCCIÓN

CAPÍTULO 1

Hardware


Software

Modo usuario

Modo kernel

Sistema operativo

Navegador

Web


Lector de 

correo 


electrónico

Reproductor 

de música

Programa de interfaz de usuario



Figura 1-1. Ubicación del sistema operativo.

El programa de interfaz de usuario, shell o GUI, es el nivel más bajo del software en modo

usuario y permite la ejecución de otros programas, como un navegador Web, lector de correo elec-

trónico o reproductor de música. Estos programas también utilizan en forma intensiva el sistema

operativo.

La ubicación del sistema operativo se muestra en la figura 1-1. Se ejecuta directamente sobre

el hardware y proporciona la base para las demás aplicaciones de software.

Una distinción importante entre el sistema operativo y el software que se ejecuta en modo usua-

rio es que, si a un usuario no le gusta, por ejemplo, su lector de correo electrónico, es libre de con-

seguir otro o incluso escribir el propio si así lo desea; sin embargo, no es libre de escribir su propio

manejador de interrupciones de reloj, que forma parte del sistema operativo y está protegido por el

hardware contra cualquier intento de modificación por parte de los usuarios.

Algunas veces esta distinción no es clara en los sistemas integrados (a los que también se co-

noce como integrados o incrustados, y que podrían no tener modo kernel) o en los sistemas inter-

pretados (como los sistemas operativos basados en Java que para separar los componentes utilizan

interpretación y no el hardware).

Además, en muchos sistemas hay programas que se ejecutan en modo de usuario, pero ayudan

al sistema operativo o realizan funciones privilegiadas. Por ejemplo, a menudo hay un programa que

permite a los usuarios cambiar su contraseña. Este programa no forma parte del sistema operativo y

no se ejecuta en modo kernel, pero sin duda lleva a cabo una función delicada y tiene que proteger-



SECCIÓN 1.1

¿QUÉ ES UN SISTEMA OPERATIVO?



3

se de una manera especial. En ciertos sistemas, la idea se lleva hasta el extremo y partes de lo que

tradicionalmente se considera el sistema operativo (por ejemplo, el sistema de archivos) se ejecutan

en el espacio del usuario. En dichos sistemas es difícil trazar un límite claro. Todo lo que se ejecuta en

modo kernel forma, sin duda, parte del sistema operativo, pero podría decirse que algunos progra-

mas que se ejecutan fuera de este modo también forman parte del mismo sistema, o por lo menos es-

tán estrechamente asociados a él. 

Los sistemas operativos difieren de los programas de usuario (es decir, de aplicación) en varias

cuestiones además del lugar en el que residen. En particular, son enormes, complejos y de larga du-

ración. El código fuente de un sistema operativo como Linux o Windows contiene cerca de cinco

millones de líneas de código. Para tener una idea de lo que esto significa, considere el trabajo de

imprimir cinco millones de líneas en un formato de libro: con 50 líneas por página y 1000 páginas

por volumen, se requerirían 100 volúmenes para listar un sistema operativo de este tamaño; es de-

cir, todo un librero. Imagine el lector que tiene un trabajo como encargado de dar mantenimiento a

un sistema operativo y que en su primer día su jefe le presenta un librero con el código y le dice:

“Apréndase todo esto”. Y ésta sólo sería la parte que se ejecuta en el kernel. Los programas de usua-

rio como la interfaz gráfica, las bibliotecas y el software de aplicación básico (como el Explorador

de Windows) pueden abarcar fácilmente de 10 a 20 veces esa cantidad. 

En este punto, el lector debe tener una idea clara de por qué los sistemas operativos tienen una

larga vida: es muy difícil escribir uno y, por lo tanto, el propietario se resiste a tirarlo y empezar de

nuevo. En vez de ello, evolucionan durante periodos extensos. Windows 95/98/Me es, esencialmen-

te, un sistema operativo distinto de Windows NT/2000/XP/Vista, su sucesor. Tienen una apariencia

similar para los usuarios, ya que Microsoft se aseguró bien de ello, sin embargo, tuvo muy buenas

razones para deshacerse de Windows 98, las cuales describiremos cuando estudiemos Windows con

detalle en el capítulo 11.

El otro ejemplo principal que utilizaremos a lo largo de este libro (además de Windows) es

UNIX, con sus variantes y clones. También ha evolucionado a través de los años con versiones ta-

les como System V, Solaris y FreeBSD que se derivan del sistema original, mientras que Linux tie-

ne una base de código nueva, modelada estrechamente de acuerdo con UNIX y altamente compatible

con él. Utilizaremos ejemplos de UNIX a lo largo de este libro y analizaremos Linux con detalle en

el capítulo 10.

En este capítulo hablaremos brevemente sobre varios aspectos clave de los sistemas operativos,

incluyendo en síntesis qué son, cuál es su historia, cuáles son los tipos que existen, algunos de los

conceptos básicos y su estructura. En capítulos posteriores volveremos a hablar sobre muchos de

estos tópicos importantes con más detalle.

1.1 ¿QUÉ ES UN SISTEMA OPERATIVO?

Es difícil definir qué es un sistema operativo aparte de decir que es el software que se ejecuta en

modo kernel (además de que esto no siempre es cierto). Parte del problema es que los sistemas ope-

rativos realizan dos funciones básicas que no están relacionadas: proporcionar a los programadores

de aplicaciones (y a los programas de aplicaciones, naturalmente) un conjunto abstracto de recur-

sos simples, en vez de los complejos conjuntos de hardware; y administrar estos recursos de hard-



ware. Dependiendo de quién se esté hablando, el lector podría escuchar más acerca de una función

o de la otra. Ahora analizaremos ambas.



1.1.1  El sistema operativo como una máquina extendida

La arquitectura (conjunto de instrucciones, organización de memoria, E/S y estructura de bus) de

la mayoría de las computadoras a nivel de lenguaje máquina es primitiva y compleja de programar,

en especial para la entrada/salida. Para hacer este punto más concreto, considere la forma en que se

lleva a cabo la E/S de disco flexible mediante los dispositivos controladores (device controllers)

compatibles NEC PD765 que se utilizan en la mayoría de las computadoras personales basadas en

Intel (a lo largo de este libro utilizaremos los términos “disco flexible” y “diskette” indistintamen-

te). Utilizamos el disco flexible como un ejemplo debido a que, aunque obsoleto, es mucho más

simple que un disco duro moderno. El PD765 tiene 16 comandos, cada uno de los cuales se espe-

cifica mediante la carga de 1 a 9 bytes en un registro de dispositivo. Estos comandos son para leer

y escribir datos, desplazar el brazo del disco y dar formato a las pistas, así como para inicializar, de-

tectar, restablecer y recalibrar el dispositivo controlador y las unidades.

Los comandos más básicos son 

read


write


(lectura y escritura), cada uno de los cuales re-

quiere 13 parámetros, empaquetados en 9 bytes. Estos parámetros especifican elementos tales co-

mo la dirección del bloque de disco a leer, el número de sectores por pista, el modo de grabación

utilizado en el medio físico, el espacio de separación entre sectores y lo que se debe hacer con una

marca de dirección 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 operación se com-

pleta, el chip del dispositivo controlador devuelve 23 campos de estado y error, empaquetados en 

7 bytes. Como si esto no fuera suficiente, el programador del disco flexible también debe estar cons-

tantemente al tanto de si el motor está encendido o apagado. Si el motor está apagado, debe encen-

derse (con un retraso largo de arranque) para que los datos puedan ser leídos o escritos. El motor

no se debe dejar demasiado tiempo encendido porque se desgastará. Por lo tanto, el programador se

ve obligado a lidiar con el problema de elegir entre tener retrasos largos de arranque o desgastar los

discos flexibles (y llegar a perder los datos).

Sin entrar en los detalles reales, debe quedar claro que el programador promedio tal vez no de-

see involucrarse demasiado con la programación de los discos flexibles (o de los discos duros, que

son aún más complejos). En vez  de ello, lo que desea es una abstracción simple de alto nivel que se

encargue de lidiar con el disco. En el caso de los discos, una abstracción común sería que el disco

contiene una colección de archivos con nombre. Cada archivo puede ser abierto para lectura o escri-

tura, después puede ser leído o escrito y, por último, cerrado. Los detalles, tales como si la grabación

debe utilizar o no la modulación de frecuencia y cuál es el estado del motor en un momento dado,

no deben aparecer en la abstracción que se presenta al programador de aplicaciones.

La abstracción es la clave para lidiar con la complejidad. Las buenas abstracciones convierten

una tarea casi imposible en dos tareas manejables. La primera de éstas es definir e implementar las

abstracciones; la segunda, utilizarlas para resolver el problema en cuestión. Una abstracción que ca-

si cualquier usuario de computadora comprende es el archivo: es una pieza útil de información, co-

mo una fotografía digital, un mensaje de correo electrónico almacenado o una página Web. Es más

fácil lidiar con fotografías, correos electrónicos y páginas Web que con los detalles de los discos,

4

INTRODUCCIÓN

CAPÍTULO 1


SECCIÓN 1.1

¿QUÉ ES UN SISTEMA OPERATIVO?



5

como en el caso del disco flexible descrito. El trabajo del sistema operativo es crear buenas abstrac-

ciones para después implementar y administrar los objetos abstractos entonces creados. En este li-

bro hablaremos mucho acerca de las abstracciones, dado que son claves para comprender los

sistemas operativos.

Este punto es tan importante que vale la pena repetirlo en distintas palabras. Con el debido

respeto a los ingenieros industriales que diseñaron la Macintosh, el hardware es feo. Los procesa-

dores, memorias, discos y otros dispositivos reales son muy complicados y presentan interfaces di-

fíciles, enredadas, muy peculiares e inconsistentes para las personas que tienen que escribir

software para utilizarlos. Algunas veces esto se debe a la necesidad de tener compatibilidad con el

hardware anterior; otras, a un deseo de ahorrar dinero, y otras más, a que los diseñadores de hard-

ware no tienen idea (o no les importa) qué tan grave es el problema que están ocasionando para el

software. Una de las principales tareas del sistema operativo es ocultar el hardware y presentar a

los programas (y a sus programadores) abstracciones agradables, elegantes, simples y consisten-

tes con las que puedan trabajar. Los sistemas operativos ocultan la parte fea con la parte hermosa,

como se muestra en la figura 1-2.

Sistema operativo

Hardware


Interfaz fea

Interfaz hermosa

Programas de aplicación

Figura 1-2. Los sistemas operativos ocultan el hardware feo con abstracciones hermosas.

Hay que recalcar que los verdaderos clientes del sistema operativo son los programas de apli-

cación (a través de los programadores de aplicaciones, desde luego). Son los que tratan directamen-

te con el sistema operativo y sus abstracciones. En contraste, los usuarios finales tienen que lidiar

con las abstracciones que proporciona la interfaz de usuario, ya sea un shell de línea de comandos

o una interfaz gráfica. Aunque las abstracciones en la interfaz de usuario pueden ser similares a las

que proporciona el sistema operativo, éste no siempre es el caso. Para aclarar este punto, considere

el escritorio normal de Windows y el indicador para comandos orientado a texto. Ambos son pro-

gramas que se ejecutan en el sistema operativo Windows y utilizan las abstracciones que este siste-

ma proporciona, pero ofrecen interfaces de usuario muy distintas. De manera similar, un usuario de

Linux que ejecuta Gnome o KDE ve una interfaz muy distinta a la que ve un usuario de Linux que

trabaja directamente encima del Sistema X Window subyacente (orientado a texto), pero las abs-

tracciones del sistema operativo subyacente son las mismas en ambos casos.


En este libro estudiaremos detalladamente las abstracciones que se proporcionan a los progra-

mas de aplicación, pero trataremos muy poco acerca de las interfaces de usuario, que es un tema

bastante extenso e importante, pero que sólo está relacionado con la periferia de los sistemas ope-

rativos.


1.1.2 El sistema operativo como administrador de recursos

El concepto de un sistema operativo cuya función principal es proporcionar abstracciones a los pro-

gramas de aplicación responde a una perspectiva de arriba hacia abajo. La perspectiva alterna, de

abajo hacia arriba, sostiene que el sistema operativo está presente para administrar todas las piezas

de un sistema complejo. Las computadoras modernas constan de procesadores, memorias, tempo-

rizadores, discos, ratones, interfaces de red, impresoras y una amplia variedad de otros dispositivos.

En la perspectiva alterna, el trabajo del sistema operativo es proporcionar una asignación ordenada

y controlada de los procesadores, memorias y dispositivos de E/S, entre los diversos programas que

compiten por estos recursos.

Los sistemas operativos modernos permiten la ejecución simultánea de varios programas. Ima-

gine lo que ocurriría si tres programas que se ejecutan en cierta computadora trataran de imprimir

sus resultados en forma simultánea en la misma impresora. Las primeras líneas de impresión po-

drían provenir del programa 1, las siguientes del programa 2, después algunas del programa 3, y así

en lo sucesivo: el resultado sería un caos. El sistema operativo puede imponer orden al caos poten-

cial, guardando en búferes en disco toda la salida destinada para la impresora. Cuando termina un

programa, el sistema operativo puede entonces copiar su salida, previamente almacenada, del archi-

vo en disco a la impresora, mientras que al mismo tiempo el otro programa puede continuar gene-

rando más salida, ajeno al hecho de que la salida en realidad no se está enviando a la impresora

todavía.

Cuando una computadora (o red) tiene varios usuarios, la necesidad de administrar y proteger

la memoria, los dispositivos de E/S y otros recursos es cada vez mayor; de lo contrario, los usua-

rios podrían interferir unos con otros. Además, los usuarios necesitan con frecuencia compartir no

sólo el hardware, sino también la información (archivos o bases de datos, por ejemplo). En resu-

men, esta visión del sistema operativo sostiene que su tarea principal es llevar un registro de qué

programa está utilizando qué recursos, de otorgar las peticiones de recursos, de contabilizar su uso

y de mediar las peticiones en conflicto provenientes de distintos programas y usuarios.

La administración de recursos incluye el multiplexaje (compartir) de recursos en dos formas

distintas: en el tiempo y en el espacio. Cuando un recurso se multiplexa en el tiempo, los distintos

programas o usuarios toman turnos para utilizarlo: uno de ellos obtiene acceso al recurso, después

otro, y así en lo sucesivo. Por ejemplo, con sólo una CPU y varios programas que desean ejecutar-

se en ella, el sistema operativo primero asigna la CPU a un programa y luego, una vez que se ha

ejecutado por el tiempo suficiente, otro programa obtiene acceso a la CPU, después otro, y en un

momento dado el primer programa vuelve a obtener acceso al recurso. La tarea de determinar có-

mo se multiplexa el recurso en el tiempo (quién sigue y durante cuánto tiempo) es responsabilidad

del sistema operativo. Otro ejemplo de multiplexaje en el tiempo es la compartición de la impreso-

ra. Cuando hay varios trabajos en una cola de impresión, para imprimirlos en una sola impresora,

se debe tomar una decisión en cuanto a cuál trabajo debe imprimirse a continuación. 

6

INTRODUCCIÓN

CAPÍTULO 1


SECCIÓN 1.2

HISTORIA DE LOS SISTEMAS OPERATIVOS




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