Avant de discuter des détails concernant pdflush
, kjournald, and
kswapd` , obtenons d'abord un peu de contexte sur le contexte de ce dont nous parlons exactement en termes de noyau Linux.
L'architecture GNU / Linux
L'architecture de GNU / Linux peut être considérée comme 2 espaces:
Entre l' espace utilisateur et l' espace noyau se trouve la bibliothèque GNU C ( glibc
). Cela fournit l'interface d'appel système qui connecte le noyau aux applications de l'espace utilisateur.
L'espace du noyau peut être subdivisé en 3 niveaux:
- Interface d'appel système
- Code du noyau indépendant de l'architecture
- Code dépendant de l'architecture
L'interface d'appel système, comme son nom l'indique, fournit une interface entre le glibc
et le noyau. Le code du noyau indépendant architectural est composé des unités logiques telles que le VFS (Virtual File System) et le VMM (Virtual Memory Management). Le code dépendant de l'architecture est les composants qui sont spécifiques au processeur et à la plate-forme pour une architecture matérielle donnée.
Diagramme de l'architecture GNU / Linux
Pour le reste de cet article, nous concentrerons notre attention sur les unités logiques VFS et VMM dans l'espace noyau.
Sous-systèmes du noyau GNU / Linux
Sous-système VFS
Avec un concept de haut niveau sur la structure du noyau GNU / Linux, nous pouvons approfondir un peu plus le sous-système VFS. Ce composant est responsable de fournir l'accès aux différents périphériques de stockage de blocs qui finalement se mappent vers un système de fichiers (ext3 / ext4 / etc.) Sur un périphérique physique (HDD / etc.).
Diagramme de VFS
Ce diagramme montre comment un write()
processus d'un utilisateur traverse le VFS et se dirige finalement vers le pilote de périphérique où il est écrit sur le support de stockage physique. Ceci est le premier endroit où nous rencontrons pdflush
. Il s'agit d'un démon chargé de vider les blocs de données sales et de tampon de métadonnées sur le support de stockage en arrière-plan. Le diagramme ne le montre pas mais il y a un autre démon, kjournald
qui se trouve à côté pdflush
, effectuant une tâche similaire en écrivant des blocs de journal sales sur le disque. REMARQUE: les blocs de journal sont la façon dont les systèmes de fichiers comme ext4 et JFS gardent une trace des modifications apportées au disque dans un fichier, avant que ces modifications ne se produisent.
Les détails ci-dessus sont discutés plus loin dans ce document .
Aperçu des write()
étapes
Pour fournir un aperçu simple des opérations du système d'E / S, nous utiliserons un exemple où la fonction write()
est appelée par une application de l'espace utilisateur.
- Un processus demande d'écrire un fichier via l'
write()
appel système.
- Le noyau met à jour le cache de pages mappé au fichier.
- Un thread du noyau pdflush s'occupe de vider le cache des pages sur le disque.
- La couche de système de fichiers associe chaque tampon de bloc à un
bio struct
( voir 1.4.3, «Couche de bloc» à la page 23 ) et soumet une demande d'écriture à la couche de périphérique de bloc.
- La couche de périphérique de bloc reçoit les demandes des couches supérieures, effectue une opération d'élévateur d'E / S et place les demandes dans la file d'attente des demandes d'E / S.
- Un pilote de périphérique tel que SCSI ou d'autres pilotes spécifiques au périphérique se chargera de l'opération d'écriture.
- Un micrologiciel de périphérique de disque effectue des opérations matérielles telles que la recherche de tête, la rotation et le transfert de données vers le secteur sur le plateau.
Sous-système VMM
Poursuivant notre plongée plus profonde, nous pouvons maintenant examiner le sous-système VMM. Ce composant est chargé de maintenir la cohérence entre la mémoire principale (RAM), le swap et le support de stockage physique. Le principal mécanisme de maintien de la cohérence est bdflush
. Les pages de mémoire étant considérées comme sales, elles doivent être synchronisées avec les données présentes sur le support de stockage. bdflush
coordonnera avec les pdflush
démons pour synchroniser ces données avec le support de stockage.
Diagramme de VMM
Échanger
Lorsque la mémoire système se raréfie ou que le délai de permutation du noyau expire, le kswapd
démon tente de libérer des pages. Tant que le nombre de pages gratuites reste supérieur free_pages_high
, kswapd
ne fera rien. Cependant, si le nombre de pages gratuites chute en dessous, kswapd
le processus de récupération des pages démarre. Après kswapd
avoir marqué les pages pour la relocalisation, bdflush
prendra soin de synchroniser toutes les modifications en suspens sur le support de stockage, via les pdflush
démons.
Références et lectures complémentaires