Kernel de Linux

Tutorial del kernel de Linux para principiantes

Tutorial del kernel de Linux para principiantes

Información básica sobre sistemas operativos

Un sistema operativo, abreviado como SO, es una pieza de software que controla los componentes de hardware de un sistema, ya sea un teléfono, una computadora portátil o una computadora de escritorio. Se encarga de la comunicación entre el software y el hardware. Windows XP, Windows 8, Linux y Mac OS X son todos ejemplos de sistemas operativos. El sistema operativo consta de:

Espacio de kernel y espacio de usuario

Espacio kernel: el kernel se encuentra en un estado de sistema elevado, que incluye un espacio de memoria protegido y acceso completo al hardware del dispositivo. Este estado del sistema y el espacio de memoria se conocen en conjunto como espacio de kernel. Dentro del espacio del kernel, el acceso del núcleo al hardware y los servicios del sistema se administran y se brindan como un servicio al resto del sistema.

Espacio de usuario: las aplicaciones del usuario se llevan a cabo en el espacio de usuario, donde pueden llegar a un subconjunto de los recursos disponibles de la máquina a través de llamadas al sistema del kernel. Al utilizar los servicios centrales proporcionados por el kernel, se puede crear una aplicación a nivel de usuario como un juego o un software de productividad de oficina, por ejemplo.

Linux

Linux ha ganado popularidad a lo largo de los años debido a que es de código abierto, por lo tanto, se basa en un diseño similar a UNIX y se ha adaptado a más plataformas en comparación con otros sistemas operativos de la competencia. Es un sistema operativo, como se indicó, que se asemeja a un sistema operativo UNIX: un sistema operativo estable multiusuario multitarea, y que se ha ensamblado como un software gratuito y de código abierto para el desarrollo y la distribución. Lo que significa que cualquier individuo o empresa tiene permiso para usar, imitar, estudiar y alterar el sistema operativo Linux de la forma que desee.

El kernel de Linux

Desde su primer lanzamiento el 17 de septiembre de 1991, el kernel de Linux ha desafiado todas las probabilidades de ser el componente definitorio de Linux. Fue lanzado por Linus Torvalds y hace uso de GNU / Linux para describir el sistema operativo.  El sistema operativo Android basado en el kernel de Linux en los teléfonos inteligentes ha hecho que Linux venza a su competencia para ser la base de sistema operativo instalada más grande de todos los sistemas operativos de propósito general.  La historia del kernel de Linux se puede encontrar aquí.

Un kernel puede ser monolítico, microkernel o híbrido (como OS X y Windows 7). El kernel de Linux es un kernel de sistema operativo de computadora monolítico que se asemeja al sistema UNIX. La línea Linux de sistemas operativos comúnmente conocida como distribuciones de Linux se basa en este kernel.  El kernel monolítico, a diferencia del micronúcleo, no solo abarca la Unidad Central de Procesamiento, la memoria y el IPC, sino que también tiene controladores de dispositivos, llamadas al servidor del sistema y administración del sistema de archivos. Son mejores para comunicarse con el hardware y realizar varias tareas simultáneamente. Es por esta razón que los procesos aquí reaccionan a un ritmo rápido.

Sin embargo, los pocos contratiempos son la enorme instalación y la huella de memoria necesaria y la seguridad inadecuada, ya que todo funciona en modo supervisor. Por el contrario, un microkernel puede reaccionar lentamente a las llamadas de la aplicación, ya que los servicios de usuario y el kernel están separados. Por lo tanto, son de tamaño más pequeño en comparación con el núcleo monolítico.  Los microkernels son fácilmente extensibles, pero se necesita más código para escribir un microkernel. El kernel de Linux está escrito en los lenguajes de programación C y Ensamblador.

La relación del kernel de Linux con el hardware

El kernel puede administrar el hardware del sistema a través de lo que se conoce como interrupciones. Cuando el hardware quiere interactuar con el sistema, se emite una interrupción que interrumpe al procesador que a su vez hace lo mismo con el kernel. Para proporcionar sincronización, el kernel puede deshabilitar las interrupciones, ya sea una sola o todas. En Linux, sin embargo, los manejadores de interrupciones no se ejecutan en un contexto de proceso, sino que se ejecutan en un contexto de interrupción no asociado con ningún proceso.Este contexto de interrupción en particular existe únicamente para permitir que un manejador de interrupciones responda rápidamente a una interrupción individual y luego finalmente salga.

¿Qué hace que el kernel de Linux sea diferente de otros kernels clásicos de Unix??

Existen diferencias significativas entre el kernel de Linux y los kernels clásicos de Unix; como se indica a continuación:

  1. Linux admite la carga dinámica de módulos del kernel.
  2. El kernel de Linux es preventivo.
  3. Linux tiene un soporte multiprocesador simétrico.
  4. Linux es gratuito debido a su naturaleza de software abierto.
  5. Linux ignora algunas características estándar de Unix que los desarrolladores del kernel llaman "mal diseñado."
  6. Linux proporciona un modelo de dispositivo orientado a objetos con clases de dispositivo, eventos conectables en caliente y un sistema de archivos de dispositivo de espacio de usuario
  7. El kernel de Linux no puede diferenciar entre subprocesos y procesos normales.

Arquitectura

Componentes del kernel de Linux

Un kernel es simplemente un administrador de recursos; el recurso que se administra puede ser un proceso, memoria o dispositivo de hardware. Gestiona y arbitra el acceso al recurso entre múltiples usuarios competidores. El kernel de Linux existe en el espacio del kernel, debajo del espacio de usuario, que es donde se ejecutan las aplicaciones del usuario. Para que el espacio del usuario se comunique con el espacio del kernel, se incorpora una biblioteca GNU C que proporciona un foro para que la interfaz de llamada del sistema se conecte al espacio del kernel y permita la transición de regreso al espacio de usuario.

El kernel de Linux se puede clasificar en tres niveles principales:

  1. La interfaz de llamada del sistema; este es el más alto y realiza las acciones básicas como leer y escribir.
  2. El código del kernel; se encuentra debajo de la interfaz de llamada del sistema, es común a todas las arquitecturas de procesador compatibles con Linux, a veces se define como código de kernel independiente de la arquitectura.
  3. El código dependiente de la arquitectura; está bajo el código independiente de la arquitectura, forma lo que generalmente se conoce como un paquete de soporte de placa (BSP): contiene un pequeño programa llamado cargador de arranque que coloca el sistema operativo y los controladores de dispositivo en la memoria.

La perspectiva arquitectónica del kernel de Linux consta de: interfaz de llamada del sistema, gestión de procesos, sistema de archivos virtual, gestión de memoria, pila de red, arquitectura y controladores de dispositivos.

  1. Interfaz de llamada al sistema; es una capa delgada que se utiliza para realizar llamadas a funciones desde el espacio del usuario al kernel. Esta interfaz puede depender de la arquitectura
  2. Gestión de proceso; está principalmente ahí para ejecutar los procesos. Estos se conocen como el hilo en un kernel y representan una virtualización individual del procesador en particular
  3. Gestión de la memoria; La memoria se gestiona en lo que se conoce como páginas para mayor eficiencia. Linux incluye los métodos para administrar la memoria disponible, así como los mecanismos de hardware para mapeos físicos y virtuales.  También se proporciona espacio de intercambio
  4. Sistema de archivos virtual; Proporciona una abstracción de interfaz estándar para los sistemas de archivos. Proporciona una capa de conmutación entre la interfaz de llamada del sistema y los sistemas de archivos compatibles con el kernel.
  5. Pila de red; está diseñado como una arquitectura en capas modelada según los protocolos particulares.
  6. Controladores de dispositivo; una parte importante del código fuente en el kernel de Linux se encuentra en los controladores de dispositivo que hacen que un dispositivo de hardware en particular sea utilizable.  Tutorial del controlador de dispositivo
  7. Código dependiente de la arquitectura; aquellos elementos que dependen de la arquitectura en la que se ejecutan, por lo tanto, deben considerar el diseño arquitectónico para el funcionamiento normal y la eficiencia.

Interfaces

Llamadas e interrupciones del sistema

Las aplicaciones pasan información al kernel a través de llamadas al sistema. Una biblioteca contiene funciones con las que trabajan las aplicaciones. Luego, las bibliotecas, a través de la interfaz de llamada al sistema, instruyen al kernel para que realice una tarea que la aplicación desea.  ¿Qué es una llamada al sistema Linux??

Las interrupciones ofrecen una forma a través de la cual el kernel de Linux administra el hardware de los sistemas. Si el hardware tiene que comunicarse con un sistema, una interrupción en el procesador hace el truco, y esto se pasa al kernel de Linux.

Interfaces del kernel de Linux

El kernel de Linux ofrece varias interfaces para las aplicaciones de espacio de usuario que realizan una variedad de tareas y tienen diferentes propiedades. Existen dos interfaces de programación de aplicaciones (API) distintas; la espacio de usuario del kernel y el kernel interno.  La API de Linux es la espacio de usuario del kernel API; da acceso a programas en el espacio de usuario en los recursos del sistema y servicios del kernel. Está compuesto por la interfaz de llamada del sistema y las subrutinas de la biblioteca GNU C.

ABI de Linux

Esto se refiere al espacio de usuario del kernel ABI (Interfaz binaria de aplicación). Esto se explica como la interfaz que existe entre los módulos del programa. Al comparar API y ABI, la diferencia es que las ABI se utilizan para acceder a códigos externos que ya están compilados, mientras que las API son estructuras para administrar software.  Definir una ABI importante es principalmente el trabajo de las distribuciones de Linux que para el kernel de Linux. Se debe definir una ABI específica para cada conjunto de instrucciones, por ejemplo, x86-64. Los usuarios finales de los productos Linux están interesados ​​en las ABI más que en la API.

Interfaz de llamada al sistema

Como se discutió anteriormente, esto juega un papel más prominente en el kernel. Es una denominación de la parte completa de todas las llamadas al sistema existentes.

La biblioteca estándar de C

Todas las llamadas al sistema del kernel están dentro de la biblioteca GNU C, mientras que la API de Linux está compuesta por la interfaz de llamadas al sistema y la biblioteca GNU C, también llamada glibc.

Interfaz de sistema operativo portátil (POSIX)

POSIX es un término colectivo de estándares para mantener la compatibilidad entre los sistemas operativos. Declara la API junto con interfaces de utilidad y shells de línea de comando. La API de Linux, no solo tiene las características utilizables definidas por POSIX, sino que también tiene características adicionales en su kernel:

  1. Cgroups subsistema.
  2. Llamadas al sistema de Direct Rendering Manager.
  3. A leer por adelantado característica.
  4. Getrandom llamada que está presente en V 3.17.
  5. Llamadas al sistema como futex, epoll, empalme, notificar, fanotificar y inotificar.

Más información sobre POSIX Standard está aquí.

El núcleo modular

Las versiones anteriores del kernel de Linux eran de tal manera que todas sus partes estaban fijadas estáticamente en una, monolítica. Sin embargo, los kernels modernos de Linux tienen la mayor parte de su funcionalidad contenida en módulos que se colocan en el kernel de forma dinámica. Esto, en contraste con los tipos monolíticos, se conoce como núcleos modulares. Esta configuración permite al usuario cargar o reemplazar módulos en un kernel en ejecución sin la necesidad de reiniciar.

El módulo de kernel cargable de Linux (LKM)

La forma básica de agregar código en el kernel de Linux es mediante la introducción de archivos fuente en el árbol de fuentes del kernel. Sin embargo, es posible que desee agregar un código mientras se ejecuta el kernel. El código agregado de esta manera se conoce como módulo de kernel cargable. Estos módulos en particular realizan varias tareas, pero se especifican en tres: controladores de dispositivo, controladores del sistema de archivos y llamadas al sistema.

El módulo del kernel cargable se puede comparar con las extensiones del kernel en otros sistemas operativos. Puede poner un módulo en el kernel cargándolo como LKM o vinculándolo al kernel base.

Los beneficios de los LKM sobre la vinculación al kernel base:

Usos de LKM

  1. Controladores de dispositivo; el kernel intercambia información con el hardware a través de este. Un kernel debe tener un controlador de dispositivo antes de usarlo.
  2. Controladores del sistema de archivos; esto traduce el contenido de un sistema de archivos
  3. Llamadas al sistema; Los programas en el espacio del usuario utilizan llamadas al sistema para adquirir servicios del kernel.
  4. Controladores de red; interpreta un protocolo de red
  5. Intérpretes ejecutables; carga y gestiona un ejecutable.

Compilando el Kernel de Linux

A diferencia de lo que dice la mayoría de la gente, compilar el kernel de Linux es una tarea sencilla. La siguiente es una ilustración paso a paso del proceso usando una de las distribuciones de Linux: Fedora 13 KDE. (Es recomendable hacer una copia de seguridad de sus datos y grub.conf en caso de que algo salga mal)

  1. De http: // kernel.org, descargue la fuente.
  2. Mientras está en su directorio de descargas, extraiga la fuente del kernel del archivo ingresando el siguiente comando en la terminal:
    tar xvjf Linux-2.6.37.alquitrán.bz2
  3. Utilice el comando make mrproper para limpiar el área de construcción antes de cualquier compilación.
  4. Utilice una configuración por ejemplo xconfig. Estas configuraciones están diseñadas para facilitar la ejecución de cualquier programa en Linux.
  5. Especifique los módulos y características que desea que contenga su kernel.
  6. Después de adquirir el .config archivo, el siguiente paso es ir a Makefile
  7. Ejecute el comando make y espere a que se complete la compilación.
  8. Instale los módulos usando el comando make modules_install
  9. Copie su kernel y el mapa del sistema en / boot.
  10. Ejecute new-kernel-pkg para construir la lista de dependencias del módulo y cosas como comida.conf

Actualizar el kernel

Es posible actualizar un kernel de Linux de una versión anterior a una más reciente, conservando todas las opciones de configuración de la versión anterior. Para lograr esto, primero hay que hacer una copia de seguridad del .config archivo en el directorio fuente del kernel; esto es en caso de que algo salga mal al intentar actualizar su kernel. Los pasos son:

  1. Obtenga el último código fuente del kernel principal.sitio web org
  2. Aplique las variaciones al antiguo árbol de fuentes para actualizarlo a la última versión.
  3. Reconfigure el kernel según el archivo de configuración del kernel anterior del que había realizado una copia de seguridad.
  4. Construye el nuevo kernel.
  5. Ahora puede instalar la nueva compilación del kernel.

Descargando la nueva fuente; los desarrolladores del kernel de Linux entienden que es posible que algunos usuarios no deseen descargar el código fuente completo para las actualizaciones del kernel, ya que esto supondría una pérdida de tiempo y ancho de banda. Por lo tanto, está disponible un parche que puede actualizar una versión anterior del kernel. Los usuarios solo necesitan saber qué parche se aplica a una versión en particular, ya que un archivo de parche del kernel solo actualizará el código fuente de una versión específica. Los diferentes archivos de parche se pueden aplicar de las siguientes formas;

  1. Parches de kernel estables que se aplican a la versión base del kernel.
  2. Los parches de lanzamiento del kernel base solo se aplican a la versión del kernel base anterior
  3. Actualización de parche incremental de una versión en particular a la próxima versión. Esto permite a los desarrolladores evitar el ajetreo de degradar y luego actualizar su kernel. En su lugar, pueden cambiar de su versión estable actual a la próxima versión estable.

Aquí hay pasos más detallados para el proceso de actualización de su kernel desde la fuente en Debian y desde binarios prediseñados en CentOS y Ubuntu.

Conclusión

El kernel de Linux actúa principalmente como un administrador de recursos que actúa como una capa abstracta para las aplicaciones. Las aplicaciones tienen una conexión con el kernel que a su vez interactúa con el hardware y da servicio a las aplicaciones. Linux es un sistema multitarea que permite que varios procesos se ejecuten al mismo tiempo. El kernel de Linux es popular debido a su naturaleza de código abierto que permite a los usuarios modificar el kernel para que sea adecuado para ellos y su hardware. Por lo tanto, se puede utilizar en una variedad de dispositivos, a diferencia de otros sistemas operativos.

La característica modular del kernel de Linux agrega más emoción a sus usuarios. Esto se debe a la amplia variedad de modificaciones que se pueden realizar aquí sin reiniciar el sistema. La flexibilidad brinda a sus usuarios un gran espacio para actualizar su imaginación.

Además, la naturaleza monolítica del núcleo es una gran ventaja ya que tiene una alta capacidad de procesamiento que el microkernel. El principal inconveniente con el tipo de kernel de Linux es que si alguno de sus servicios falla, entonces todo el sistema falla. Las últimas versiones se han diseñado de manera que si se agrega un nuevo servicio, no hay necesidad de modificar todo el sistema operativo. Esta es una mejora en comparación con las versiones anteriores.

Fuentes

  1. Wikipedia Kernel de Linux
  2. Interfaces del kernel de Linux de Wikipedia
  3. Módulo de kernel cargable de Linux: cómo
  4. linux.com guía para principiantes
  5. https: // www.quora.com / ¿Qué-son-buenos-tutoriales-para-aprender-Linux-Kernel
  6. https: // unix.intercambio de pila.com / questions / 1003 / linux-kernel-good-beginners-tutorial
  7. http: // www.linux-tutorial-tutorial.info / módulos.php?name = MContent & pageid = 82
  8. https: // www.howtogeek.com / howto / 31632 // qué-es-el-kernel-de-linux-y-qué-hace-/
Cómo mostrar la superposición de OSD en aplicaciones y juegos de Linux en pantalla completa
Jugar juegos en pantalla completa o usar aplicaciones en modo de pantalla completa sin distracciones puede aislarlo de la información relevante del si...
Las 5 mejores cartas de captura de juegos
Todos hemos visto y amado la transmisión de juegos en YouTube. PewDiePie, Jakesepticye y Markiplier son solo algunos de los mejores jugadores que han ...
Cómo desarrollar un juego en Linux
Hace una década, no muchos usuarios de Linux predecían que su sistema operativo favorito algún día sería una plataforma de juegos popular para videoju...