Kernel de Linux. La base de un mundo de código abierto

in #steemstem7 years ago

Siempre escuchamos hablar del Kernel de los sistemas operativos, el Kernel es el software que se encarga de hacer controlar el accesos seguros entre los programa que se utilizan y el hardware. Existen diverso tipos de núcleos usados a consideración monolíticos, micronúcleos, núcleos híbridos y Exonúcleos.


Para este post tomaremos en consideración los núcleos monolíticos, una arquitectura donde todas las llamadas de sistema son realizadas por el propio sistema operativo sin tener controladores intermedios para gestionar esto, de esta manera la concurrencia sistema de archivos y memoria y cualquier procesos es gestionado directamente por el sistema. En la siguientes gráfica se muestra su estructura.



Imagen realizada por @ubaldonet con Inkscape

Al ser una estructura sencilla y sin terceros servicios su mantenimiento es más simple y su crecimiento es rápido, esta arquitectura es usada en Linux o GNU\Linux. Cuando hablamos de Linux muchos pensamos en el sistema completo que usamos, pero la realidad es que realmente es el nombre del Kernel, las interfaces o escritorios no son integrados a este y los servicios son instalados como módulos, sin embargo se acostumbra llamar Linux a la distribución completa donde se integran Kernel, escritorio y servicios.


El Kernel de Linux es mantenido mediante un ciclo perpetuo de vida, donde existe un desarrollo continuo bien sea de mantenimiento o de nuevo desarrollo, de esta manera existen en paralelo una serie de diferentes versiones de Kernel en paralelo, de forma que existe una versión liberada estable y otros en versiones distintas fases de Beta, que se encuentran en prueba y otros en estado de desarrollo.


Aún así la versión más utilizada por los usuarios son las versiones estables. Un usuario que utiliza una implantación puede cambiar su Kernel estable por uno en desarrollo y puede elegir migrar de un Kernel estable a una versión nueva liberada de así desearlo. Existen distribuciones como Manjaro que permiten hacer esto de forma amigable mediante un asistente que permite ir de una versión de Kernel a otra activando el deseado, mientras en otras distribuciones esto debe ser manualmente. Distribuciones como Fedora que constantemente vas actualizando a los Kernel estables más reciente.


El Kernel de Linux está formado por una gran cantidad de funciones, entre sus líneas de código esta el control de los drivers de de audio, vídeo comunicación de dispositivos y es también el encargado de controlar las interrupciones del procesador que controlan los procesos que se ejecutan en cada momento y el tiempo que disponen para cada proceso. Este control de las interrupciones es sumamente importante y cuando se cambia el tiempo para evitar las constantes interrupciones de los procesos normales en la multitarea se consigue darle prioridad a los procesos en primer plano evitando que existan cortes que pueden hacer fallar procesos como la grabación de sonido u optimizar la edición de vídeo, cuando esto sucede se obtiene lo que se llama un Kernel de baja latencia y es usado en distribuciones de usos específicos, como el caso de Ubuntu Studio.



Liquorix Kernel y Archivos de Kernel Oficial


Linux está bajo el licenciamiento GPL2, el ser un Kernel de bajo código abierto permite que existan proyectos que realizan adaptaciones del paquete estable oficial y realicen sus propias versiones, un ejemplo puede ser Liquorix Kernel un proyecto que mantiene un Kernel actualizado con ciertas modificaciones, donde los programadores que lo mantienen realizan las modificaciones que consideran prudentes para optimizar el a el usuario cotidiano que desea mejorar su sistema.


Si revisamos por ejemplo la página de dicho producto podremos observar las modificaciones que se notifican:


--- Virtual Memory Subsystem ---------------------------


Mem dirty before bg writeback..:  10 % -> 20 %

Mem dirty before sync writeback:  20 % -> 50 %


--- Block Layer ----------------------------------------


Block Layer Queue Depth........: 128    -> 512

Default MQ scheduler......: mq-deadline -> bfq


--- CPU Scheduler (CFS) --------------------------------


Scheduling latency.............:   6 -> 3 ms

Minimal granularity............:   0.75 -> 0.3 ms

Wakeup granularity.............:   1 -> 0.5 ms

CPU migration cost.............:   0.5 -> 0.25 ms

Bandwidth slice size...........:   5 -> 3 ms

Ondemand fine upscaling limit..:  95 % -> 85 %


--- CPU Scheduler (MuQSS) ------------------------------


Scheduling interval............:   6 -> 3 ms

ISO task max realtime use......:  70 % -> 25 %

Ondemand coarse upscaling limit:  80 % -> 45 %

Ondemand fine upscaling limit..:  95 % -> 45 %


Entre las cosas que modifican se encuentra los tiempos de latencia y ancho de banda de los procesos del CPU.


El manejo de la memoria virtual del equipo y otras funciones. Según su documentación reducen reducen el tamaño de la cola en dispositivos de redes, esto seguramente para evitar latencias largas en los paquetes cambio que favorece los juegos en línea.


Soporte de compatibilidad y una depuración de opciones que ellos consideran optimizan el rendimiento del sistema.


Dicha adaptación de Kernel es realizada para sistemas basados Debian y Ubuntu.


En caso de quererlo probar para instalarlo se debe seguir las siguientes instrucciones


Prerrequisitos Debian


sudo apt-get update && sudo apt-get install apt-transport-https && echo -e 'deb http://liquorix.net/debian sid main\ndeb-src http://liquorix.net/debian sid main\n\n# Mirrors:\n#\n# Unit193 - France\n# deb http://mirror.unit193.net/liquorix sid main\n# deb-src http://mirror.unit193.net/liquorix sid main' | sudo tee /etc/apt/sources.list.d/liquorix.list && curl https://liquorix.net/linux-liquorix.pub | sudo apt-key add - && sudo apt-get update


Prerrequisitos Ubuntu


sudo add-apt-repository ppa:damentz/liquorix && sudo apt-get update


Mientras en Debian se apunta a un repositorio y agregan las llaves de estos en Ubuntu se dispone de una PPA, lo más interesante es el mantenimiento de la versión a 32 y 64 bits lo cual es una ayuda valiosa para aquellos usuarios de Ubuntu que se encuentran un poco huérfanos pues las versiones actuales no tienen versión a 32 bits, por lo cual deben mantener una versión anterior, quedando muchos usuarios de Ubuntu aun en la última LTS con soporte a 32 bits la 16.04.6 y permitiendo este proceso mantener un Kernel actualizado.


Instalación


32 Bits sin PAE


sudo apt-get install linux-image-liquorix-686 linux-headers-liquorix-686


32 Bits con PAE


sudo apt-get install linux-image-liquorix-686-pae linux-headers-liquorix-686-pae


64 Bits


sudo apt-get install linux-image-liquorix-amd64 linux-headers-liquorix-amd64



Por otro lado el Kernel oficial siempre está disponible para su descarga e instalación en cualquier distribución y se pueden encontrar aquí. Podemos encontrar las siguientes modalidades.


Stable: Es el ultimo y más actualizado y se va actualizando en pequeñas versiones. Es una versión ya estable liberada con las últimas actualizaciones, es de uso común por aquellos que siempre quieren probar nuevas funciones o quieren solventar un problema que presente su equipo con el Kernel de uso actual.

Longterm: Son Kernels estables que se congelan en el tiempo, reciben actualizaciones de seguridad, pero no reciben nuevas funciones, es una versión muy utilizada por aquellos que tienen un interés importante en mantener sus sistemas estables sin cambios mayores realizando una tarea específica, es común en servidores.

Mainline: aquellos que se encuentra en desarrollo aun, para quienes desean ir probando las nuevas versiones.


La documentación del Kernel también se encuentra en la dicha página y allí, separada en documentación de usuario, desarrollador e incluso documentación de las API del kernel para su uso.


¿Para qué las actualizaciones de Kernel?


El Kernel de Linux trae consigo todo el manejo de dispositivos y GPUs, por lo cual a medida que el hardware va evolucionando Linux crece con nuevos controladores y drivers para el soporte de estos dispositivos, se realizan correcciones menores a errores reportados en versiones anteriores, parches de seguridad y si corresponde alguna mejora mayor en alguna de sus funciones. Este constante proceso de depuración es lo que permite que el código consiguiera madurar y volverse la base para un sin fin de sistemas que necesitan de una base estable rápida y segura de trabajo. Sumado esto a los beneficios de poder disponer del código para su modificación y revisión al estar bajo la GPL.


De esta manera una persona que mantiene el Kernel constantemente actualizado puede disfrutar siempre de las novedades y mejoras que esto implica, por otro lado puede significar introducir un problema dentro de un equipo ya estabilizado, un usuario de un sistema Linux puede tener una modificación específica que tenga una incompatibilidad con una nueva versión. Como puede ser la solución a un problema de compatibilidad con algún hardware específico que ha sido soportada en una nueva versión o mejorado.


Un Kernel para los Supercomputadores


Linux es un Kernel muy versátil y adaptado a gran cantidad de funciones, smartphones, escritorio de oficina y hogar, dispositivos y gadgets, pero existe un uso poco conocido, Linux es el sistema más utilizado en los llamados Supercomputadores, equipos con una increíble cantidad de computo y usadas en funciones científicas de gran complejidad donde se necesitan realizar cómputos sumamente complejos. Si bien  no son los equipos que reciban más atención, estos dan un gran aporte en estudios científicos avanzados, como simuladores ambientales complejos donde se requiere simular situaciones complejas como terremotos, tsunamis. Software de predicción climática donde se busca predecir fenómenos mediante estudio de grandes volúmenes de datos ambientales. Estudios complejos de biología donde se estudian modelos de proteínas y su funcionamiento. Y en general todo aquel estudio que requiera de tomar grandes volúmenes de datos y procesarlos en sistemas matemáticos complejos.


En este ámbito si tomamos la información suministrada por top500, podremos encontrar que los sistemas basados en Linux se han adueñado de este campo, si bien muchos podrían pensar que es por el ahorro de las licencias, la realidad es que su filosofía de Open Source es un pilar fundamental para este logro, donde poder usar software y adaptarlo a las necesidades, disponiendo del código fuente es un valor agregado invaluable para este tipo de actividades.


La lista de Top 500 contiene los principales supercomputadoras y sus estadísticas las última con fecha de Noviembre de 2018 puede mostrar varias características y si solicitamos los porcentajes de los Sistema utilizados encontraremos que Linux es el dueño casi absoluto. Información que podremos listar aquí.


Los módulos del Kernel Linux


Linux está formado por una gran cantidad de código que se divide para hacer diferentes trabajos, gestionar la memoria, el vídeo, audio. dispositivos, este código puede eliminarse. cambiarse y agregarse en bloques, por lo cual se considera que es un kernel modular, para obtener información de estos módulos existen los siguientes comandos.


lsmod :nos da una lista de todos los módulos activos


lspci -v: nos lista todo el hardware disponible en el equipo


usb-devices: nos indica los dispositivos conectados a los puertos usb


sudo modprobe -c | less: da un listado de configuración de todos los módulos del kernel



Captura de Pantalla Editada con Gimp 2.10

Existen comandos para realizar modificaciones en el Kernel activar y desactivar los módulos, para realizar esto deben cargarse las dependencias del módulo y agregar este al Kernel.


De igual forma si realizamos procesos como el de agregar módulos y eliminarlos podemos encontrarnos con problemas, como puede ser tener módulos que dupliquen alguna función, existen métodos para depurar estos errores como es el colocar un módulo en lista negra.


Consideraciones


El Kernel de Linux puede ser considerado el proyecto de código abierto que ha servido de base y trampolín para todo un conjunto de proyectos, que aprovechan la popularidad de este y su gran difusión. Todo tipo de software de código abierto es desarrollado, escritorios, ofimática software de edición de audio ó vídeo y gran cantidad de servicios para gestionar en servidores de todos los tamaños y alcance.


Desde un smartphone, pasando por los Pcs de casa, servidores y llegando a los supercomputadores el Linux está extendido con mayor o menor popularidad por todos los ámbitos actuales de la tecnología. Existen muchos proyectos de código abierto, pero el Kernel de Linux es posiblemente la base más grande de proyectos de código abierto de la actualidad, desde sus múltiples distribuciones, adaptaciones para dispositivos y smartphones, servicios que lo usan de base y muchas más cosas, este es sin duda la base para algo mucho más grande.


Referencias


Wikipedia aquí

Wikipedia aquí

Liquorix Kernel aquí

Top500 aquí


Sort:  



This post has been voted on by the SteemSTEM curation team and voting trail. It is elligible for support from @curie and @utopian-io.

If you appreciate the work we are doing, then consider supporting our witness stem.witness. Additional witness support to the curie witness and utopian-io witness would be appreciated as well.

For additional information please join us on the SteemSTEM discord and to get to know the rest of the community!

Thanks for having added @steemstem as a beneficiary to your post. This granted you a stronger support from SteemSTEM.

Thanks for having used the steemstem.io app. You got a stronger support!

Gracias por el apoyo

Hi @ubaldonet!

Your post was upvoted by Utopian.io in cooperation with @steemstem - supporting knowledge, innovation and technological advancement on the Steem Blockchain.

Contribute to Open Source with utopian.io

Learn how to contribute on our website and join the new open source economy.

Want to chat? Join the Utopian Community on Discord https://discord.gg/h52nFrV

Interesante publicación compañero @ubaldonet. Aprendiendo un poco más del software libre, específicamente en lo que es un "kernel", siendo la primera vez que me topo con este concepto, puesto que lo que más escucho es "linux". Me llama mucho la atención que el linux sea utilizado en procesos de gran demanda de cómputo, por su filosofía de código abierto. Es muy importante la publicación de este tipo de contenidos dentro de la plataforma de #steemit. Saludos compañero y muchos éxitos!!!

Si fuera de los entusiastas que siguen este mundo no se conocen ciertos usos, pero la realidad es que en equipos de gran poder de computos y grandes centros de datos Linux es el rey

Congratulations @ubaldonet! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You made more than 8000 upvotes. Your next target is to reach 9000 upvotes.

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

You can upvote this notification to help all Steem users. Learn how here!

Coin Marketplace

STEEM 0.04
TRX 0.32
JST 0.081
BTC 62511.76
ETH 1676.42
USDT 1.00
SBD 0.40