Tutorial de kernel de Linux para principiantes

Tutorial de kernel de Linux para principiantes

Información de fondo sobre sistemas operativos

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

  • Bootloader: software a cargo del proceso de arranque de su dispositivo.
  • El núcleo: el núcleo del sistema y administra la CPU, la memoria y los dispositivos periféricos.
  • Daemons: Servicios de fondo.
  • Redes: sistemas de comunicaciones para enviar y recuperar datos entre sistemas.
  • El shell: comprende un proceso de comando que permite la manipulación del dispositivo a través de los comandos ingresados ​​en una interfaz de texto.
  • Servidor gráfico: el subsistema que muestra los gráficos en su pantalla.
  • Entorno de escritorio: esto es con lo que los usuarios generalmente interactúan.
  • Aplicaciones: son programas que realizan las tareas del usuario, como los procesadores de palabras.

Espacio del núcleo y espacio de usuario

Espacio del núcleo: El núcleo 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 espacio de memoria se conoce en conjunto como espacio de kernel. Dentro del espacio del núcleo, el acceso central al hardware y los servicios del sistema se administran y se proporcionan como un servicio al resto del sistema.

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

Linux

Linux ha ganado popularidad a lo largo de los años debido a que, por lo tanto, es de código abierto, basado en un diseño como unix, y se ha portado a más plataformas en comparación con otros sistemas operativos competidores. Es un sistema operativo, como se indica, que se asemeja a un sistema operativo UNIX: un sistema operativo multitarea estable de múltiples usuarios, y que se ha ensamblado como un software gratuito y de código abierto para el desarrollo y distribución. Lo que significa que cualquier individuo o empresa tiene el permiso de usar, imitar, estudiar y alterar el sistema operativo Linux de cualquier manera que desee.

El núcleo 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 utiliza la GNU/Linux para describir el sistema operativo. Android OS de Linux, con sede en el kernel, en teléfonos inteligentes ha hecho que Linux supere su competencia como la base del sistema operativo instalado más grande de todos los sistemas operativos de propósito general. La historia del núcleo de Linux se puede encontrar aquí.

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

Sin embargo, los pocos contratiempos son la enorme huella de instalación y memoria necesaria y seguridad inadecuada ya que todo funciona en modo supervisor. Por el contrario, un microkernel puede reaccionar lentamente a las llamadas de aplicación como servicios de usuario y el núcleo está separado. Por lo tanto, tienen un 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 núcleo de Linux está escrito en los lenguajes de programación C y de ensamblaje.

La relación de kernel de Linux con el hardware

El núcleo 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 el procesador que a su vez hace lo mismo con el kernel. Para proporcionar sincronización, el núcleo puede deshabilitar las interrupciones, ya sea una sola o todas ellas. En Linux, sin embargo, los manejadores de interrupción no se ejecutan en un contexto de proceso, en cambio se ejecutan en un contexto de interrupción no asociado con ningún proceso.Este contexto de interrupción particular existe únicamente para permitir que un controlador de interrupción responda rápidamente a una interrupción individual y finalmente salga.

¿Qué hace que el núcleo Linux sea diferente de otros núcleos clásicos de Unix??

Existen diferencias significativas entre el núcleo Linux y los clásicos núcleos Unix; Como se menciona a continuación:

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

Arquitectura

Componentes del núcleo de Linux

Un núcleo es simplemente un gerente de recursos; El recurso que se administra puede ser un proceso de proceso, memoria o hardware. Gestiona y arbitra el acceso al recurso entre múltiples usuarios competidores. El kernel de Linux existe en el espacio del núcleo, 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 núcleo, se incorpora una biblioteca GNU C que proporciona un foro para que la interfaz de llamadas del sistema se conecte al espacio del núcleo y permita la transición de regreso al espacio de usuarios.

El núcleo de Linux se puede clasificar en tres niveles principales:

  1. La interfaz de llamadas del sistema; Este es el máximo y realiza las acciones básicas como leer y escribir.
  2. El código del núcleo; se encuentra debajo de la interfaz de llamadas del sistema, es común a todas las arquitecturas del procesador compatible 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): esto contiene un pequeño programa llamado el cargador de arranque que coloca el sistema operativo y los controladores de dispositivos en la memoria.

La perspectiva arquitectónica del núcleo de Linux consta de: interfaz de llamadas del sistema, administración de procesos, el sistema de archivos virtuales, gestión de memoria, pila de red, arquitectura y controladores de dispositivos.

  1. Interfaz de llamadas del sistema; es una capa delgada que se utiliza para realizar llamadas de funciones desde el espacio del usuario al núcleo. Esta interfaz puede depender de la arquitectura
  2. Gestión de proceso; está principalmente para ejecutar los procesos. Estos se denominan hilo en un núcleo 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 la eficiencia. Linux incluye los métodos para administrar la memoria disponible, así como los mecanismos de hardware para mapeos físicos y virtuales. El espacio de intercambio también se proporciona
  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 llamadas del sistema y los sistemas de archivos compatibles con el kernel.
  5. Pila de red; está diseñado como una arquitectura en capas modelada después de los protocolos particulares.
  6. Controladores de dispositivo; Una parte significativa del código fuente en el núcleo de Linux se encuentra en los controladores de dispositivos que hacen que un dispositivo de hardware particular sea utilizable. Tutorial del controlador del dispositivo
  7. Código dependiente de la arquitectura; Aquellos elementos que dependen de la arquitectura de la cual funcionan, por lo tanto, deben considerar el diseño arquitectónico para el funcionamiento y la eficiencia normales.

Interfaces

El sistema llama e interrumpe

Las aplicaciones pasan información al núcleo a través de llamadas al sistema. Una biblioteca contiene funciones con las que funcionan las aplicaciones. Las bibliotecas luego, a través de la interfaz de llamadas del sistema, instruyan al núcleo que realice una tarea que la aplicación desea. ¿Qué es una llamada del 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 núcleo de Linux.

Interfaces de núcleo 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 interfaz de programación de aplicaciones (API) distinta; el espacio de usuarios de kernel y el núcleo interno. La API de Linux es la kernel-userspace API; Da acceso a programas en el espacio del usuario en los recursos y servicios del sistema del kernel. Está compuesto por la interfaz de llamadas del sistema y las subrutinas de la biblioteca GNU C.

Linux abi

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

Interfaz de llamadas del sistema

Como se discutió anteriormente, esto juega un papel más destacado en el núcleo. Es una denominación de toda la parte de todas las llamadas del sistema existentes.

La biblioteca estándar C

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

Interfaz del 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 las interfaces de utilidad y los shells de línea de comandos. La API de Linux, no solo tiene las características utilizables definidas por el POSIX, sino que también tiene características adicionales en su núcleo:

  1. CGROUPS subsistema.
  2. Las llamadas al sistema del administrador de renderización directa.
  3. A leer por adelantado característica.
  4. Getrandom Llame que está presente en V 3.17.
  5. Llamadas del sistema como futex, Epoll, empalme, dnotificar, fanotificar y inotificar.

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

El núcleo modular

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

El módulo de núcleo cargable de Linux (LKM)

La forma básica de agregar código en el núcleo de Linux es a través de la introducción de archivos de origen al árbol de origen del núcleo. Sin embargo, es posible que desee agregar un código mientras el kernel se ejecuta. El código agregado de esta manera se conoce como un módulo de kernel cargable. Estos módulos particulares realizan varias tareas, pero se especifican en tres: controladores de dispositivos, controladores del sistema de archivos y llamadas al sistema.

El módulo de núcleo cargable se puede comparar con las extensiones del núcleo en otros sistemas operativos. Puede colocar un módulo en el núcleo cargándolo como un LKM o uniéndolo al núcleo base.

Los beneficios de los LKM sobre la unión al núcleo base:

  • La reconstrucción de su núcleo a menudo no es necesario, ahorrar tiempo y evitar errores.
  • Ayudan a descubrir problemas del sistema como errores.
  • LKMS te guarda espacio, ya que solo los tienes cargados cuando necesitas usarlos.
  • Dé un tiempo de mantenimiento y depuración mucho más rápido.

Usos de LKMS

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

Compilando el núcleo de Linux

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

  1. De http: // kernel.Sitio web de org, descargue la fuente.
  2. Mientras esté en su directorio de descargas, extraiga la fuente del núcleo del archivo ingresando el siguiente comando en la terminal:
    tar xvjf linux-2.6.37.alquitrán.bz2
  3. Use el comando hacer mrproper para borrar el área de compilación antes de cualquier compilación.
  4. Use una configuración, digamos, 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 su núcleo contenga.
  6. Después de adquirir el .configuración Archivo, el siguiente paso es ir a Makfile
  7. Ejecute el comando Make y espere a que pase la compilación.
  8. Instale los módulos usando el comando hacer módulos_install
  9. Copie su núcleo y el mapa del sistema a /arranque.
  10. Ejecute el nuevo kernel-pkg para crear la lista de dependencias de módulos y cosas como comida.confusión

Actualización del núcleo

Es posible actualizar un kernel de Linux de una versión anterior a una más reciente, al tiempo que conserva todas las opciones de configuración de la versión anterior. Para lograr esto, uno primero tiene que hacer una copia de seguridad del .configuración archivo en el directorio de origen del núcleo; 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 de organización
  2. Aplicar las variaciones al antiguo árbol fuente para llevarlo a la última versión.
  3. Reconfigure el kernel basado en el archivo de configuración del núcleo anterior que ha respaldado.
  4. Construir el nuevo núcleo.
  5. Ahora puede instalar el nuevo build the kernel.

Descargando la nueva fuente; Los desarrolladores de Kernel de Linux entienden que algunos usuarios pueden no querer descargar el código fuente completo para las actualizaciones del núcleo, ya que esto perdería el tiempo y el ancho de banda. Por lo tanto, se pone a disposición un parche que puede actualizar un lanzamiento de kernel más antiguo. Los usuarios solo necesitan saber qué parche se aplica a una versión en particular, ya que un archivo de parche de kernel solo actualizará el código fuente de una versión específica. Los diferentes archivos de parche se pueden aplicar a través de las siguientes formas;

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

Aquí hay pasos más detallados para que el proceso actualice su núcleo de la fuente en Debian y de los binarios pre-construidos 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 los servicios de las aplicaciones. Linux es un sistema multitarea que permite múltiples procesos se ejecuta simultáneamente. El kernel de Linux es popular debido a su naturaleza de código abierto que permite a los usuarios alterar el núcleo a lo que es adecuado para ellos y su hardware. Por lo tanto, se puede usar 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 hacer 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 retroceso con el tipo de núcleo de Linux es que si alguno de sus servicios fallas, entonces todo el sistema cae consigo. Las últimas versiones se han diseñado de manera que si se agrega un nuevo servicio, no es necesario modificar todo el sistema operativo. Esta es una mejora en comparación con las versiones anteriores.

Fuentes

  1. Kernel de Wikipedia Linux
  2. Interfaces de kernel de Wikipedia Linux
  3. Módulo de kernel cargable de Linux cómo
  4. Linux.Guía de principiantes de com
  5. https: // www.quora.com/what-what-what-good-tutorials-to-learn-linux-kernel
  6. https: // unix.cambio de stacex.com/Preguntas/1003/Linux-Kernel-Good-Beginners-Tutorial
  7. https: // www.Howtogeek.com/howto/31632 // what-is-the-linux-kernel-and-what-does-it-do/