Una distribución Linux es una distribución de software basada en el núcleo Linux que incluye determinados paquetes de software para satisfacer las necesidades de un grupo específico de usuarios, dando así origen a ediciones domésticas, empresariales y para servidores.
Además del núcleo Linux, las distribuciones incluyen habitualmente las bibliotecas y herramientas del proyecto GNU y el sistema de ventanas X Window System. Dependiendo del tipo de usuarios a los que la distribución esté dirigida se incluye también otro tipo de software como procesadores de texto, hoja de cálculo, reproductores multimedia, herramientas administrativas, etcétera.
Existen distribuciones que están soportadas comercialmente, como Fedora (Red Hat), openSUSE (Novell), Ubuntu (Canonical Ltd.), Mandriva, y distribuciones mantenidas por la comunidad como Debian y Gentoo. Aunque hay otras distribuciones que no están relacionadas con alguna empresa o comunidad, como es el caso de Slackware.
Una
distribución Linux típica contiene un núcleo, herramientas y librerías,
software adicional, documentación, un sistema de ventanas, un
administrador de ventanas y un entorno de escritorio, generalmente es
GNOME o KDE. Gran parte del software incluido es de fuente abierta o
software libre, permitiendo a sus usuarios modificar o compilar el
código fuente original si lo desean.
Muchas distribuciones proveen un sistema de instalación gráfica como lo hacen otros sistemas modernos. Distribuciones independientes proveen el código fuente de todo el software y solo incluyen los binarios del núcleo, herramientas de compilación y de un instalador.
El software incluido en las distribuciones viene en forma de paquetes. La mayoría de las distribuciones actuales contienen un manejador de paquetes que se encarga de manipular todo el software contenido en paquetes (lo instala, desinstala, actualiza, busca e instala dependencias) para que el usuario tenga una experiencia más placentera y use su computadora para lo que necesita.
Kernel
Es el principal encargado de gestionar recursos, a través de servicios de llamada al sistema. Como hay muchos programas y el acceso al hardware es limitado, también se encarga de decidir qué programa podrá hacer uso de un dispositivo de hardware y durante cuánto tiempo, lo que se conoce como multiplexado.
El kernel es el programa que se encarga de:
- La comunicación entre los programas que solicitan recursos y el hardware.
- Administración de los distintos programas informáticos (tareas) de una máquina.
- Administración del hardware (memoria, procesador, periférico, forma de almacenamiento, etc.).
Un núcleo Unix es un programa escrito casi en su totalidad en lenguaje C, con excepción de una parte del manejo de interrupciones, expresada en el lenguaje ensamblador del procesador en el que opera.
Las funciones del núcleo son:
- Permitir la existencia de un ambiente en el que sea posible atender a varios usuarios y múltiples tareas en forma concurrente.
- Repartir el procesador entre usuarios y múltiples tareas.
- Intentar mantener en grado óptimo la atención individual.
Reside siempre en la memoria principal y tiene el control sobre la computadora, por lo que ningún otro proceso puede interrumpirlo; sólo pueden llamarlo para que proporcione algún servicio.
Consta de dos partes principales: la sección de control de procesos y la de control de dispositivos.
La sección de control de procesos: asigna recursos, programas, procesos y atiende sus requerimientos de servicio
La de control de dispositivos: supervisa la transferencia de datos entre la memoria principal y los dispositivos de la computadora.
Cuando se inicia la operación de la computadora, debe cargarse en la memoria una copia del núcleo, que reside en el disco duro (operación denominada bootstrap). Para ello, se deben inicializar algunas interfaces básicas de hardware; entre ellas, el reloj que proporciona interrupciones periódicas.
Enseguida, el núcleo inicializa un proceso especial, llamado proceso 0. El núcleo asigna una estructura de datos y establece apuntadores a una sección especial de la memoria, llamada tabla de procesos, que contendrá los descriptores de cada uno de los procesos existentes en el sistema.
Después de haber creado el proceso 0, se hace una copia del mismo, con lo que se crea el proceso 1; éste muy pronto se encargará de "dar vida" al sistema completo. A partir de ese momento se conoce el número 1 como proceso de inicialización del sistema, init.
El proceso init es el responsable de establecer la estructura de procesos en Unix.
Init crea otro proceso, que espera a que alguien entre en sesión en alguna línea de comunicación. Cuando esto sucede, realiza ajustes en el protocolo de la línea y ejecuta el
programa login, que se encarga de atender inicialmente a los nuevos usuarios. Si el nombre de usuario y la contraseña proporcionadas son correctos, entonces entra en operación el programa Shell, que en lo sucesivo se encargará de la atención normal del usuario que se dio de alta en esa terminal.
programa login, que se encarga de atender inicialmente a los nuevos usuarios. Si el nombre de usuario y la contraseña proporcionadas son correctos, entonces entra en operación el programa Shell, que en lo sucesivo se encargará de la atención normal del usuario que se dio de alta en esa terminal.
A partir de ese momento el responsable de atender al usuario en esa terminal es el intérprete Shell. Cuando se desea terminar la sesión hay que desconectarse de Shell mediante una secuencia especial de teclas (usualmente. < CTL > - D).
No necesariamente se necesita un núcleo para usar una computadora. Los programas pueden cargarse y ejecutarse directamente en una computadora «vacía», siempre que sus autores quieran desarrollarlos sin usar ninguna abstracción del hardware ni ninguna ayuda del sistema operativo, ésta era la forma normal de usar muchas de las primeras computadoras. Con el tiempo, se empezó a dejar en memoria (aún entre distintas ejecuciones) pequeños programas auxiliares, como el cargador y el depurador, o se cargaban desde memoria de sólo lectura. A medida que se fueron desarrollando, se convirtieron en los fundamentos de lo que llegarían a ser los primeros núcleos de sistema operativo.
Hay cuatro grandes tipos de núcleos:
- Los núcleos monolíticos facilitan abstracciones del hardware subyacente realmente potentes y variadas.
- Los micronúcleos (en inglés microkernel) proporcionan un pequeño conjunto de abstracciones simples del hardware, y usan las aplicaciones llamadas servidores para ofrecer mayor funcionalidad.
- Los núcleos híbridos (micronúcleos modificados) son muy parecidos a los micronúcleos puros, excepto porque incluyen código adicional en el espacio de núcleo para que se ejecute más rápidamente.
- Los exonúcleos no facilitan ninguna abstracción, pero permiten el uso de bibliotecas que proporcionan mayor funcionalidad gracias al acceso directo o casi directo al hardware.
Referencias:
Desarrollo de Aplicaciones en Ambientes Emergentes, Ing. Juan Carlos Rodríguez Ulloa