Centrémonos ahora en los componentes que conforman el dominio de un sis- tema operativo. Para poder llevar a cabo las acciones solicitadas por los usua- rios de computadora, el sistema operativo tiene que ser capaz de comunicarse con dichos usuarios. La parte de un sistema operativo que se encarga de gestio- nar esa comunicación se suele denominar interfaz de usuario. Las antiguas interfaces de usuario, conocidas como shell, se comunicaban con los usuarios mediante mensajes de texto , utilizando un teclado y la pantalla de un monitor. Los sistemas más modernas realizan esta tarea por medio de una interfaz grá- fica de usuario (GUI, Graphical User Interface) en la que los objetos que hay que manipular, como por ejemplo archivos y programas, se representan de manera pictórica en la pantalla mediante iconos. Estos sistemas permiten a los usuarios ejecutar comandos mediante varios dispositivos de entrada comunes. Por ejemplo, puede utilizarse un ratón de computadora con uno o más botones, para hacer clic sobre un icono o para arrastrar iconos por la pantalla. En lugar de un ratón, los diseñadores gráficos utilizan a menudo lápices o dispositivos apuntadores de propósito especial; esos dispositivos se emplean también en diversos tipos de computadoras de mano. Más recientemente, los avances experimentados en el campo de las pantallas táctiles de granularidad fina han permitido que los usuarios puedan manipular los iconos directamente con los
139 3.2 Arquitectura de un sistema operativo
dedos. Mientras que las interfaces gráficas de usuario actuales utilizan sistemas de proyección de imagen bidimensionales, en la actualidad se están investi- gando interfaces tridimensionales que permiten a los usuarios comunicarse con las computadoras por medio de sistemas de proyección 3D, dispositivos sensores táctiles y sistemas de reproducción de audio con sonido envolvente.
Aunque la interfaz de usuario de un sistema operativo desempeña un papel importante a la hora de establecer la funcionalidad de una máquina, esa inter- faz actúa simplemente como un intermediario entre el usuario de la computa- dora y el verdadero corazón del sistema operativo (Figura 3.4). Esta distinción entre la interfaz de usuario y las partes internas del sistema operativo se ve enfatizada por el hecho de que algunos sistemas operativos permiten al usuario elegir entre distintas interfaces, con el fin de conseguir el tipo de interacción más confortable para ese usuario concreto. Por ejemplo, los usuarios del sis- tema operativo UNIX pueden elegir una shell entre los distintos disponibles, incluyendo la shell Bourne, la shell C y la shell Korn, así como una GUI deno- minada X11. Las primeras versiones de Microsoft Windows eran un programa de aplicación GUI que podía cargarse desde la shell de comandos del sistema operativo MS-DOS. La shell DOS cmd.exe puede todavía encontrarse como pro- grama de utilidad en las últimas versiones de Windows, aunque los usuarios menos expertos casi nunca van a necesitar dicha interfaz. De forma similar, el sistema operativo OS X de Apple conserva la shell de utilidad Terminal que se remonta a los antecesores UNIX de dicho sistema operativo.
Un componente importante de las interfaces gráficas de usuario actuales es el administrador de ventanas, que asigna bloques de espacio en la pantalla, denominados ventanas, y controla qué aplicación está asociada con cada ven- tana. Cuando una aplicación desea mostrar algo en la pantalla, se lo notifica al administrador de ventanas y este coloca la imagen deseada en la ventana asig- nada a dicha aplicación. Cuando se hace clic con el ratón, es el administrador de ventanas el que calcula la ubicación del ratón en la pantalla y notifica a la aplicación apropiada cuál ha sido la acción efectuada con el ratón. Los adminis- tradores de ventanas son responsables de lo que suele denominarse “estilo” de
Linux
Para el entusiasta de las computadoras que desee experimentar con los componentes inter- nos de un sistema operativo, existe un sistema denominado Linux. Linux es un sistema ope- rativo originalmente diseñado por Linus Torvalds cuando era estudiante en la Universidad de Helsinki. Es un producto de dominio público y disponible de forma gratuita junto con su código fuente (véase el Capítulo 6) y su correspondiente documentación. Puesto que está disponible de forma gratuita en formato de código fuente, se ha hecho muy popular entre los aficionados a las computadoras, los estudiantes de sistemas operativos y los programadores en general. Además, Linux está considerado como uno de los sistemas operativos más fia- bles disponibles en la actualidad. Por esta razón, diversas empresas empaquetan y comer- cializan hoy día versiones de Linux en una forma fácilmente utilizable, y estos productos están ahora planteando todo un desafío a los sistemas operativos comerciales más implan- tados en el mercado. Puede obtener más información acerca de Linux en el sitio web http: //www.linux.org.
una interfaz gráfica de usuario y la mayoría de los administradores de ventanas ofrecen una gama de opciones configurables. Los usuarios de Linux pueden incluso seleccionar qué administrador de ventanas desean utilizar, siendo las opciones más populares KDE y Gnome.
Por contraste con la interfaz de usuario de un sistema operativo, la parte interna de ese sistema se denomina núcleo. El núcleo de un sistema operativo contiene aquellos componentes software que realizan las funciones más básicas requeridas por el hardware de la computadora. Una de dichas unidades es el administrador de archivos, cuya tarea consiste en coordinar el uso de los dis- positivos de almacenamiento masivo de la máquina. Para ser más precisos, el administrador de archivos mantiene un registro de todos los archivos que se encuentran en el almacenamiento masivo, incluyéndose en ese registro datos relativos a la ubicación de cada archivo, qué usuarios tienen acceso a los distin- tos archivos y qué partes del almacenamiento masivo están disponibles para nuevos archivos o para ampliaciones de los ya existentes. Esos registros se man- tienen en el medio de almacenamiento concreto donde se ubican los archivos relacionados, de modo que cada vez que dicho medio pasa a estar en línea, el administrador de archivos puede leer esos registros y así saber lo que hay alma- cenado en dicho medio concreto.
Para comodidad de los usuarios de la máquina, la mayoría de los adminis- tradores de archivos permiten agrupar los archivos en una serie de conjuntos; cada uno de esos conjuntos recibe el nombre de directorio o carpeta. Esto per- mite al usuario organizar sus archivos de acuerdo con el propósito que tengan, colocando los archivos relacionados en un mismo directorio. Además, al permi- tir a los directorios contener otros directorios, que se denominan subdirectorios, puede construirse una organización jerárquica de archivos. Por ejemplo, un usuario puede crear un directorio denominado MisDatos que contenga subdi- rectorios denominados DatosFinancieros, DatosMedicosy DatosDomesticos.
Dentro de cada uno de estos subdirectorios podría haber archivos que se corres- pondieran con esa categoría concreta. (Los usuarios de un sistema operativo
141 3.2 Arquitectura de un sistema operativo
Usuario Usuario Usuario Usuario Núcleo Interfaz de usuario Usuario
Figura 3.4 La interfaz de usuario actúa como intermediario entre los usuarios y el núcleo del sistema operativo.
Windows pueden pedir al administrador de archivos que muestre la colección actual de carpetas ejecutando el programa de utilidad Explorador de Windows.) Una cadena de directorios incluidos dentro de otros directorios se deno- mina ruta de directorio. Las rutas de directorios suelen expresarse enume- rando los directorios que las componen separados por barras inclinadas. Por ejemplo, animales/prehistoricos/dinosaurios representaría la ruta que comienza en el directorio denominado animales, que pasa a través de su sub-
directorio de nombre prehistoricos y que termina en el subdirectorio
dinosaurios. (Para los usuarios de Windows, las barras inclinadas que se inclu- yen dentro de las rutas están invertidas, como por ejemplo en animales\ prehistoricos\dinosaurios.)
Cualquier acceso a un archivo por parte de otras unidades software debe ser autorizado por el administrador de archivos. El proceso comienza solici- tando al administrador de archivos que conceda acceso al archivo, para lo cual se emplea un procedimiento conocido como apertura del archivo. Si el admi- nistrador de archivos aprueba el acceso solicitado, proporciona la información necesaria para localizar y manipular el archivo.
Otro componente del núcleo es un conjunto de controladores de disposi- tivo, que son las unidades software que se comunican con las tarjetas controla- doras (o en ocasiones directamente con los dispositivos periféricos) para llevar a cabo operaciones con los dispositivos periféricos conectados a la máquina. Cada controlador de dispositivo está diseñado de forma específica para su tipo de dispositivo concreto (como por ejemplo una impresora, una unidad de disco o un monitor) y traduce las solicitudes genéricas en las tareas más técnicas requeridas por el dispositivo asignado a dicho controlador. Por ejemplo, un controlador de dispositivo para una impresora contiene el software necesario para leer y decodificar la palabra de estado de esa impresora concreta, así como para coordinar el resto de los detalles del proceso de impresión. De ese modo, otros componentes software no tienen que ocuparse de todos esos detalles téc- nicos para imprimir un archivo. En lugar de ello, los restantes componentes pueden simplemente confiar en el software controlador del dispositivo a la hora de imprimir el archivo y dejar que ese controlador se encargue de los deta- lles. De esta forma, el diseño de las restantes unidades software puede ser inde- pendiente de las características distintivas de los distintos dispositivos concretos. El resultado es un sistema operativo genérico que puede personali- zarse para emplear determinados dispositivos periféricos, instalando simple- mente los controladores de dispositivo apropiados.
Otro componente más del núcleo de un sistema operativo es el gestor de la memoria, que se encarga de la tarea de coordinar el uso de la memoria prin- cipal de la máquina. Esta tarea es mínima en aquellos entornos en los que a la computadora se le pide que realice una única tarea cada vez. En estos casos, el programa encargado de realizar la tarea actual, se coloca en una posición pre- determinada de la memoria principal, se ejecuta y luego se sustituye por el pro- grama encargado de efectuar la tarea siguiente. Sin embargo, en los entornos multiusuario o multitarea en los que se le pide a la computadora que satisfaga las necesidades de muchos usuarios o programas al mismo tiempo, el trabajo del gestor de la memoria es mucho más intenso. En estos casos, muchos pro- gramas y bloques de datos tienen que coexistir en la memoria principal de manera concurrente. Por tanto, el gestor de memoria debe localizar y asignar
espacio de memoria para los distintos programas y asegurarse de que las accio- nes que cada programa lleva a cabo están restringidas al espacio que se le ha asignado. Además, a medida que van variando las necesidades de los diferentes programas, el gestor de la memoria debe controlar qué áreas de memoria dejan de estar ocupadas.
El trabajo del gestor de la memoria se complica más aún cuando el espacio total de memoria principal requerido por los distintos programas es superior al espacio disponible realmente en la computadora. En este caso, el gestor de memoria puede crear la ilusión de que existe espacio de memoria adicional, intercambiando los programas y los datos una y otra vez entre la memoria prin- cipal y el almacenamiento masivo (una técnica que se conoce con el nombre de paginación). Por ejemplo, suponga que hace falta una memoria principal de 8GB pero que la computadora solo dispone de 4GB. Para crear la ilusión de que existe un espacio de memoria de mayor tamaño, el gestor de la memoria reserva 4GB de espacio de almacenamiento en un disco magnético. Allí, escribe los patrones de bits que estarían almacenados en la memoria principal si esta tuviera realmente una capacidad de 8GB. Los datos se dividen en unidades de tamaño uniforme denominadas páginas, que suelen tener unos pocos KB de tamaño. Entonces, el gestor de la memoria mueve estas páginas entre la memo- ria principal y el almacenamiento masivo según va siendo necesario, asegurán- dose de que siempre estén presentes en los 4GB de memoria principal las páginas que verdaderamente se necesitan en cada momento concreto. El resultado es que la computadora es capaz de funcionar como si tuviera real- mente 8GB de memoria principal. Este espacio de memoria “ficticio” de gran tamaño que se crea utilizando la técnica de paginación se conoce con el nom- bre de memoria virtual.
Otros dos componentes adicionales dentro del núcleo de un sistema opera- tivo son el planificador y el despachador, que estudiaremos en la siguiente sección. Por ahora, simplemente diremos que en un sistema de multiprogra- mación, el planificador determina qué actividades son las que pueden ejecu- tarse, mientras que el despachador controla la asignación de tiempo a esas actividades.