Está en la página 1de 7

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.

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.

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.

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.

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.

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.

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.

También podría gustarte