Linux es un núcleo de sistema operativo cuyo desarrollo comenzó en 1991 en manos de Linux Torvalds, tres años después y gracias a la ayuda de una gran comunidad de desarrolladores, se libero la versión 1 del código fuente. Esta versión 1 se libero bajo la licencia GPL de free software foundation la cual es la cuna del proyecto GNU, que es una distribución de software libre.
Kernel monolítico
Como ya hemos visto el kernel de Linux es un sistema monolítico es decir que todos sus componentes están en un solo paquete y este establece procedimiento de llamadas hacia el resto de los procesos del sistema corriendo en un área restringida el cual estos no pueden acceder directamente.
El microkernel trabaja igual pero tiene sus diferencias. El microkernel minimiza la labor del kernel y crea un sistema básico de llamadas de entrada y salida, de manejo de memoria y hace que todos los demás componentes corran como procesos del sistema. La discusión entre cual de los dos es mejor pues….. eso lo veremos en otro video porque ahora lo que queremos es entender cuales son las partes del núcleo de Linux.
Como ya hemos visto el kernel de Linux es un sistema monolítico es decir que todos sus componentes están en un solo paquete y este establece procedimiento de llamadas hacia el resto de los procesos del sistema corriendo en un área restringida el cual estos no pueden acceder directamente.
El microkernel trabaja igual pero tiene sus diferencias. El microkernel minimiza la labor del kernel y crea un sistema básico de llamadas de entrada y salida, de manejo de memoria y hace que todos los demás componentes corran como procesos del sistema. La discusión entre cual de los dos es mejor pues….. eso lo veremos en otro video porque ahora lo que queremos es entender cuales son las partes del núcleo de Linux.
¿Como se divide la arquitectura del núcleo de Linux?
El núcleo o Kernel de Linux lo dividiremos en las siguientes partes:
El núcleo o Kernel de Linux lo dividiremos en las siguientes partes:
Gestíon de Procesos
La gestión de procesos esta centrada en la ejecución de los procesos, en el kernel de linux son llamados hilos y representan la visualización individual de cada procesador. Se suele utilizar el termino proceso aunque la implementación en linux no tiene concepto de hilos y procesos por separado. El núcleo provee un API a través de la SCI, con la que puede crear nuevos procesos con fork y con exec, matar o salir del procesos como en el caso de kill o exit. La gestión de procesos es necesaria para poder compartir hilos en la CPU, en el kernel el planificar opera en un tiempo constante sin tener en cuenta el numero de procesos que compiten por la CPU por eso decimos que opera bajo demanda, este se llama planificador 01, esto denota que el lleva la misma cantidad de tiempo para la planificación de un solo hilo o de varios , en el planificador 01 también se soporta el multiproceso. Ósea es simétrico y multiproceso.
La memoria
Otro importante recurso que es controlado por el kernel es la memoria, debido a la eficiencia como el hardware que maneja La Memoria Virtual esta es gestionada en paginas de 4 Kb en la mayoría de las arquitecturas, Linux incluye definiciones para manejar la memoria disponible y los mecanismos para hacer el mapeo en el hardware de la memoria física y en la memoria virtual. Pero la gestión de la memoria es mucho más que búfer de 4Kb, Linux contiene abstracción de búfer que permiten ir mas haya, este esquema maneja memoria de búfer de 4Kb, como base pero además reserva estructura dentro de ellos y lleva la cuenta de las paginas que están completas, parcialmente usadas o totalmente vacías para que el esquema pueda crecer o disminuir como se necesite en el momento. Cuando hay varios usuarios haciendo uso de la memoria existen ocasiones en las cuales esta se agota entonces por esta razón las paginas pueden ser escritas en el disco duro temporalmente y luego vueltas a cargar en la memoria esto se llama SWAP o intercambio, ya que las paginas se mueven de un lado para otro cuando se necesite.
Arquitectura
Por ultimo esta el código dependiente de la arquitectura, aunque Linux es independiente de la arquitectura hay varios elementos que hay que tener en cuenta con las operaciones habituales de eficiencia del sistema operativo, tenemos que Linux también en su árbol de desarrollo tiene un apartado para lo que necesita específicamente cada una de las arquitecturas entonces tenemos 386, Spark, ARM, MIPS, cualquiera otra que sea soportada por el núcleo de Linux. Hay otras características básicas del sistema operativo que vale mencionar aparte de la estructura que estamos estudiando en este momento.
Linux por ser un sistema operativo de producción y también de código abierto es un excelente laboratorio para nuevas tecnologías en protocolos de red, por ejemplo las redes de alta velocidad que superan al Eternet de 1/10Gb y también por ejemplo el TCP/IP, que nos permiten características avanzadas de TCP/IP remplazándolo como capa de transporte. Linux también es un kernel dinámico a pesar que es monolítico también es modular y permite que los controladores que no son esenciales para el funcionamiento sean cargados como módulos y se permite la carga y la descarga de los mismos sin tener que afectar el funcionamiento o la estabilidad de la plataforma.
También esta la parte de la virtualización, Linux desde hace unos años lleva soportando la virtualización por medio de KVM Kernel-Based Virtual Machine, y esta modificación al kernel permitió que se pudieran correr instancias por ejemplo del sistema operativo Windows y del sistema operativo Linux al mismo tiempo, la única restricción es que la plataforma de hardware que se este utilizando tenga la opción de virtualización. Con eso damos fin a la explicación de los que es el núcleo de Linux a grandes rasgos, Si quisiéramos profundizar que es el núcleo de Linux pues nunca terminamos.
Arquitectura
Por ultimo esta el código dependiente de la arquitectura, aunque Linux es independiente de la arquitectura hay varios elementos que hay que tener en cuenta con las operaciones habituales de eficiencia del sistema operativo, tenemos que Linux también en su árbol de desarrollo tiene un apartado para lo que necesita específicamente cada una de las arquitecturas entonces tenemos 386, Spark, ARM, MIPS, cualquiera otra que sea soportada por el núcleo de Linux. Hay otras características básicas del sistema operativo que vale mencionar aparte de la estructura que estamos estudiando en este momento.
Linux por ser un sistema operativo de producción y también de código abierto es un excelente laboratorio para nuevas tecnologías en protocolos de red, por ejemplo las redes de alta velocidad que superan al Eternet de 1/10Gb y también por ejemplo el TCP/IP, que nos permiten características avanzadas de TCP/IP remplazándolo como capa de transporte. Linux también es un kernel dinámico a pesar que es monolítico también es modular y permite que los controladores que no son esenciales para el funcionamiento sean cargados como módulos y se permite la carga y la descarga de los mismos sin tener que afectar el funcionamiento o la estabilidad de la plataforma.
También esta la parte de la virtualización, Linux desde hace unos años lleva soportando la virtualización por medio de KVM Kernel-Based Virtual Machine, y esta modificación al kernel permitió que se pudieran correr instancias por ejemplo del sistema operativo Windows y del sistema operativo Linux al mismo tiempo, la única restricción es que la plataforma de hardware que se este utilizando tenga la opción de virtualización. Con eso damos fin a la explicación de los que es el núcleo de Linux a grandes rasgos, Si quisiéramos profundizar que es el núcleo de Linux pues nunca terminamos.
Sistema Virtual de Archivos o VFS
VFS es una capa de abstracción muy interesante que tiene el kernel y provee un interface para el uso común de sistemas de archivos sin importar cual sea. Se llama capa de atracción porque no importa cual sea la implementación de file system (Sistema de archivo) que estemos utilizando el tiene las funciones básicas para poder acceder a cualquier sistema de archivos. Entonces el VFS proporciona una capa de intercambio entre las SCI y los sistemas de archivos soportados por el kernel.
En la parte mas alta del Virtual File System se encuentra un API común con las funciones tales como read , write, open, close y en la parte mas baja están las abstracciones del sistema para poder definir las atracciones mas altas, estas son añadidas a cada uno de los soportes de cada sistema de archivos en el kernel son más de 50, bajo la capa del sistema de archivos esta el cache del bufer que proporciona un conjunto de funciones a la capa de archivos independientemente del sistema de archivos que se este manejando, esa capa optimiza el acceso a los dispositivos físicos manteniendo brevemente la información arriesgándose a que esta tenga una lectura anticipada de los datos para poderla mantener cuando haga falta. Es por eso que en la práctica cuando nosotros leemos un sistema de archivos la primera vez es más lento y cuando volvemos a leerlo es más rápido.
Por debajo del cache del búfer ya están los controladores directamente, los dispositivos de hardware que hacen interface con el sistema de archivos.
La pila de Red
La pila red o diseño sigue una arquitectura por capas modelada tras los protocolos en si, recordemos que el IP que no es solamente una dirección o un numero sino que es el protocolo principal de internet y a su vez el protocolo central bajo el que se sitúan el protocolo de transporte TCP/IP y sobre el protocolo de transporte TCP/IP esta la capa de socket que a su vez llama a las SCI. La capa de socket es un API estándar para el subsistema del trabajo en red y proporciona una interface a varios protocolos. Desde el acceso a las frames crudas hasta las unidades de datos de IP llamadas PDU lo que nosotros vulgarmente conocemos como paquetes, el protocolo TCP/IP y el protocolo de datagrama de usuario UDP. La capa de socket provee de esta manera una forma estandarizada para poder manejar conexiones y mover datos de un lugar a otro.
Drivers de dispositivos
Lo siguiente en la lista son los controladores, la gran mayoría del código fuente de Linux son controladores de dispositivos, ¿Porque? Bueno es natural, los controladores son los que nos permite reconocer el hardware que nosotros queremos hacer funcionar con el sistema operativo basado en Linux. El árbol de código fuente de Linux nos proporciona un subdirectorio llamado Drivers el cual esta dividido en los diferentes dispositivos que queremos reconocer, en este código fuente vamos a encontrar directorios como Serial, Ethernet y todos los dispositivos para los que se ha desarrollado soporte en Linux.
La Shell
La Shell es interface de usuario tradicional en los sistemas operativos tipo Unix. Linux cuenta con esta interface también. El nombre Shell viene por la traducción del ingles de consola ya que las computadoras de antaño utilizaban una interface donde se colocaban un teclado y una pantalla para poder acceder a este.
La Shell provee una interface para poder enviar y recibir el resultado de comando o de aplicaciones que muestran su resultado en la pantalla en forma de texto, además también provee un lenguaje de programación básico para que los usuarios puedan utilizarlo, automatizar tareas y procedimientos dentro del sistema y así poder facilitar su uso y administración, a esto se le llama Shell Scripting.
Estructura de Directorios
El siguiente punto es la estructura de directorios o jerarquía, al igual que todos los otros sistemas operativos Linux tiene una jerarquía de archivos para poder organizar la estructura y tiene la siguiente organización Teniendo en cuenta que el / o barra diagonal que nosotros conocemos es la base o raíz de toda la estructura entonces la vamos a llamar root ( raíz en ingles), entonces de ahí se derivan los siguientes directorios:
/bin es el que contiene los binarios indispensables para que el sistema operativo funcione en su parte mínima como ls, rm, mkdir, ps
/boot que contiene los archivos estáticos de arranque de Linux como el kernel y el initrd
/dev contiene los archivos que representan los dispositivos tanto virtuales como de hardware que hay en el sistema
/etc que es el directorio que contiene los archivos de configuración de en formato de texto
/home el directorio que contiene los directorios donde están los usuarios ósea donde los usuarios tienen sus datos por ejemplo /home/efox
/lib que es las librerías esenciales también del sistema operativo y los módulos del kernel también residen allí
/media es la raíz del punto de montaje de los dispositivos de bloque o removibles
/mnt es el punto de montaje de bloque temporal, que fue heredado de Unix es como media pero pues ya no se utiliza tanto porque venía de Unix tradicional
/opt que es donde reside el software de aplicación agregado o de terceros como ORACLE o como cualquier otro fabricante
/sbin que provee los binarios del sistema que no son esenciales para hacer que el sistema operativo funcione pero que son necesarios para llevar a cabo funciones ya mas complejas, como por ejemplo la configuración de la red, del filtrado ip, la programación de tareas y toda las demás cosa que hacen mas completo el del sistema operativo.
/tmp que es donde residen los archivos temporales ya sean los que nosotros generamos o los que general las aplicaciones y procesos que manejan el sistema
/usr donde están los binarios y las aplicaciones, este es el directorio que suele tener la cantidad de espacio ocupado mas grande dentro del file system y provee una jerarquía también secundaria donde hay un /bin, /etc, /lib, /sbin.
/var o archivos de tamaño variable como la cola de correo, las colas de impresión, las datas de los motores de bases de datos
/root es por así decirlo el home para el root porque antiguamente en el unix el home del root estaba sobre la misma raíz y esto generaba problemas de seguridad y organización
/proc que es un sistema de archivo virtual donde esta el estado del sistema, las condiciones y esto se indica en archivos de texto
/boot que contiene los archivos estáticos de arranque de Linux como el kernel y el initrd
/dev contiene los archivos que representan los dispositivos tanto virtuales como de hardware que hay en el sistema
/etc que es el directorio que contiene los archivos de configuración de en formato de texto
/home el directorio que contiene los directorios donde están los usuarios ósea donde los usuarios tienen sus datos por ejemplo /home/efox
/lib que es las librerías esenciales también del sistema operativo y los módulos del kernel también residen allí
/media es la raíz del punto de montaje de los dispositivos de bloque o removibles
/mnt es el punto de montaje de bloque temporal, que fue heredado de Unix es como media pero pues ya no se utiliza tanto porque venía de Unix tradicional
/opt que es donde reside el software de aplicación agregado o de terceros como ORACLE o como cualquier otro fabricante
/sbin que provee los binarios del sistema que no son esenciales para hacer que el sistema operativo funcione pero que son necesarios para llevar a cabo funciones ya mas complejas, como por ejemplo la configuración de la red, del filtrado ip, la programación de tareas y toda las demás cosa que hacen mas completo el del sistema operativo.
/tmp que es donde residen los archivos temporales ya sean los que nosotros generamos o los que general las aplicaciones y procesos que manejan el sistema
/usr donde están los binarios y las aplicaciones, este es el directorio que suele tener la cantidad de espacio ocupado mas grande dentro del file system y provee una jerarquía también secundaria donde hay un /bin, /etc, /lib, /sbin.
/var o archivos de tamaño variable como la cola de correo, las colas de impresión, las datas de los motores de bases de datos
/root es por así decirlo el home para el root porque antiguamente en el unix el home del root estaba sobre la misma raíz y esto generaba problemas de seguridad y organización
/proc que es un sistema de archivo virtual donde esta el estado del sistema, las condiciones y esto se indica en archivos de texto