GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo el kernel de Linux maneja las interrupciones

Las interrupciones son una parte esencial del funcionamiento de las CPU modernas. Por ejemplo, cada vez que presiona una tecla en el teclado, la CPU se interrumpe para que la PC pueda leer la entrada del usuario desde el teclado. Esto sucede tan rápido que no nota ningún cambio o deterioro en la experiencia del usuario.

Además, el teclado no es el único componente que puede causar interrupciones. En general, hay tres tipos de eventos que pueden provocar la interrupción de la CPU:Interrupciones de hardware , interrupciones de software y excepciones . Antes de entrar en los diferentes tipos de interrupciones, definiré algunos términos.

Definiciones

Una solicitud de interrupción (IRQ ) es solicitado por el controlador de interrupción programable (PIC ) con el objetivo de interrumpir la CPU y ejecutar la rutina de servicio de interrupción (ISR ). El ISR es un pequeño programa que procesa ciertos datos dependiendo de la causa de la IRQ. El procesamiento normal se interrumpe hasta que finaliza la ISR.

En el pasado, las IRQ eran manejadas por un microchip separado, el PIC, y los dispositivos de E/S estaban conectados directamente al PIC. El PIC administraba las diversas IRQ de hardware y podía comunicarse directamente con la CPU. Cuando se produjo una IRQ, el PIC escribió los datos en la CPU y generó la solicitud de interrupción (INTR ) alfiler.

Hoy en día, las IRQ son manejadas por un controlador de interrupción programable avanzado (APIC ), que forma parte de la CPU. Cada núcleo tiene su propio APIC.

Tipos de interrupciones

Como mencioné, las interrupciones se pueden separar en tres tipos dependiendo de su fuente:

Interrupciones de hardware

Cuando un dispositivo de hardware quiere decirle a la CPU que ciertos datos están listos para procesar (por ejemplo, una entrada de teclado o cuando llega un paquete a la interfaz de red), envía una IRQ para señalar a la CPU que los datos están disponibles. Esto invoca un ISR específico que fue registrado por el controlador del dispositivo durante el inicio del kernel.

Interrupciones de software

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

Cuando estás reproduciendo un vídeo, es fundamental sincronizar la reproducción de música y vídeo para que la velocidad de la música no varíe. Esto se logra a través de una interrupción de software que se activa de forma repetitiva mediante un sistema de temporizador preciso (conocido como jiffies). Este temporizador permite que su reproductor de música se sincronice. También se puede invocar una interrupción de software mediante una instrucción especial para leer o escribir datos en un dispositivo de hardware.

Las interrupciones de software también son cruciales cuando se requiere capacidad en tiempo real (como en aplicaciones industriales). Puede encontrar más información al respecto en el artículo de Linux Foundation Introducción a Linux en tiempo real para desarrolladores integrados .

Excepciones

Las excepciones son el tipo de interrupción que probablemente conozca. Cuando la CPU ejecuta un comando que daría como resultado una división por cero o un error de página, se interrumpe cualquier ejecución adicional. En tal caso, se le informará al respecto mediante una ventana emergente o al ver falla de segmentación (núcleo volcado) en la salida de la consola. Pero no todas las excepciones son causadas por una instrucción defectuosa.

Las excepciones se pueden dividir en Fallos , Trampas y Cancelar .

  • Fallas: Las fallas son una excepción que el sistema puede corregir, por ejemplo, cuando un proceso intenta acceder a los datos de una página de memoria que se intercambió en el disco duro. La dirección solicitada está dentro del espacio de direcciones del proceso y los derechos de acceso son correctos. Si la página no está presente en la RAM, se genera una IRQ e inicia el controlador de excepción de errores de página para cargar la página de memoria deseada en la RAM. Si la operación tiene éxito, la ejecución continuará.
  • Trampas: Las trampas se utilizan principalmente para la depuración. Si establece un punto de interrupción en un programa, inserta una instrucción especial que hace que active una trampa. Una trampa puede desencadenar un cambio de contexto que permite que su depurador lea y muestre valores de variables locales. La ejecución puede continuar después. Las trampas también son la forma predeterminada de ejecutar llamadas al sistema (como matar un proceso).
  • Anulación: Los abortos son causados ​​por fallas de hardware o valores inconsistentes en las tablas del sistema. Un aborto no informa la ubicación de la instrucción que provoca la excepción. Estas son las interrupciones más críticas. Un aborto invoca el controlador de excepciones de aborto del sistema. , que finaliza el proceso que lo provocó.

Poner manos a la obra

Las IRQ se ordenan por prioridad en un vector en el APIC (0=prioridad más alta). Las primeras 32 interrupciones (0–31) tienen una secuencia fija que especifica la CPU. Puede encontrar una descripción general de ellos en la página de Excepciones de OsDev. Las IRQ posteriores se pueden asignar de manera diferente. La tabla de descriptores de interrupción (IDT ) contiene la asignación entre IRQ e ISR. Linux define un vector IRQ de 0 a 256 para la asignación.

Para imprimir una lista de interrupciones registradas en su sistema, abra una consola y escriba:

cat /proc/interrupts

Deberías ver algo como esto:

De izquierda a derecha, las columnas son:vector IRQ, recuento de interrupciones por CPU (0 .. n ), la fuente de hardware, la información del canal de la fuente de hardware y el nombre del dispositivo que provocó la IRQ.

En la parte inferior de la tabla, hay algunas interrupciones no numéricas. Son interrupciones específicas de la arquitectura, como la interrupción del temporizador local (LOC ) en IRQ 236. Algunos de ellos se especifican en el diseño del vector IRQ de Linux en el árbol de fuentes del kernel de Linux.

Para obtener una vista en vivo de esta tabla, ejecute:

watch -n1 "cat /proc/interrupts"

Conclusión

El manejo adecuado de IRQ es esencial para la interacción adecuada de hardware, controladores y software. Afortunadamente, el kernel de Linux hace un muy buen trabajo, y un usuario de PC normal apenas notará nada sobre el manejo completo de interrupciones del kernel.

Esto puede volverse muy complicado, y este artículo solo brinda una breve descripción general del tema. Buenas fuentes de información para profundizar en el tema son Linux Inside eBook (CC BY-NC-SA 4.0) y el repositorio de enseñanza del kernel de Linux.


Linux
  1. Cómo llegó Linux al mainframe

  2. El ciclo de vida de las pruebas del kernel de Linux

  3. Cómo actualizar Kernel en Linux Desktop

  4. Linux:¿cómo determinar qué módulo contamina el kernel?

  5. ¿Cómo determina el kernel de Linux el orden de las llamadas __init?

Cómo compilar un kernel de Linux en el siglo XXI

Cómo verificar la versión del kernel en Linux

Cómo actualizar el kernel de Linux en CentOS 7

Cómo instalar el último kernel de Linux en CentOS 7

¿Cómo puedo reservar un bloque de memoria del kernel de Linux?

¿Cómo carga Linux la imagen 'initrd'?