ESBA Barrio Norte Sistemas Operativos Demian Panello
Clase #6
CONCEPTOS DE LOS SISTEMAS OPERATIVOS
La mayoría de los sistemas operativos proporcionan ciertos conceptos básicos y
abstracciones tales
como procesos, espacios de direcciones y archivos, que son la base para comprender
su funcionamiento.
Procesos
Un concepto clave en todos los sistemas operativos es el proceso. Un proceso es en
esencia un programa en ejecución. Cada proceso tiene asociado un espacio de
direcciones, una lista de ubicaciones de memoria que va desde algún mínimo
(generalmente 0) hasta cierto valor máximo, donde el proceso puede leer y escribir
información. El espacio de direcciones contiene el programa ejecutable, los datos del
programa y su pila. También hay asociado a cada proceso un conjunto de recursos,
que comúnmente incluye registros (el contador de programa y el apuntador de pila,
entre ellos), una lista de archivos abiertos, alarmas pendientes, listas de procesos
relacionados y toda la demás información necesaria para ejecutar el programa. En
esencia, un proceso es un recipiente que guarda toda la información necesaria para
ejecutar un programa.
Luego volveremos a analizar el concepto de proceso con más detalle, pero por ahora
la manera más fácil de que darnos una buena idea de lo que es un proceso es pensar
en un sistema de multiprogramación. El usuario puede haber iniciado un programa de
edición de video para convertir un video de una hora a un formato específico (algo que
puede tardar horas) y después irse a navegar en la Web. Mientras tanto, un proceso en
segundo plano que despierta en forma periódica para comprobar los mensajes
entrantes puede haber empezado a ejecutarse. Así tenemos (cuando menos) tres
procesos activos: el editor de video, el navegador Web y el lector de correo
electrónico. Cada cierto tiempo, el sistema operativo decide detener la ejecución de un
proceso y empezar a ejecutar otro; por ejemplo, debido a que el primero ha utilizado
más tiempo del que le correspondía de la CPU en el último segundo.
Cuando un proceso se suspende en forma temporal como en el ejemplo anterior, debe
reiniciarse después exactamente en el mismo estado que tenía cuando se detuvo. Esto
significa que toda la información acerca del proceso debe guardarse en forma explícita
en alguna parte durante la suspensión.
Por ejemplo, el proceso puede tener varios archivos abiertos para leerlos al mismo
tiempo.
Con cada uno de estos archivos hay un apuntador asociado que proporciona la
posición actual (es decir, el número del byte o registro que se va a leer a continuación).
Cuando un proceso se suspende en forma temporal, todos estos apuntadores deben
Page 1 of 9
ESBA Barrio Norte Sistemas Operativos Demian Panello
guardarse de manera que una llamada a read que se ejecute después de reiniciar el
proceso lea los datos apropiados. En muchos sistemas operativos, toda la información
acerca de cada proceso (además del contenido de su propio espacio de direcciones) se
almacena en una tabla del sistema operativo, conocida como la tabla de procesos,
la cual es un arreglo (o lista enlazada) de estructuras, una para cada proceso que se
encuentre actualmente en existencia.
Así, un proceso (suspendido) consiste en su espacio de direcciones, que se conoce
comúnmente como imagen de núcleo (en honor de las memorias de núcleo magnético
utilizadas antaño) y su entrada en la tabla de procesos, que guarda el contenido de sus
registros y muchos otros elementos necesarios para reiniciar el proceso más adelante.
Las llamadas al sistema de administración de procesos clave son las que se encargan
de la creación y la terminación de los procesos. Considere un ejemplo común. Un
proceso llamado intérprete de comandos o shell lee comandos de una terminal. El
usuario acaba de escribir un comando, solicitando la compilación de un programa. El
shell debe entonces crear un proceso para ejecutar el compilador. Cuando ese proceso
ha terminado la compilación, ejecuta una llamada al sistema para terminarse a sí
mismo.
Si un proceso puede crear uno o más procesos aparte (conocidos como procesos hijos)
y estos procesos a su vez pueden crear procesos hijos, llegamos rápidamente la
estructura de árbol de procesos de la figura 1-13. Los procesos relacionados que
cooperan para realizar un cierto trabajo a menudo necesitan comunicarse entre sí y
sincronizar sus actividades. A esta comunicación se le conoce como comunicación
entre procesos, que veremos con detalle más adelante.
Hay otras llamadas al sistema de procesos disponibles para solicitar más memoria (o
liberar la memoria sin utilizar), esperar a que termine un proceso hijo y superponer su
programa con uno distinto.
Espacios de direcciones
Cada computadora tiene cierta memoria principal que utiliza para mantener los
programas en ejecución.
Page 2 of 9
ESBA Barrio Norte Sistemas Operativos Demian Panello
En un sistema operativo muy simple sólo hay un programa a la vez en la memoria. Para
ejecutar un segundo programa se tiene que quitar el primero y colocar el segundo en
la memoria.
Los sistemas operativos más sofisticados permiten colocar varios programas en
memoria al mismo tiempo. Para evitar que interfieran unos con otros (y con el sistema
operativo), se necesita cierto mecanismo de protección. Aunque este mecanismo tiene
que estar en el hardware, es controlado por el sistema operativo.
El anterior punto de vista se relaciona con la administración y protección de la
memoria principal de la computadora. Aunque diferente, dado que la administración
del espacio de direcciones de los procesos está relacionada con la memoria, es una
actividad de igual importancia. Por lo general, cada proceso tiene cierto conjunto de
direcciones que puede utilizar, que generalmente van desde 0 hasta cierto valor
máximo. En el caso más simple, la máxima cantidad de espacio de direcciones
que tiene un proceso es menor que la memoria principal. De esta forma, un proceso
puede llenar su espacio de direcciones y aún así habrá suficiente espacio en la
memoria principal para contener todo lo necesario.
Sin embargo, en muchas computadoras las direcciones son de 32 o 64 bits, con lo cual
se obtiene un espacio de direcciones de 232 o 264 bytes, respectivamente. ¿Qué
ocurre si un proceso tiene más espacio de direcciones que la memoria principal de la
computadora, y desea usarlo todo?
En las primeras computadoras, dicho proceso simplemente no podía hacer esto. Hoy
en día existe una técnica llamada memoria virtual, como se mencionó antes, en la cual
el sistema operativo mantiene una parte del espacio de direcciones en memoria
principal y otra parte en el disco, moviendo pedazos de un lugar a otro según sea
necesario. En esencia, el sistema operativo crea la abstracción de un espacio de
direcciones como el conjunto de direcciones al que puede hacer referencia un proceso.
El espacio de direcciones se desacopla de la memoria física de la máquina, pudiendo
ser mayor o menor que la memoria física. La administración de los espacios de
direcciones y la memoria física forman una parte importante de lo que hace un sistema
operativo.
Archivos
Otro concepto clave de casi todos los sistemas operativos es el sistema de archivos.
Como se dijo antes, una de las funciones principales del sistema operativo es ocultar
las peculiaridades de los discos y demás dispositivos de E/S, presentando al
programador un modelo abstracto limpio y agradable de archivos independientes del
dispositivo. Sin duda se requieren las llamadas al sistema para crear los archivos,
eliminarlos, leer y escribir en ellos. Antes de poder leer un archivo, debe localizarse en
el disco para abrirse y una vez que se ha leído información del archivo debe cerrarse,
por lo que se proporcionan llamadas para hacer estas cosas.
Para proveer un lugar en donde se puedan mantener los archivos, la mayoría de los
sistemas operativos tienen el concepto de un directorio como una manera de agrupar
archivos. Por ejemplo, un estudiante podría tener un directorio para cada curso que
Page 3 of 9
ESBA Barrio Norte Sistemas Operativos Demian Panello
esté tomando (para los programas necesarios para ese curso), otro directorio para su
correo electrónico y otro más para su página de inicio en World Wide Web. Así, se
necesitan llamadas al sistema para crear y eliminar directorios.
También se proporcionan llamadas para poner un archivo existente en un directorio y
para eliminar un archivo de un directorio. Las entradas de directorio pueden ser
archivos u otros directorios.
Este modelo también da surgimiento a una jerarquía (el sistema de archivos) como se
muestra en la figura 1-14.
Entrada/salida
Todas las computadoras tienen dispositivos físicos para adquirir entrada y producir
salida. Después de todo, ¿qué tendría de bueno una computadora si los usuarios no
pudieran indicarle qué debe hacer y no pudieran obtener los resultados una vez que
realizara el trabajo solicitado? Existen muchos tipos de dispositivos de entrada y de
salida, incluyendo teclados, monitores, impresoras, etcétera.
Es responsabilidad del sistema operativo administrar estos dispositivos.
Page 4 of 9
ESBA Barrio Norte Sistemas Operativos Demian Panello
En consecuencia, cada sistema operativo tiene un subsistema de E/S para administrar
sus dispositivos de E/S. Parte del software de E/S es independiente de los dispositivos,
es decir, se aplica a muchos o a todos los dispositivos de E/S por igual. Otras partes del
software, como los drivers de dispositivos, son específicas para ciertos dispositivos de
E/S.
Protección
Las computadoras contienen grandes cantidades de información que los usuarios
comúnmente desean proteger y mantener de manera confidencial. Esta información
puede incluir mensajes de correo electrónico, planes de negocios, declaraciones
fiscales y mucho más. Es responsabilidad del sistema operativo administrar la
seguridad del sistema de manera que los archivos, por ejemplo, sólo sean accesibles
para los usuarios autorizados.
Como un ejemplo simple, sólo para tener una idea de cómo puede funcionar la
seguridad, considere el sistema operativo UNIX. Los archivos en UNIX están protegidos
debido a que cada uno recibe un código de protección binario de 9 bits. El código de
protección consiste en tres campos de 3 bits, uno para el propietario, uno para los
demás miembros del grupo del propietario (el administrador del sistema divide a los
usuarios en grupos) y uno para todos los demás. Cada campo tiene un bit para el
acceso de lectura, un bit para el acceso de escritura y un bit para el acceso de
ejecución. Estos 3 bits se conocen como los bits rwx. Por ejemplo, el código de
protección rwxrx--x indica que el propietario puede leer (r), escribir (w) o ejecutar (x) el
archivo, otros miembros del grupo pueden leer o ejecutar (pero no escribir) el archivo
y todos los demás pueden ejecutarlo (pero no leer ni escribir). Para un directorio, x
indica el permiso de búsqueda. Un guión corto indica que no se tiene el permiso
correspondiente.
Además de la protección de archivos, existen muchas otras cuestiones de seguridad.
Una de ellas es proteger el sistema de los intrusos no deseados, tanto humanos como
no humanos (por ejemplo, virus).
El Shell
El sistema operativo es el código que lleva a cabo las llamadas al sistema. Los editores,
compiladores, ensambladores, enlazadores e intérpretes de comandos en definitiva no
forman parte del sistema operativo, aun cuando son importantes y útiles. Con el riesgo
de confundir un poco las cosas, en esta sección describiremos brevemente el
intérprete de comandos de UNIX, conocido como shell. Aunque no forma parte del
sistema operativo, utiliza con frecuencia muchas características del mismo y, por ende,
sirve como un buen ejemplo de la forma en que se pueden utilizar las llamadas
al sistema. También es la interfaz principal entre un usuario sentado en su terminal y el
sistema operativo, a menos que el usuario esté usando una interfaz gráfica de usuario.
Existen muchos shells, incluyendo sh, csh, ksh y bash. Todos ellos soportan la
funcionalidad antes descrita, que se deriva del shell original (sh).
Page 5 of 9
ESBA Barrio Norte Sistemas Operativos Demian Panello
Cuando cualquier usuario inicia sesión, se inicia un shell. El shell tiene la terminal como
entrada estándar y salida estándar. Empieza por escribir el indicador de comandos
(prompt), un carácter tal como un signo de dólar, que indica al usuario que el shell está
esperando aceptar un comando.
Memorias extensas
Ahora vamos a examinar algunos desarrollos históricos en el hardware y la forma en
que han afectado al software repetidas veces. Las primeras mainframes tenían
memoria limitada. Una IBM 7090 o 7094 completamente equipada, que fungió como
rey de la montaña desde finales de 1959 hasta 1964, tenía cerca de 128 KB de
memoria. En su mayor parte se programaba en lenguaje ensamblador y su sistema
operativo estaba escrito en lenguaje ensamblador también para ahorrar la valiosa
memoria.
A medida que pasaba el tiempo, los compiladores para lenguajes como FORTRAN y
COBOL se hicieron lo bastante buenos como para que el lenguaje ensamblador se
hiciera obsoleto.
Pero cuando se liberó al mercado la primera minicomputadora comercial (PDP-1), sólo
tenía 4096 palabras de 18 bits de memoria y el lenguaje ensamblador tuvo un regreso
sorpresivo. Con el tiempo, las microcomputadoras adquirieron más memoria y los
lenguajes de alto nivel prevalecieron.
Cuando las microcomputadoras llegaron a principios de 1980, las primeras tenían
memorias de 4 KB y la programación en lenguaje ensamblador surgió de entre los
muertos. A menudo, las computadoras embebidas utilizaban los mismos chips de CPU
que las microcomputadoras (8080, Z80 y posteriormente 8086) y también se
programaban en ensamblador al principio. Ahora sus descendientes, las computadoras
personales, tienen mucha memoria y se programan en C, C++ y Java, además de otros
lenguajes de alto nivel. Las tarjetas inteligentes están pasando por un desarrollo
similar, aunque más allá de un cierto tamaño, a menudo tienen un intérprete de Java y
ejecutan los programas de Java en forma interpretativa, en vez de que se compile Java
al lenguaje máquina de la tarjeta inteligente.
Hardware de protección
Las primeras mainframes (como la IBM 7090/7094) no tenían hardware de protección,
por lo que sólo ejecutaban un programa a la vez. Un programa con muchos errores
podía acabar con el sistema operativo y hacer que la máquina fallara con facilidad. Con
la introducción de la IBM 360, se hizo disponible una forma primitiva de protección de
hardware y estas máquinas podían de esta forma contener varios programas en
memoria al mismo tiempo, y dejarlos que tomaran turnos para ejecutarse
(multiprogramación). La monoprogramación se declaró obsoleta.
Por lo menos hasta que apareció la primera minicomputadora (sin hardware de
protección) la multiprogramación no fue posible. Aunque la PDP-1 y la PDP-8 no tenían
Page 6 of 9
ESBA Barrio Norte Sistemas Operativos Demian Panello
hardware de protección, en cierto momento se agregó a la PDP-11 dando entrada a la
multiprogramación y con el tiempo a UNIX.
Cuando se construyeron las primeras microcomputadoras, utilizaban el chip de CPU
8080 de Intel, que no tenía protección de hardware, por lo que regresamos de vuelta a
la monoprogramación.
No fue sino hasta el Intel 80286 que se agregó hardware de protección y se hizo
posible la multiprogramación. Hasta la fecha, muchos sistemas integrados no tienen
hardware de protección y ejecutan un solo programa.
Ahora veamos los sistemas operativos. Al principio, las primeras mainframes no tenían
hardware de protección ni soporte para la multiprogramación, por lo que ejecutaban
sistemas operativos simples que se encargaban de un programa cargado en forma
manual a la vez. Más adelante adquirieron el soporte de hardware y del sistema
operativo para manejar varios programas a la vez, después capacidades completas de
tiempo compartido.
Cuando aparecieron las minicomputadoras por primera vez, tampoco tenían hardware
de protección y ejecutaban un programa cargado en forma manual a la vez, aun
cuando la multiprogramación estaba bien establecida en el mundo de las mainframes
para ese entonces. Gradualmente adquirieron hardware de protección y la habilidad
de ejecutar dos o más programas a la vez. Las primeras microcomputadoras también
fueron capaces de ejecutar sólo un programa a la vez, pero más adelante adquirieron
la habilidad de la multiprogramación. Las computadoras de bolsillo y las tarjetas
inteligentes se fueron por la misma ruta.
En todos los casos, el desarrollo de software se rigió en base a la tecnología. Por
ejemplo, las primeras microcomputadoras tenían cerca de 4 KB de memoria y no
tenían hardware de protección.
Los lenguajes de alto nivel y la multiprogramación eran demasiado para que un
sistema tan pequeño pudiera hacerse cargo. A medida que las microcomputadoras
evolucionaron en las computadoras personales modernas, adquirieron el hardware
necesario y después el software necesario para manejar características más avanzadas.
Es probable que este desarrollo continúe por varios años más. Otros campos también
pueden tener esta rueda de reencarnaciones, pero en la industria de las computadoras
parece girar con más velocidad.
Discos
Las primeras mainframes estaban en su mayor parte basadas en cinta magnética. Leían
un programa de la cinta, lo compilaban, lo ejecutaban y escribían los resultados de
vuelta en otra cinta. No había discos ni un concepto sobre el sistema de archivos. Eso
empezó a cambiar cuando IBM introdujo el primer disco duro: el RAMAC (RAndoM
Access, Acceso aleatorio) en 1956. Ocupaba cerca de 4 metros cuadrados de espacio
de piso y podía almacenar 5 millones de caracteres de 7 bits, lo suficiente como para
una fotografía digital de mediana resolución. Pero con una renta anual de 35,000
dólares, ensamblar suficientes discos como para poder almacenar el equivalente de un
rollo de película era en extremo costoso. Con el tiempo los precios disminuyeron y se
desarrollaron los sistemas de archivos primitivos.
Page 7 of 9
ESBA Barrio Norte Sistemas Operativos Demian Panello
Uno de los nuevos desarrollos típicos de esa época fue la CDC 6600, introducida en
1964 y considerada durante años como la computadora más rápida del mundo. Los
usuarios podían crear “archivos permanentes” al darles un nombre y esperar que
ningún otro usuario hubiera decidido también que, por decir, “datos” fuera un nombre
adecuado para un archivo. Éste era un directorio de un solo nivel. Con el tiempo las
mainframes desarrollaron sistemas de archivos jerárquicos complejos, lo cual
probablemente culminó con el sistema de archivos MULTICS.
Cuando las minicomputadoras empezaron a usarse, con el tiempo también tuvieron
discos duros.
El disco estándar en la PDP-11 cuando se introdujo en 1970 era el disco RK05, con una
capacidad de 2.5 MB, aproximadamente la mitad del RAMAC de IBM, pero sólo tenía
cerca de 40 cm de diámetro y 5 cm de altura. Pero también tenía al principio un
directorio de un solo nivel. Cuando llegaron las microcomputadoras, CP/M fue al
principio el sistema operativo dominante y también soportaba
un solo directorio en el disco (flexible).
Memoria virtual
La memoria virtual (que se describe en el capítulo 3) proporciona la habilidad de
ejecutar programas más extensos que la memoria física de la computadora, llevando y
trayendo pedazos entre la RAM y el disco. Pasó por un desarrollo similar, ya que
apareció primero en las mainframes, después avanzó a las minis y a las micros. La
memoria virtual también permitió la capacidad de ligar dinámicamente un programa a
una biblioteca en tiempo de ejecución, en vez de compilarlo. MULTICS fue el primer
sistema operativo en tener esta capacidad. Con el tiempo, la idea se propagó
descendiendo por toda la línea y ahora se utiliza ampliamente en la mayoría de los
sistemas UNIX y Windows.
En todos estos desarrollos vemos ideas que se inventaron en un contexto y más
adelante se descartaron cuando cambió el contexto (la programación en lenguaje
ensamblador, la monoprogramación, los directorios de un solo nivel, etc.) sólo para
reaparecer en un contexto distinto, a menudo una década más tarde. Por esta razón,
en este libro algunas veces vemos ideas y algoritmos que pueden parecer atrasados en
comparación con las PC de hoy en día con capacidades de gigabytes, pero tablaque
pronto pueden volver en las computadoras incrustadas y las tarjetas inteligentes.
ACTIVIDADES:
Responda las siguientes preguntas con información de este documento y/o extienda su
desarrollo buscando en la Web.
1. ¿Por qué se necesita la tabla de procesos en un sistema de tiempo compartido? ¿Se
necesita también en los sistemas de computadora personal en los que sólo existe un
proceso, y ese proceso ocupa toda la máquina hasta que termina?
Page 8 of 9
ESBA Barrio Norte Sistemas Operativos Demian Panello
2. ¿Existe alguna razón por la que sería conveniente montar un sistema de archivos en
un directorio no vacío? De ser así, ¿cuál es?
Page 9 of 9