Sistemas operativos y su funcionamiento: Linux

 

LINUX

 


 

Historia

 

Linux comenzó como una variante de la Unix para la arquitectura Intel del PC IBM (80386). El creador de la versión inicial fue el estudiante de informática Linus Torvalds. Esta versión fue distribuida en internet en 1991 y desde entonces diferentes personas, bajo el control de Torvalds, han contribuido al desarrollo de Linux, hasta llegar a ser un Sistemas Operativo completo, y una sólida alternativa a los sistemas de UNIX hasta entonces tradicionales. Linux es de código abierto y  puede ejecutarse en la mayoría de las plataformas, incluyendo Intel Pentium, Intel Itanium y PowerPc de Motorola/IBM.

Un punto importante en el éxito de Linux, lo ha desempeñado Free Software Foundation (FSF) mediante la ayuda brindada en la disponibilidad de los paquetes de software libre. Esta fundación, que brindó un software estable y de alta calidad, sumado al proyecto GNU que proporciona herramientas para desarrolladores de software fueron lo que dieron el nacimiento del núcleo de Linux, desarrolado por Torvalds. Todas las distribuciones de hoy en día son el resultado del esfuerzo de Torvalds y muchos más colaboradores.

Linux ha resultado ser competente inclusive en al ámbito corporativo, gracias a la calidad de su núcleo como al software libre; es también muy modular y configurable, por lo que en ocasiones es óptimo en cuanto a mejorar rendimiento se refiere.

 

Estructura Modular

La mayoría de los núcleos de Linux son monolíticos, es decir, que un núcleo incluye toda la funcionalidad del sistema operativo en un gran bloque de código que ejecuta como un único proceso con un único espacio de direccionamiento.
Una desventaja de usar esto, es cuando se hacen cambios sobre cualquier porción de un sistema operativo, todos los módulos y rutinas deben volverse a enlazar y reinstalar, y el sistema debe reiniciarse. Por lo tanto las modificaciones son algo difíciles.

A pesar de no usar la técnica de micronúcleo, Linux logra muchas de sus ventajas gracias a su arquitectura particular. Su estructura es como una colección de módulos, de los que algunos pueden cargarse y descargarse automáticamente bajo demanda. A estos bloques se les llama módulos cargables (GOYE99). Un módulo es un fichero cuyo código puede enlazarse y desenlazarse con el núcleo en tiempo real. Estos módulos emplean funciones específicas, y no se ejecuta como su propio proceso o hilo, en su lugar se ejecuta en modo núcleo en nombre del proceso actual.

Siendo así, que Linux, gracias a su estructura modular, a pesar de que puede considerarse como monolítico, elimina varias dificultades para desarrollar y evolucionar el núcleo.

 

Las características de los módulos son:

·         Enlace dinámico: Un módulo de nucleo puede cargarse y enlazarse al núcleo muentras el núcleo está en memoria y ejecutándose. También puede desenlazarse y elminarse de la memoria en cualquier momento.

  • ·         Módulos apilables: Los módulos se gestionan como una jerarquía. Los módulos individuales sirven como bibliotecas cuando los módulos cliente los referencian desde los lato de la jerarquía, y actúan como clientes cuando se referencian de la parte de abajo.
  • Con módulos apilables, se pueden definir dependencias entre los módulos. Esto tiene las ventajas que el  código  común  para  un  conjunto  de  módulos  similares  (por  ejemplo,  controladores  para hardware similar) se puede mover a un único módulo, reduciendo la replicación. Y También el asegurar que los módulos necesarios estén presentes, impidiendo descargar un módulo del cual otros módulos dependen y cargando algunos módulos adicio-nalmente requeridos cuando se carga un nuevo módulo.

 

Ejemplo de las estructuras utilizadas en Linux

A continuación, se muestran en la figura la lista de los módulos del núcleo que existen después de que sólo dos módulos han sido cargados: FAT y VFAT. Los módulos se definen por dos tablas, la tabla de módulo y la de símbolo.

La tabla de módulos incluye los siguientes elementos:

·         •*next. Puntero al siguiente módulo. Todos los módulos se organizan en una lista enlazada. Lalista comienza con un pseudomódulo (no mostrado en la Figura 2.17).

·         •*name. Puntero al nombre del módulo.

·         •size. Tamaño del módulo en páginas de memoria

·         •usecount. Contador del uso del módulo. El contador se incrementa cuando una operación rela-cionada con las funciones del módulo comienza y se decrementa cuando la operación finaliza.

·         •flags. Opciones del módulo.

·         •nsyms. Número de símbolos exportados.

·         •ndeps. Número de módulos referenciados.

·         •*syms. Puntero a la tabla de símbolos de este módulo.

·         •*deps. Puntero a la lista de módulos referenciados por este módulo.

·         •*refs. Puntero a la lista de módulos que usa este módulo

La  tabla  de  símbolos  define  aquellos  símbolos  controlados  por  este  módulo  que  se  utilizan  en otros sitios.


 

Componentes del núcleo

 

En la imagen siguiente se presentan los principales componentes del núcleo Linux . En ella se ven varios procesos ejecutando encima del núcleo. Cada caja indica un proceso separado, mientras que cada línea curvada con una cabeza de flecha representa un hilo de ejecución.El núcleo mismo está compuesto por una colección de componentes que interaccionan, usandoflechas para indicar las principales interacciones. También se muestra el hardware subyacente comoun conjunto de componentes utilizando flechas para indicar qué componentes del núcleo utilizan ocontrolan qué componentes del hardware.



 
  •  Señales. El núcleo utiliza las señales para llamar a un proceso. Por ejemplo, las señales se uti-lizan para notificar ciertos fallos a un proceso como por ejemplo, la división por cero. La Ta-bla 2.6 da unos pocos ejemplos de señales. 
  • Llamadas al sistema.La llamada al sistema es la forma en la cual un proceso requiere unservicio de núcleo específico. Hay varios cientos de llamadas al sistema, que pueden agrupar-se básicamente en seis categorías: sistema de ficheros, proceso, planificación, comunicaciónentre procesos, socket(red) y misceláneos. 
  • Procesos y planificador. Crea, gestiona y planifica procesos. 
  • Memoria virtual.Asigna y gestiona la memoria virtual para los procesos. 
  • Sistemas de ficheros. Proporciona un espacio de nombres global y jerárquico para los fiche-ros, directorios y otros objetos relacionados con los ficheros. Además, proporciona las funcio-nes del sistema de ficheros. 
  • Protocolos de red.Da soporte a la interfaz Socketpara los usuarios, utilizando la pila de pro-tocolos TCP/IP. 
  • Controladores de dispositivo tipo carácter. Gestiona los dispositivos que requiere el núcleopara enviar o recibir datos un byte cada vez, como los terminales, los módems y las impresoras. 
  • Controladores de dispositivo tipo bloque. Gestiona dispositivos que leen y escriben datos enbloques, tal como varias formas de memoria secundaria (discos magnéticos, CDROM, etc.). 
  • Controladores de dispositivo de red.Gestiona las tarjetas de interfaz de red y los puertosde comunicación que permiten las conexiones a la red, tal como los puentes y los encami-nadores.
  • Traps y fallos. Gestiona los trapsy fallos generados por la CPU, como los fallos de memoria. 
  • Memoria física.Gestiona el conjunto de marcos de páginas de memoria real y asigna las pá-ginas de memoria virtual. 
  • Interrupciones. Gestiona las interrupciones de los dispositivos periféricos.  

Comentarios

Entradas más populares de este blog

Sistemas operativos y su funcionamiento: Windows

Sistemas operativos y su funcionamiento: Sistemas Unix modernos