La palabra innovación se habla en la industria de la tecnología casi tanto como revolución , por lo que puede ser difícil diferenciar la hipérbole de algo realmente emocionante. El kernel de Linux se ha llamado innovador, pero también se le ha llamado el truco más grande en la informática moderna, un monolito en un micromundo.
Dejando a un lado el marketing y el modelado, se puede decir que Linux es el kernel más popular del mundo de código abierto, y ha introducido algunos cambios reales en sus casi 30 años de vida.
Cgroups (2.6.24)
En 2007, Paul Menage y Rohit Seth obtuvieron los esotéricos grupos de control (cgroups) función añadida al núcleo (la implementación actual de cgroups es una reescritura de Tejun Heo). Esta nueva tecnología se usó inicialmente como una forma de garantizar, esencialmente, la calidad del servicio para un conjunto específico de tareas.
Por ejemplo, podría crear una definición de grupo de control (cgroup) para todas las tareas asociadas con su servidor web, otro cgroup para las copias de seguridad de rutina y otro para los requisitos generales del sistema operativo. Luego, podría controlar un porcentaje de recursos para cada cgroup, de modo que su sistema operativo y su servidor web obtengan la mayor parte de los recursos del sistema, mientras que sus procesos de copia de seguridad tienen acceso a lo que quede.
Sin embargo, por lo que cgroups se ha vuelto más famoso es por su papel como la tecnología que impulsa la nube en la actualidad:los contenedores. De hecho, los cgroups se denominaron originalmente contenedores de procesos. No fue una gran sorpresa cuando fueron adoptados por proyectos como LXC, CoreOS y Docker.
Abriendo las compuertas, el término contenedores Justamente se convirtió en sinónimo de Linux, y el concepto de "aplicaciones" basadas en la nube de estilo microservicio se convirtió rápidamente en la norma. En estos días, es difícil alejarse de los cgroups, son tan frecuentes. Cada infraestructura a gran escala (y probablemente su computadora portátil, si ejecuta Linux) aprovecha cgroups de manera significativa, lo que hace que su experiencia informática sea más manejable y más flexible que nunca.
Por ejemplo, es posible que ya haya instalado Flathub o Flatpak en su computadora, o tal vez haya comenzado a usar Kubernetes y/u OpenShift en el trabajo. De todos modos, si el término "contenedores" aún le resulta confuso, puede obtener una comprensión práctica de los contenedores de Detrás de escena con los contenedores de Linux.
LKMM (4.17)
En 2018, el arduo trabajo de Jade Alglave, Alan Stern, Andrea Parri, Luc Maraget, Paul McKenney y varios otros se fusionó con el núcleo principal de Linux para proporcionar modelos de memoria formales. El subsistema del modelo de [consistencia] de la memoria del kernel de Linux (LKMM) es un conjunto de herramientas que describen el modelo de coherencia de la memoria de Linux, además de producir pruebas de fuego (klitmus , específicamente) para realizar pruebas.
A medida que los sistemas se vuelven más complejos en el diseño físico (se agregan más núcleos de CPU, crecen la caché y la RAM, etc.), más difícil les resulta saber qué espacio de direcciones requiere qué CPU y cuándo. Por ejemplo, si la CPU0 necesita escribir datos en una variable compartida en la memoria y la CPU1 necesita leer ese valor, entonces la CPU0 debe escribir antes de que la CPU1 intente leer. De manera similar, si los valores se escriben en un orden en la memoria, entonces se espera que también se lean en ese mismo orden, independientemente de qué CPU o CPU estén realizando la lectura.
Incluso en una sola CPU, la gestión de la memoria requiere un orden de tareas específico. Una acción simple como x =y requiere una CPU para cargar el valor de y de la memoria y luego almacena ese valor en x . Colocando el valor almacenado en y en la x la variable no puede aparecer antes la CPU ha leído el valor de la memoria. También hay dependencias de direcciones:x[n] =6 requiere que n se carga antes de que la CPU pueda almacenar el valor de seis.
LKMM ayuda a identificar y rastrear estos patrones de memoria en el código. Hace esto en parte con una herramienta llamada manada , que define las restricciones impuestas por un modelo de memoria (en forma de axiomas lógicos) y luego enumera todos los resultados posibles consistentes con estas restricciones.
Parche de baja latencia (2.6.38)
Hace mucho tiempo, en los días previos a 2011, si querías hacer un trabajo multimedia "serio" en Linux, tenías que obtener un kernel de baja latencia. Esto se aplicó principalmente a la grabación de audio al agregar muchos efectos en tiempo real (como cantar en un micrófono y agregar reverberación, y escuchar su voz en sus auriculares sin demora notable). Hubo distribuciones, como Ubuntu Studio, que proporcionaron un kernel de este tipo de manera confiable, por lo que en la práctica no fue un gran obstáculo, solo una advertencia importante al elegir su distribución como artista.
Más recursos de Linux
- Hoja de trucos de los comandos de Linux
- Hoja de trucos de comandos avanzados de Linux
- Curso en línea gratuito:Descripción general técnica de RHEL
- Hoja de trucos de red de Linux
- Hoja de trucos de SELinux
- Hoja de trucos de los comandos comunes de Linux
- ¿Qué son los contenedores de Linux?
- Nuestros últimos artículos sobre Linux
Sin embargo, si no estaba usando Ubuntu Studio, o si necesitaba actualizar su kernel antes de que su distribución lo hiciera, tenía que ir a la página web de rt-patches, descargar los parches del kernel, aplicarlos a su kernel código fuente, compilar e instalar manualmente.
Y luego, con el lanzamiento de la versión 2.6.38 del kernel, todo este proceso terminó. El kernel de Linux de repente, como por arte de magia, tenía un código de baja latencia (según los puntos de referencia, la latencia se redujo en un factor de 10, al menos) incorporado de forma predeterminada. No más descargas de parches, no más compilación. Todo funcionó, y todo gracias a un pequeño parche de 200 líneas implementado por Mike Galbraith.
Para los artistas multimedia de código abierto de todo el mundo, fue un cambio de juego. Las cosas mejoraron tanto a partir de 2011 que en 2016 me desafié a mí mismo a construir una estación de trabajo de audio digital (DAW) en una Raspberry Pi v1 (modelo B) y descubrí que funcionaba sorprendentemente bien.
RCU (2.5)
RCU, o Read-Copy-Update, es un sistema definido en informática que permite que múltiples subprocesos de procesador lean desde la memoria compartida. Lo hace posponiendo las actualizaciones, pero también marcándolas como actualizadas, para garantizar que los consumidores de datos lean la última versión. Efectivamente, esto significa que las lecturas ocurren simultáneamente con las actualizaciones.
El ciclo típico de RCU es un poco así:
- Elimine los punteros a los datos para evitar que otros lectores hagan referencia a ellos.
- Espere a que los lectores completen sus procesos críticos.
- Recupere el espacio de la memoria.
Dividir la etapa de actualización en fases de eliminación y recuperación significa que el actualizador realiza la eliminación de inmediato y aplaza la recuperación hasta que todos los lectores activos estén completos (ya sea bloqueándolos o registrando una devolución de llamada que se invocará al finalizar).
Si bien el concepto de lectura, copia y actualización no se inventó para el kernel de Linux, su implementación en Linux es un ejemplo definitorio de la tecnología.
Colaboración (0.01)
La respuesta final a la pregunta de qué innovó el kernel de Linux siempre será, por encima de todo, la colaboración. Llámelo buen momento, llámelo superioridad técnica, llámelo pirateabilidad o simplemente llámelo código abierto, pero el kernel de Linux y los muchos proyectos que permitió son un brillante ejemplo de colaboración y cooperación.
Y va mucho más allá del núcleo. Personas de todos los ámbitos de la vida han contribuido al código abierto, posiblemente porque del núcleo de Linux. Linux fue, y sigue siendo hasta el día de hoy, una fuerza importante del software libre, que inspira a los usuarios a traer su código, arte, ideas, o simplemente ellos mismos, a una comunidad global, productiva y diversa de humanos.
¿Cuál es tu innovación favorita?
Esta lista está sesgada hacia mis propios intereses:contenedores, acceso a memoria no uniforme (NUMA) y multimedia. Seguramente he dejado su innovación de kernel favorita fuera de la lista. ¡Cuéntamelo en los comentarios!