Linux 2.6 interrumpir la mitad inferior del Mecanismo de

  

Este documento principalmente desde el punto de vista sobre la parte inferior del mecanismo de softirq kernel Linux 2.6, tasklet del usuario y WorkQueue analizar estos tres mecanismos para la realización no en el kernel un análisis en profundidad, si los lectores están interesados ​​en aprender más, lea la parte pertinente del núcleo de código fuente de Linux directamente.

Nota Este documento es recogido por un meteoro desde Internet, expedido de acuerdo con el espíritu del software libre de código abierto, cualquiera puede obtener gratis, uso y re-lanzado, pero no limitar los derechos de los demás volver a publicar el contenido publicado. El propósito de este trabajo es publicado espero que sea útil para el lector, pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita para un propósito particular. Una información más detallada, por favor refiérase a la Licencia Pública General de GNU (GPL), y la licencia de documentación libre de GNU (GFDL). 5 Linux medio-selección y comparación de 2,1 softirq mecanismo NGSA 2,2 mecanismo tasklet mecanismo 2,3 WorkQueue

2 Linux 2.6 Resumen del contenido 1 kernel interrumpen mecanismo de la mitad inferior de la mitad inferior 3 de varios mecanismos Mecanismo mitad inferior 4 sección 5.1 NGSA mecanismo de interrupción es relativamente más baja media de la parte inferior del mecanismo de defectos mecanismo 5,2 análisis NGSA

1 Descripción general de rutina de servicio de interrupción es siempre la necesidad de ejecutar fuera en el caso de CPU interrumpe para evitar recursiva interrumpe el control complicado, pero romper el tiempo no puede ser demasiado largo, si no causará una pérdida de señal de interrupción. Para este fin, en Linux, el controlador de interrupción se divide en dos partes, a saber, las mitades superior e inferior. La mitad superior se suele utilizar para realizar procedimientos críticos con estrechos vínculos con el hardware, esta parte del tiempo de ejecución es muy corto, y está dirigido en Shimonoseki interrupción del medio ambiente. El tiempo no es muy exigente, y algunas operaciones son por lo general mucho tiempo, se entregó a la mitad inferior para realizar esta parte del código se ejecuta en la interrupción abierta. La mitad superior de hardware relacionados con el tratamiento, conocido como una interrupción de hardware, esto normalmente requiere ejecución inmediata. Mitad inferior puede demorar un tiempo determinado, en el momento del kernel derecho de ejecutar el programa, que es suave estamos aquí para discutir interrumpido. En este documento, la última versión del kernel de Linux 2.6.22, por ejemplo, para discutir el Linux interrumpir la parte inferior del mecanismo. En la versión 2.6 del kernel, la mitad inferior de los principales mecanismos implementados por softirq, tasklet y WorkQueue, este enfoque en los siguientes tres mecanismos para el análisis.

2 Linux 2.6 kernel interrumpen mecanismo de la mitad inferior de la antigua versión del núcleo de Linux, la parte inferior del mecanismo se llama La mitad inferior (referido como BH) para lograr, que se interrumpió inicialmente por medio de vectores implementado en el sistema utilizando un conjunto (de 32) puntero de función, respectivamente, interrumpir vector 32, esta implementación también se puede ver ahora en su versión sombra 2,4 kernel. Pero ahora la versión 2.6 del kernel no podía verlo. Ahora bien, el núcleo de Linux, generalmente llamado softirq mecanismo de interrupción suave para alcanzar la mitad inferior.

2.1 softirq mecanismos mecanismo de BH originales dos inconvenientes importantes: En primer lugar, un solo sistema, la CPU puede ejecutar el código de BH, BH es una función de dos de anidación no está permitido. Esto puede no importa en un sistema de procesador único, pero en el sistema de SMP es un defecto fatal. Pero el mecanismo de interrupción suave no es lo mismo. El mecanismo y SMP Linux softirq está estrechamente vinculado con el diseño general y la implementación de mecanismos softirq corre a través de un pensamiento: " que desencadena la ejecución y " Quién; (¿Quién marca, que dirige), es decir, cada CPU sola es responsable de desencadenar la interrupción blanda, interfieren entre sí. Esta utilizar eficazmente el rendimiento y las características de los sistemas SMP, mejorando en gran medida la eficiencia de procesamiento. definición Linux include /linux /interrupt.h en una estructura softirq_action softirq para describir una solicitud, de la siguiente manera: softirq_action struct {void (* acción) (struct softirq_action *); void * data;}; en el que la acción de puntero de función punto suave rutina de servicio de petición de interrupción, los datos de los parámetros de los puntos de datos a sus propias funciones de servicio de interpretación. Sobre la base de la configuración anterior, el sistema define una interrupción softirq suave mundial [32], que corresponde a 32 softirq_action estructura representada suave interrupción descriptor vector softirq_vec kernel /softirq.c en. Pero, de hecho, Linux no es una forma de .r. , #endif}; en el que HI_SOFTIRQ para el logro de interrupción de software de alta prioridad, tales como hi_tasklet de alta prioridad, y se utiliza para implementar TASKLET_SOFTIRQ tasklet tales como interrupción suave general. Sobre tasklet, introduciremos más adelante. No necesitamos usar 32 vectores de interrupción suaves, de hecho, el núcleo pre-definido vector de interrupción suave tiene que satisfacer las necesidades de la gran mayoría de nuestras aplicaciones. Otra extensión del vector del núcleo está reservado para uso futuro, no hay que utilizarlos. Para utilizar softirq, primero debemos inicializarlo. Utilizamos open_softirq función () para abrir una interrupción de software vector nr específica, nr inicialización descriptor correspondiente softirq_vec [NR], toda la CPU establece el bit apropiado en la máscara de interrupción suave es 1. do_softirq Función () es responsable de implementar una matriz softirq_vec función de servicio de interrupción conjunto suave [32]. Cada CPU es llevar a cabo esta función mediante la realización de un suave servicios de interrupción. Debido a suave en la misma rutina de servicio de interrupción de la CPU no se pueden anidar, por lo tanto, la función do_softirq () para comprobar el principio si la CPU actual se encuentra en el servicio de interrupción, si se devuelve entonces inmediatamente. En la misma CPU, do_softirq () se ejecuta en serie. Utilice open_softirq () después de completar una interrupción suave de registro, es necesario activarlo. función Kernel raise_softirq () para activar una alarma de suave. Para una softirq dada, será sólo un controlador, el controlador es compartida por todas las CPU. Desde el mismo controlador softirq puede ejecutar simultáneamente en diferentes CPU, y producir condiciones de carrera, los mecanismos de sincronización para hacer frente a la función en sí es muy importante. La activación de una alarma de suave se realiza generalmente en la mitad superior de la interrupción. Cuando un manejador de interrupciones quiere activar una interrupción de software, raise_softirq () es llamado. En algún momento posterior, cuando do_softirq () para ejecutar en una CPU, se llamará al manejador de interrupciones software correspondiente. Tenga en cuenta que, en softirq mecanismo, también contiene un pequeño núcleo de las discusiones ksoftirqd. Esto es para equilibrar el sistema cargue la palabra. Pensemos, si el sistema ha seguido desencadenar una solicitud de interrupción blanda, la CPU continuará manejando la interrupción suave, porque al menos una vez cada interrupción del reloj se ejecutará do_softirq (). Como resultado, el sistema en otra tarea importante no es que sea debido a la falta crónica de CPU y ha estado en un estado de hambre hace? Cuando el sistema está ocupado, este pequeño hilo del núcleo es especialmente útil, demasiados solicitud de interrupción suave será colocado en el sistema para realizar un período de tiempo apropiado, a otros procesos más oportunidades de ejecución. 2.6 kernel, do_softirq () se colocan irq_exit () se ejecuta. En la mitad superior de la interrupción, sólo acaba de llamar irq_exit () en do_softirq () para el procesamiento de interrupción suave, que es muy propicio interrumpir suave el módulo de actualización y migración. Si necesita trasplantar el software de Linux interrumpir nuestra NGSA, una cosa muy importante que realmente nos dio una gran comodidad, ya que sólo tenemos que realizar para un pequeño descanso en medio de los cambios en nosotros. Si hay muchos entrada de interrupción suave en el CALL interrumpir la mitad superior, entonces trasplante no ser doloroso?

Copyright © Conocimiento de Windows All Rights Reserved