2012-02-22 9 views
13

Soy un novato en Linux Kernel.
Sé que hay dos
contexto 1. Proceso de contexto, que se ejecuta en el espacio de usuario o en el espacio del núcleo (por ejemplo: como parte de la llamada del sistema)
2. Contexto de Interrupciones¿En qué contexto Kernel Thread se ejecuta en Linux?

En qué contexto del núcleo del hilo (no relacionado con ningún subproceso de usuario, por ejemplo: tarea de descarga) se ejecuta?

¿Hay algún otro contexto que no sea el contexto de Procesos y Interrupciones en el núcleo de Linux?

Respuesta

15

Los hilos del kernel se ejecutan en process contexts en el espacio del kernel. Aunque hay algunos hilos del kernel que manejan las interrupciones también. Se llaman threaded interrupt handlers. ¡Pero todavía se ejecutan en el contexto del proceso!

Here es una excelente explicación de la diferencia vital entre los 2 contextos!

Aquí hay uno que te ayudará a obtener más información.

What context does the scheduler code run in?

Por lo que yo sé, el proceso y interrumpo son los únicos 2 contextos.

+6

En esencia, el punto de * * de los hilos del núcleo es permitir que el kernel para ejecutar código en el contexto del proceso, pero no directamente en nombre de un espacio de usuario particular, proceso. – caf

+0

@Pavan: los manejadores de interrupción con subprocesos (softirqs) exhiben las características del contexto de interrupción (es posible que no se duerma), por lo que afirmar que son un contexto de proceso es contradictorio. –

+0

@ jørgensen Si lee la documentación de GPIO aquí -http: //www.kernel.org/doc/Documentation/gpio.txt, dice- 'El acceso a tales GPIOs requiere un contexto que puede dormir, por ejemplo, un controlador de IRQ enhebrado' Entonces, implica que los manejadores de interrupción con rosca pueden dormir ¿no? Tienes razón acerca de los softirqs. Pero no son el único tipo de manipuladores de interrupción roscados, ¿verdad? O, incluso, ¿realmente se refiere a softirqs cuando dicen controlador de interrupción con hilos? –

0

Bueno, hay ciertas tareas que ni se llaman a través de una llamada al sistema ni cuando se manejan interrupciones. Tales se manejan como contextos puros del kernel, por ejemplo swapper, INIT_TASk, etc. que no tienen el código correspondiente ejecutándose en el espacio del usuario.

1

Hay un puñado de estados, algunos pueden ser especializaciones de otros. También vea http://www.kernel.org/doc/htmldocs/kernel-hacking.html.

  • contexto NMI (in_nmi())
  • contexto difícil de interrupción (in_irq())
  • contexto de interrupción suave (in_softirq())
  • (tasklet, el temporizador y contextos WorkQueue)
  • contexto atómica (in_atomic()). Posiblemente las entradas son, entre otras, spin_lock.
  • contexto UCR, entrar con rcu_read_lock por ejemplo
  • contexto de usuario
Cuestiones relacionadas