Está en la página 1de 7

1

ESTUDIO DE CASOS: LINUX



En este captulo se estudia el sistema operativo Linux. Se trata de un sistema operativo de libre distribucin
que proporciona una interfaz POSIX. Actualmente Linux es ampliamente utilizado y se ha convertido en uno
de los pocos sistemas que puede competir hasta cierto punto con los sistemas Windows por lograr una cuota
del mercado de los sistemas operativos. De hecho, no slo se trata de dos sistemas operativos diferentes sino
de dos maneras distintas de entender la informtica.

Windows es un sistema cerrado y "secreto" creado por una gran multinacional, Microsoft, cuyo nico
objetivo es vender su producto sea como sea. Linux es un sistema abierto y pblico que inicialmente surgi de
un proyecto personal sin nimo de lucro, pero que se ha convertido en la actualidad en un sistema
desarrollado conjuntamente por gente de todo el mundo gracias al auge de Internet.

En este captulo se da una visin general de Linux. La exposicin se organiza en las siguientes secciones:
Historia
Caractersticas generales y arquitectura
Gestin de procesos
Gestin de memoria
Entrada/salida
Sistema de archivos

1 HISTORIA DE LINUX
El origen de Linux se encuentra en el sistema operativo MINIX. MINIX fue desarrollado por Andrew S.
Tanenbaum con el objetivo de que sirviera de apoyo para la enseanza de sistemas operativos. De hecho, en
su clsico libro "Operating Systems: Design and Implementation" [Tanenbaum 1987], se utilizaba este
sistema operativo para explicar los diferentes conceptos de esta materia, incluyndose adems en un apndice
un listado completo de su cdigo escrito en lenguaje C.

Adems de por su carcter pedaggico, MINIX se caracterizaba por tener una estructura basada en un
microkernel. El autor intentaba demostrar al crear MINIX que se poda construir un sistema operativo ms
sencillo y fiable, pero a la vez eficiente, usando este tipo de organizacin, que era novedosa en aquel
momento. Algunas otras caractersticas positivas de MINIX eran las siguientes:

Ofreca una interfaz basada en la de UNIX Versin 7. El grupo de trabajo de POSIX todava no
haba terminado su labor en esa poca.
Tena un tamao relativamente pequeo. Constaba de aproximadamente 12.000 lneas de cdigo.
Poda trabajar en equipos que disponan de unos recursos hardware muy limitados. De hecho, incluso
poda usarse en mquinas que no disponan de disco duro.

Sin embargo, tambin presentaba algunas deficiencias y limitaciones.

La gestin de memoria era muy primitiva. No haba ni memoria virtual ni intercambio. Adems, no
se aprovechaba adecuadamente el mecanismo de paginacin del procesador. El autor justificaba esta
limitacin argumentando que la inclusin de estos mecanismos complicara considerablemente el
cdigo del sistema operativo. Aunque esta opinin es razonable desde el punto de vista pedaggico,
tena como consecuencia que MINIX no se utilizara como un sistema para el desarrollo de
aplicaciones de cierta entidad.
Por simplicidad, algunas partes del sistema operativo, como por ejemplo el sistema de archivos, no
eran concurrentes lo que limitaba considerablemente el rendimiento del sistema.

2
A pesar de estos defectos, MINIX atrajo la atencin de muchos usuarios de todo el mundo, que usaban el
grupo de noticias comp.os.minix como punto de encuentro. Algunos de estos usuarios se ofrecan a
mejorar partes del sistema o a incluir nuevas funciones al mismo. Sin embargo, el autor siempre fue bastante
reacio a estas ofertas. Entre los interesados en MINIX se encontraba un estudiante finlands llamado Linus
Torvalds. Fue en el ao 1990 cuando este estudiante envi un mensaje a este grupo de noticias comentando
que por curiosidad y ganas de ampliar sus conocimientos estaba desarrollando un nuevo sistema operativo
tomando como base MINIX. Se estaba produciendo el humilde nacimiento de Linux cuya primera versin
(numerada como 0.01) vio la luz a mediados del ao 1991.

Es importante recalcar que en su concepcin inicial Linux tomaba prestadas numerosas caractersticas de
MINIX (por ejemplo, el sistema de archivos). De hecho, Linux se desarroll usando como plataforma de
trabajo MINIX y las primeras versiones de Linux no eran autnomas sino que tenan que arrancarse desde
MINIX.

Sin embargo, a pesar de esta herencia inicial, MINIX y Linux son radicalmente diferentes. Por un lado, Linux
solventa muchas de las deficiencias de MINIX como, por ejemplo, la carencia de memoria virtual. Estas
mejoras permiten que se trate de un sistema adecuado para trabajar de manera profesional, no limitndose su
uso a un entorno acadmico. Pero la diferencia ms importante entre ellos est en su organizacin interna.
Mientras que MINIX tiene una estructura moderna basada en un microkernel, Linux posee una estructura
monoltica ms clsica. Este diseo conservador tuvo como consecuencia que el autor de MINIX no diera el
visto bueno a Linux ya que consideraba que este sistema supona un paso atrs en la evolucin de los sistemas
operativos.

Desde su lanzamiento pblico en 1991, Linux ha ido evolucionando e incorporando nuevas caractersticas.
Adems, se ha transportado a otros procesadores como SPARC, Alpha y MIPS. En la actualidad es un sistema
con unas caractersticas y prestaciones comparables a las de cualquier sistema operativo comercial.

Puesto que en esta seccin se ha presentado la historia de Linux, parece el lugar adecuado para explicar cul
es el convenio usado para numerar las sucesivas versiones del sistema. El nmero de la versin contiene un
nmero primario y uno secundario separados por un punto (por ejemplo, versin 2.2). Un incremento en el
nmero primario corresponde con una nueva versin que incluye cambios significativos en el sistema. En el
caso de una modificacin de menor impacto, slo se modifica el nmero de versin secundario. Adems, un
nmero secundario de versin que sea impar (como, por ejemplo, la versin 2.1) indica que se trata de una
versin inestable en la que se han incluido nuevas caractersticas que todava hay que probar y depurar.
Evidentemente, un usuario normal debera instalarse una versin con un nmero secundario par.

2 CARACTERSTICAS Y ESTRUCTURA DE LINUX
Linux es un sistema UNIX y, por tanto, posee las caractersticas tpicas de los sistemas UNIX. Se trata de un
sistema multiusuario y multitarea de propsito general. Algunas de sus caractersticas especficas ms
relevantes son las siguientes:

Proporciona una interfaz POSIX.
Tiene un cdigo independiente del procesador en la medida de lo posible. Aunque inicialmente se
desarroll pera procesadores Intel, se ha transportado a otras arquitecturas con un esfuerzo
relativamente pequeo.
Puede adaptarse a mquinas de muy diversas caractersticas. Como el desarrollo inicial se realiz en
mquinas con recursos limitados, ha resultado un sistema que puede trabajar en mquinas con
prestaciones muy diferentes.
Permite incluir de forma dinmica nuevas funcionalidades al ncleo del sistema operativo gracias al
mecanismo de los mdulos.
Proporciona soporte para una gran variedad de tipos de sistemas de archivos, entre ellos los
utilizados en Windows. Tambin es capaz de manejar distintos formatos de archivos ejecutables.
3
Proporciona soporte para multiprocesadores utilizando un esquema de multiproceso simtrico. Para
aprovechar al mximo el paralelismo del hardware, se ha ido modificando progresivamente el ncleo
con el objetivo de aumentar su concurrencia interna.

En cuanto a la estructura de Linux, como se coment previamente, tiene una organizacin monoltica al igual
que ocurre con la mayora de las implementaciones de UNIX. A pesar de este carcter monoltico, el ncleo
no es algo esttico y cerrado sino que se pueden aadir y quitar mdulos de cdigo en tiempo de ejecucin. Se
trata de un mecanismo similar al de las bibliotecas dinmicas pero aplicado al propio sistema operativo. Se
pueden aadir mdulos que correspondan con nuevos tipos de sistemas de archivos, nuevos manejadores de
dispositivos o gestores de nuevos formatos de ejecutables.

Un sistema Linux completo no slo est formado por el ncleo monoltico sino tambin incluye programas
del sistema (como, por ejemplo, demonios) y bibliotecas del sistema.

Debido a las dificultades que hay para instalar y configurar el sistema, existen diversas distribuciones de
Linux que incluyen el ncleo, los programas y bibliotecas del sistema, as como un conjunto de herramientas
de instalacin y configuracin que facilitan considerablemente esta ardua labor. Hay distribuciones tanto de
carcter comercial como gratuitas. Algunas de las distribuciones ms populares son Slackware, Debian, Suse
y Red Hat.

3 GESTIN DE PROCESOS
La gestin de procesos en Linux es bsicamente igual que en cualquier otra variedad de UNIX. Un aspecto
original de Linux es el servicio clone que es una extensin del clsico fork.

Este nuevo servicio permite crear un proceso que comparta con el padre su mapa de memoria, sus rutinas de
manejo de seales y sus descriptores de archivos. Aunque Linux no implementa threads en el ncleo, se
pueden construir bibliotecas de threads usando este nuevo servicio.

En cuanto a la sincronizacin dentro del ncleo, siguiendo la tradicin de UNIX, Linux no permite que haya
llamadas concurrentes activas dentro del sistema operativo. As, si se produce un evento que causa un cambio
de proceso mientras se est ejecutando una llamada al sistema (por ejemplo, una interrupcin de reloj), el
cambio se difiere hasta que la llamada termina o se bloquea.

Para evitar las condiciones de carrera entre la ejecucin de una llamada y el tratamiento de una interrupcin,
se prohben las interrupciones en pequeas zonas del cdigo del sistema.

Puesto que el cdigo de una rutina de interrupcin ejecuta con una prioridad alta bloqueando el tratamiento de
las interrupciones, es importante que estas rutinas sean muy cortas. Para ayudar a lograr este objetivo, Linux
ofrece un mecanismo que permite dividir las operaciones asociadas a una interrupcin en dos partes:

Las operaciones de carcter ms urgente se ejecutan en el entorno de la rutina de interrupcin,
denominada mitad superior en la nomenclatura de Linux.
Las operaciones menos urgentes las ejecuta una rutina del ncleo que tiene una prioridad inferior a la
de los dispositivos. Esta rutina se denomina en Linux mitad inferior y durante su ejecucin no
estarn bloqueadas las interrupciones de otros dispositivos. La propia mitad superior se encarga de
fijar un determinado valor en una estructura de datos para indicar que la mitad inferior est activada.
Justo antes de retornar a modo usuario, el sistema operativo comprueba dicha estructura y si
encuentra que hay alguna una mitad inferior activada, la ejecutar.

La figura 1 muestra cules son los niveles de prioridad de las diversas partes del ncleo. Ntese que slo se
ejecutar una rutina de un determinado nivel si no est activa ninguna rutina de un nivel superior.

4

Figura 1 Niveles de prioridad dentro del ncleo de Linux

En cuanto a la planificacin, Linux soporta tres clases de planificacin: un algoritmo de tiempo compartido y
dos algoritmos de planificacin de tiempo real que se corresponden con los definidos por POSIX.

El servicio sched_setscheduler permite definir la clase de planificacin del proceso que la invoca. Esta
llamada slo puede hacerla un proceso privilegiado. Cada proceso de tiempo real tiene asociada una prioridad
y un tipo de planificacin que puede ser FIFO o Round-Robin. El planificador selecciona en cada momento el
proceso listo para ejecutar que tenga mayor prioridad. Si el proceso es de tipo FIFO seguir ejecutando hasta
que se bloquee. Si es de tipo Round-Robin, cuando termine su rodaja el proceso pasar al final de la cola de
procesos listos para ejecutar de su misma prioridad.

Los procesos de tiempo compartido slo pueden ejecutar cuando no hay ningn proceso de tiempo real listo
para ejecutar. El algoritmo de planificacin para este tipo de procesos intenta conjugar la prioridad del
proceso con su perfil de ejecucin, favoreciendo a los procesos que realizan ms operaciones de
entrada/salida. A continuacin se describe este algoritmo.

Todo proceso tiene asociada una prioridad base. Inicialmente la prioridad del proceso es igual a su prioridad
base. Cada vez que se produce una interrupcin de reloj se resta una unidad a la prioridad del proceso que
estaba ejecutando. El algoritmo de planificacin est basado en la prioridad del proceso y tiene carcter
exclusivo: el planificador elige el proceso listo para ejecutar que tenga mayor prioridad.

Cuando se produce una situacin en la que todos los procesos listos para ejecutar tienen una prioridad igual a
cero (todos ellos han usado el procesador un tiempo suficiente para que su prioridad haya cado a 0), se
produce un reajuste de las prioridades de todos los procesos sea cul sea su estado. la nueva prioridad se
calcula dividiendo por 2 la actual y sumando la prioridad base (prioridad = prioridad/2 +
prioridad base). Ntese que los procesos listos para ejecutar simplemente recuperan su prioridad base
ya que su prioridad actual es igual a 0. Sin embargo, los procesos bloqueados obtienen una nueva prioridad
mayor que la base puesto que su actual prioridad es mayor que cero. Se trata de una frmula de tipo
exponencial. Con ella un proceso que estuviese bloqueado mucho tiempo puede llegar a tener una prioridad
con un valor del doble de la prioridad base.

5
4 GESTIN DE MEMORIA
Linux tiene un sistema de memoria que incluye todas las caractersticas habituales en los sistemas modernos.
Estas caractersticas ya fueron discutidas en el captulo dedicado a este tema, por lo que en esta seccin se
presentan aquellos aspectos especficos de Linux:

Se utiliza un modelo de memoria independiente del procesador. Utiliza un esquema de paginacin
con tres niveles. Existe una capa de software de bajo nivel que se encarga de adaptar este modelo
abstracto al hardware de gestin de memoria real.
Permite utilizar tanto dispositivos como archivos para soporte de la memoria secundaria.
Se utiliza una versin modificada del algoritmo del reloj como algoritmo de reemplazo.
Gestiona la memoria dinmica del propio sistema operativo usando un algoritmo inspirado en el
sistema buddy.

5 ENTRADA/SALIDA
La entrada/salida en Linux es muy similar a la de cualquier otro sistema UNIX. Se distinguen, por tanto, dos
tipos de dispositivos: dispositivos de bloques y dispositivos de caracteres.

Como el resto de los sistemas UNIX, se utiliza una cach comn para todos los dispositivos de bloques. El
tamao de la cach es dinmico y crece de acuerdo a las necesidades de memoria del resto del sistema. Para
gestionarla se usa bsicamente una poltica de reemplazo LRU. En las ltimas versiones esta cach trabaja
coordinadamente con la utilizada por el gestor de memoria.

En cuanto al acceso a los discos, se utiliza el algoritmo del ascensor con un nico sentido de servicio.

Siguiendo el modelo de UNIX, en Linux los usuarios ven los dispositivos como archivos y utilizan los
servicios destinados a trabajar con archivos para acceder a los dispositivos.

La red, sin embargo, es un dispositivo que tiene un tratamiento un poco diferente. El usuario no puede acceder
a este dispositivo de la misma manera que a un archivo. La parte del sistema operativo que trata la red est
dividida en tres niveles:

En el nivel inferior est el manejador del dispositivo al que el usuario no puede acceder
directamente.
En el nivel intermedio est el software que implementa la pila de protocolos (por ejemplo, TCP e IP).
En el nivel superior est la interfaz del programador que corresponde con la de los sockets definidos
en el UNIX BSD.

6 SISTEMA DE ARCHIVOS
Linux da soporte a una gran variedad de tipos de sistemas de archivos entre los que se incluyen los distintos
sistemas de archivos de Windows y de otros sistemas UNIX. Adems, cualquier usuario puede programar un
manejador de un nuevo tipo de sistema de archivos e incluirlo en el sistema como un mdulo.

Esta coexistencia de distintos tipos de sistemas de archivos la posibilita el VFS (Virtual File System, Sistema
Virtual de Archivos) presente en la mayora de los sistemas UNIX actuales y suficientemente analizado en el
captulo dedicado a los archivos.

Aunque admite muy diferentes tipos de sistemas de archivos, Linux tiene sus propio sistema de archivos que
se denomina ext2fs. Este sistema evolucion desde el sistema de archivos de MINIX. Se le fueron
aadiendo nuevas caractersticas al sistema de archivos de MINIX hasta llegar al sistema extfs.
6
Posteriormente, se redise dando lugar al ext2fs actual. Se trata de un sistema basado en el FFS (Fast File
System, Sistema de Archivos Rpido) del UNIX BSD, que ya se estudi adecuadamente en el captulo
dedicado a los archivos.

Merece mencin aparte un tipo de sistema de archivos muy especial: el sistema de archivos proc. Este
sistema de archivos no tiene soporte en ningn dispositivo. Su objetivo es poner a disposicin del usuario
datos del estado del sistema en la forma de archivos. Esta idea no es original de Linux ya que casi todos los
sistemas UNIX la incluyen. Sin embargo, Linux se caracteriza por ofrecer ms informacin del sistema que el
resto de variedades de UNIX. En este sistema de archivos se puede acceder a informacin general sobre
caractersticas y estadsticas del sistema, as como a informacin sobre los distintos procesos existentes.

La figura 2 muestra cmo se relacionan las distintas partes del sistema de archivos.


Figura 2 Niveles del sistema de archivos

7 PUNTOS A RECORDAR
El origen del Linux est en MINIX que es un sistema operativo de carcter pedaggico basado en un
microkernel.
Linux supera muchas de las limitaciones de MINIX y tiene una organizacin monoltica ms
convencional.
Linux comenz en 1991 como proyecto personal de Linus Torvalds. Gracias al auge de Internet, han
colaborado numerosas personas en su desarrollo.
Proporciona una interfaz POSIX.
Est diseado para facilitar su transporte a distintos procesadores.
Puede ejecutar en mquinas de muy distintas prestaciones.
Da soporte a una gran variedad de tipos de sistemas de archivos.
Proporciona soporte para un esquema de multiproceso simtrico.
7
La gestin de procesos en Linux es muy similar a la realizada en otros sistemas UNIX.
El ncleo de Linux no es reentrante.
El tratamiento de un interrupcin puede dividirse en una mitad superior, que ejecuta con alta
prioridad, y una mitad inferior menos prioritaria.
Linux soporta las clases de planificacin de tiempo real definidas en POSIX.
La planificacin de procesos de tiempo compartido intenta conjugar la prioridad del proceso y su
perfil de ejecucin.
La gestin de memoria en Linux incluye todas las caractersticas presentes en cualquier sistema
operativo moderno.
La entrada/salida es similar a la existente en cualquier otro sistema UNIX.
Linux da soporte a una gran variedad de tipos de sistemas de archivos gracias al VFS.
El sistema de archivos nativo de Linux es ext2fs basado en el FFS.
El sistema de archivos proc ofrece mucha informacin sobre el propio sistema y los procesos
existentes en el mismo.

Bibliografa

[Beck 1996] M. Beck, H. Bohme, M. Dziadzka, U. Kunitz, R. Magnus y D. Verworner, Linux Kernel
Internals, Addison-Wesley, 1996.
[Cornes 1997] P. Cornes, The Linux A-Z, Prentice-Hall, 1997.
[Silberschatz 1998] A. Silberschatz and P.B. Galvin, Operating System Concepts, 5th ed., Addison-Wesley,
1998.
[Tanenbaum 1987] A. S. Tanenbaum, Operating Systems: Design and Implementation, Primera edicin,
Prentice-Hall, 1987.
[Tanenbaum 1997] A. S. Tanenbaum y A. Woodhull, Operating Systems: Design and Implementation,
Segunda edicin, Prentice Hall, 1997.