De l'architecture du noyau Linux de Mauerer,
Les threads du noyau sont des processus démarrés directement par le noyau lui-même. Ils délèguent une fonction du noyau à un processus distinct et l'exécutent là en «parallèle» aux autres processus du système (et, en fait, en parallèle à l'exécution du noyau lui-même). Les threads du noyau sont souvent appelés démons (du noyau) . Ils sont utilisés pour effectuer, par exemple, les tâches suivantes:
- Pour synchroniser périodiquement les pages de mémoire modifiées avec le périphérique de bloc d'où les pages proviennent (par exemple, les fichiers mappés à l'aide de mmap).
- Pour écrire des pages mémoire dans la zone de swap si elles sont rarement utilisées.
- Pour gérer les actions différées.
- Pour implémenter des journaux de transactions pour les systèmes de fichiers.
Fondamentalement, il existe deux types de threads du noyau:
- Type 1 - Le thread est démarré et attend jusqu'à ce que le noyau lui demande d'effectuer une action spécifique.
- Type 2 - Une fois démarré, le thread s'exécute à intervalles réguliers, vérifie l'utilisation d'une ressource spécifique et prend des mesures lorsque l'utilisation dépasse ou tombe en dessous d'une valeur limite définie. Le noyau utilise ce type de thread pour les tâches de surveillance continue.
Comme le livre de Mauerer dit que les threads du noyau sont des processus, je pense qu'ils doivent fonctionner en mode utilisateur, au lieu du mode noyau. (ou je me trompe? Un processus peut-il s'exécuter en mode utilisateur ou en mode noyau à des moments différents, ou dans un seul mode?)
Mais Bovet's Understanding Linux Kernel dit que les threads du noyau ne fonctionnent qu'en mode noyau (voir la citation ci-dessous). Les concepts de «fil du noyau» dans les deux livres sont-ils le même concept?
Les systèmes Unix traditionnels délèguent certaines tâches critiques à des processus exécutés par intermittence, notamment le vidage des caches de disque, l'échange de pages inutilisées, la maintenance des connexions réseau, etc. En effet, il n'est pas efficace d'effectuer ces tâches de manière strictement linéaire; leurs fonctions et les processus de l'utilisateur final obtiennent une meilleure réponse s'ils sont planifiés en arrière-plan. Étant donné que certains des processus système s'exécutent uniquement en mode noyau, les systèmes d'exploitation modernes délèguent leurs fonctions aux threads du noyau , qui ne sont pas encombrés par le contexte inutile du mode utilisateur. Sous Linux, les threads du noyau diffèrent des processus normaux des manières suivantes:
- Les threads du noyau s'exécutent uniquement en mode noyau, tandis que les processus réguliers s'exécutent alternativement en mode noyau et en mode utilisateur.
- Étant donné que les threads du noyau s'exécutent uniquement en mode noyau, ils utilisent uniquement des adresses linéaires supérieures à PAGE_OFFSET. Les processus normaux, en revanche, utilisent les quatre gigaoctets d'adresses linéaires, en mode utilisateur ou en mode noyau.
Le livre de Mauerer dit que les threads du noyau sont démarrés directement par le noyau, et il semble également dire que les démons sont des synonymes des threads du noyau. Je pense donc que les démons doivent être démarrés directement par le noyau.
Mais https://unix.stackexchange.com/a/193918/674 dit que
screen
le démon de est démarré parscreen
l'interface utilisateur (voir la citation ci-dessous). Je pense quescreen
l'interface utilisateur est un processus, au lieu du noyau. Les concepts dudaemon
livre de Mauerer et de la réponse liée sont-ils le même concept?Lorsque vous démarrez pour la première fois
screen
, vous démarrez en fait une interface utilisateur (ui), qui par défaut créera un démon (le gestionnaire de session).En général, comment comprenez-vous les concepts de "threads du noyau", "processus" et "démon", leurs relations et leurs différences?