¿Son los hilos de kernel procesos y demonios?

10

De la arquitectura del kernel de Linux de Mauerer,

Los hilos del núcleo son procesos iniciados directamente por el núcleo mismo. Delegan una función del núcleo a un proceso separado y la ejecutan allí en '' paralelo '' a los otros procesos en el sistema (y, de hecho, en paralelo a la ejecución del núcleo mismo). Los hilos del kernel a menudo se denominan demonios (kernel) . Se utilizan para realizar, por ejemplo, las siguientes tareas:

  • Para sincronizar periódicamente páginas de memoria modificadas con el dispositivo de bloque desde el cual se originan las páginas (por ejemplo, archivos asignados usando mmap).
  • Para escribir páginas de memoria en el área de intercambio si rara vez se utilizan.
  • Gestionar acciones diferidas.
  • Implementar diarios de transacciones para sistemas de archivos.

Básicamente, hay dos tipos de hilo del núcleo:

  • Tipo 1: el subproceso se inicia y espera hasta que el núcleo lo solicite para realizar una acción específica.
  • Tipo 2: una vez iniciado, el subproceso se ejecuta a intervalos periódicos, verifica la utilización de un recurso específico y toma medidas cuando la utilización excede o cae por debajo de un valor límite establecido. El kernel usa este tipo de subproceso para tareas de monitoreo continuo.
  1. Como el libro de Mauerer dice que los hilos del kernel son procesos, creo que deben ejecutarse en modo de usuario, en lugar de modo de kernel. (¿o me equivoco? ¿Puede un proceso ejecutarse en modo de usuario o en modo kernel en diferentes momentos, o solo en un modo?)

    Pero Bovet's Understanding Linux Kernel dice que los hilos del kernel se ejecutan solo en modo kernel (vea la cita a continuación). ¿Son los conceptos de "hilo del núcleo" en los dos libros el mismo concepto?

    Los sistemas Unix tradicionales delegan algunas tareas críticas para ejecutar procesos de manera intermitente, como el vaciado de cachés de disco, el intercambio de páginas no utilizadas, el servicio de conexiones de red, etc. De hecho, no es eficiente realizar estas tareas de manera estrictamente lineal; tanto sus funciones como los procesos del usuario final obtienen una mejor respuesta si se programan en segundo plano. Debido a que algunos de los procesos del sistema se ejecutan solo en el modo Kernel, los sistemas operativos modernos delegan sus funciones a los hilos del kernel , que no están gravados con el contexto innecesario del modo de usuario. En Linux, los hilos del kernel difieren de los procesos regulares de las siguientes maneras:

    • Los hilos de kernel se ejecutan solo en modo Kernel, mientras que los procesos regulares se ejecutan alternativamente en modo kernel y en modo usuario.
    • Debido a que los subprocesos del núcleo se ejecutan solo en modo Kernel, utilizan solo direcciones lineales mayores que PAGE_OFFSET. Los procesos regulares, por otro lado, usan los cuatro gigabytes de direcciones lineales, ya sea en modo de usuario o en modo kernel.
  2. El libro de Mauerer dice que los hilos del núcleo son iniciados directamente por el núcleo, y también parece decir que los demonios son sinónimos de hilos del núcleo. Así que creo que los demonios deben ser iniciados directamente por el núcleo.

    Pero https://unix.stackexchange.com/a/193918/674 dice que screenel demonio se inicia mediante screenla interfaz de usuario (consulte la cita a continuación). Creo que screenla interfaz de usuario es un proceso, en lugar del núcleo. ¿Son los conceptos daemonen el libro de Mauerer y en la respuesta vinculada el mismo concepto?

    Cuando comienzas por primera vez screen, en realidad estás iniciando una interfaz de usuario (ui), que por defecto creará un demonio (el administrador de sesión).

  3. En general, ¿cómo entiende los conceptos de "hilos de kernel", "proceso" y "daemon", sus relaciones y sus diferencias?

Tim
fuente
Tim, guau, estás haciendo una gran investigación, ya que te estoy observando desde hace unos días.
rɑːdʒɑ

Respuestas:

10

Primero: el crédito va /programming/15983872/difference-between-user-level-and-kernel-supported-threads

Los hilos de usuario y los hilos de Kernel son exactamente iguales. (Puede ver mirando / proc / y ver que los hilos del núcleo también están allí).

Un subproceso de usuario es aquel que ejecuta código de espacio de usuario. Pero puede llamar al espacio del kernel en cualquier momento. Todavía se considera un subproceso de "Usuario", a pesar de que está ejecutando código de kernel a niveles de seguridad elevados.

Un hilo de kernel es uno que solo ejecuta código de kernel y no está asociado con un proceso de espacio de usuario. Son como "demonios UNIX", excepto que son demonios solo del núcleo. Entonces se podría decir que el núcleo es un programa multiproceso. Por ejemplo, hay un hilo del núcleo para el intercambio. Esto obliga a todos los problemas de intercambio a "serializarse" en una sola secuencia.

Si un hilo de usuario necesita algo, llamará al núcleo, que marca ese hilo como inactivo. Más tarde, el hilo de intercambio encuentra los datos, por lo que marca el hilo del usuario como ejecutable. Más tarde aún, el "hilo de usuario" regresa del núcleo a userland como si nada hubiera pasado.

De hecho, todos los hilos comienzan en el espacio del núcleo, porque la operación clone () ocurre en el espacio del núcleo. (Y hay mucha contabilidad del kernel que hacer antes de que pueda 'regresar' a un nuevo proceso en el espacio del usuario).

rɑːdʒɑ
fuente