GNU/Linux >> Tutoriels Linux >  >> Linux

Gestion de la mémoire Linux - Permutation, caches et VM partagées

Cet article fait partie de notre série de présentations du noyau UNIX en cours.

Dans l'article précédent de la série sur le noyau, nous avons discuté de la mémoire virtuelle Linux et de la pagination à la demande.

Bien que la mémoire virtuelle et la pagination à la demande soient les éléments constitutifs du système de gestion de la mémoire Linux, il existe divers autres concepts qui rendent la gestion de la mémoire Linux très puissante.

Dans cet article, nous allons essayer d'aborder certains de ces concepts (permutation, mise en cache et mémoire virtuelle partagée).

Je. Échange Linux

Supposons qu'il y ait une situation où un processus a besoin d'avoir une de ses pages virtuelles dans la mémoire physique, mais la mémoire physique n'a plus de place pour importer d'autres pages.

Que se passera-t-il dans ce cas ?

Eh bien, le système d'exploitation devra gérer cette situation en permettant à cette page d'être en mémoire physique. Mais pour que cela se produise, une page résidant déjà dans la mémoire physique doit être supprimée.

Désormais, si la page à supprimer provient d'une image exécutable ou d'un fichier de données et que la page n'a pas été écrite, elle peut facilement être supprimée, car chaque fois que nécessaire, la même page peut facilement être ramenée en mémoire physique à partir du même exécutable. image ou fichier de données.

Mais supposons que la page que le système d'exploitation va supprimer est celle sur laquelle a été écrit, alors ce type de page est connu comme une page sale.

Une page sale doit être conservée afin d'être utilisée ultérieurement. Lorsque les pages modifiées sont supprimées de la mémoire physique, elles sont enregistrées dans un fichier spécial appelé fichiers d'échange. C'est ce qu'on appelle échanger .

Le temps nécessaire pour accéder à une page d'échange est assez important si on le compare à la vitesse du processeur.

Nous voyons donc que le système d'exploitation devrait avoir un bon algorithme d'échange afin de décider de l'abandon ou de l'échange. Un algorithme d'échange inefficace peut conduire à un phénomène dans lequel le système d'exploitation est tellement occupé à échanger des fichiers, puis à lire à nouveau dans la mémoire physique qu'il consacre en fait très moins de temps au travail réel qui traite la demande. Ce phénomène est connu sous le nom de thrashing .

En outre, un ensemble de pages qu'un processus utilise en permanence est appelé ensemble de travail . Un bon algorithme d'échange laisserait rarement le système d'exploitation tomber en panne et garantirait également que l'ensemble de travail de tous les processus est toujours là dans la mémoire physique.

Linux décide quelles pages doivent être conservées en mémoire et quelles pages doivent être supprimées en utilisant un schéma de 'Le moins récemment utilisé ‘.

Dans ce schéma, chaque page de la mémoire physique est associée à un âge. L'âge change selon que la page est consultée ou non. Si la page est fréquemment consultée, cette page est censée être assez jeune, tandis que si une page n'est pas consultée, cette page vieillit. Les pages les plus anciennes sont proposées pour être échangées/éliminées de la mémoire physique.

II. Caches

Afin de tirer le meilleur parti du système, des processeurs et des systèmes d'exploitation rapides sont en cours de développement. Bien que ce soit une bonne chose, mais un aspect qui rend le processeur, le système d'exploitation et leur interaction plus rapides est le concept de caches.

Certains des caches importants de Linux sont décrits ci-dessous.

1. Cache d'échange Linux

Comme déjà discuté ci-dessus, seules les pages modifiées sont échangées car nous devons conserver les pages qui ont été modifiées. De plus, supposons que si une page a été modifiée et a été échangée, maintenant si la même page a été ramenée dans la mémoire physique et qu'il est maintenant nécessaire de l'échanger à nouveau mais que la page n'a pas été modifiée davantage, il n'est plus nécessaire de l'échanger. page. Jetez-le simplement car cette version de la page est déjà présente dans le fichier d'échange. Cela permet de gagner un temps considérable qui, autrement, aurait été perdu.

Maintenant, pour implémenter le concept ci-dessus, Linux utilise le cache d'échange.

  • Un cache d'échange n'est rien d'autre qu'une liste d'entrées de table de pages avec une entrée par page physique.
  • Chaque entrée correspond à une page échangée avec les informations sur le fichier d'échange dans lequel la page est conservée ainsi que son emplacement exact dans le fichier d'échange.
  • Si une entrée de table de pages dans le cache d'échange est différente de zéro, cela représente une page qui est conservée dans un fichier d'échange et cette page n'a pas été modifiée davantage.
  • Si une page a son entrée dans le cache d'échange et est ensuite modifiée, son entrée du cache d'échange est supprimée.
  • Ainsi, le cache ne contient des informations que sur les pages qui n'ont pas été modifiées depuis leur dernier échange.

Nous voyons donc que le cache d'échange aide beaucoup à augmenter l'efficacité du mécanisme d'échange.

2. Cache matériel

Comme nous l'avons déjà mentionné dans l'article précédent, un processeur lit les entrées de la table des pages pour convertir l'adresse virtuelle en adresse physique. Habituellement, un processeur stocke les informations des entrées de la table des pages dans un cache matériel .

Ce cache matériel se compose de tampons de recherche de traduction ou TLB s.

Chaque fois qu'un processeur a besoin de traduire une adresse virtuelle, il essaie d'extraire les informations d'entrée de table de pages à partir des TLB. S'il trouve l'entrée, il continue, mais si le processeur n'est pas en mesure de trouver une telle entrée, il indique au système d'exploitation qu'un échec TLB s'est produit et demande au système d'exploitation de réparer les choses.

Pour fournir ces informations d'absence de TLB au système d'exploitation, une sorte de mécanisme d'exception est utilisé, qui dépend du processeur. Maintenant, le système d'exploitation trouve l'entrée correcte et met à jour l'entrée TLB avec celle-ci. Lorsque l'exception est effacée (après que le système d'exploitation ait résolu le problème), le processeur essaie à nouveau de rechercher l'entrée dans les TLB et cette fois, il trouve une entrée valide.

3. Cache tampon Linux

Un cache de tampon contient des tampons de données utilisés par les pilotes de périphérique de bloc.

Un pilote de périphérique de bloc est un pilote qui fonctionne sur un bloc de données, c'est-à-dire qu'il est accessible en lisant ou en écrivant des morceaux ou des blocs de données fixes. Un cache tampon est indexé. L'identifiant de l'appareil est utilisé à des fins d'indexation.

Le cache tampon rend la lecture/écriture très efficace et rapide. Par exemple, considérons un périphérique bloc, par exemple un disque dur. Lire/écrire sur un disque dur nécessite des E/S de fichiers ce qui est assez coûteux si on le fait sur le disque dur à chaque fois qu'une lecture ou une écriture est effectuée. Ce cache tampon qui se trouve entre les deux permet de gagner du temps car les lectures et les écritures sont effectuées dessus et le reste est pris en charge par le cache.

Pour afficher l'échange, la mémoire, la page, les E/S de bloc, les interruptions, les disques et l'activité du processeur, vous pouvez utiliser des outils tels que vmstat ou sar.

III. Mémoire virtuelle partagée

Lorsque le code est écrit, les développeurs veillent à ce qu'aucun morceau de code ne soit répété inutilement. Par exemple, les fonctions sont utilisées dans les programmes afin que le même morceau de code puisse être appelé à tout moment depuis le code.

Un groupe de fonctions qui peuvent être couramment utilisées sont regroupées dans des bibliothèques. De là vient le concept de mémoire partagée qui est une fois chargée en mémoire et peut être utilisée par plusieurs processus.

Mémoire virtuelle facilite le partage de la mémoire par les processus, car les adresses physiques sont mappées via des tables de pages et il est tout à fait possible que le même numéro de cadre de page physique puisse être mappé dans la table de pages de plusieurs processus. Ce concept est connu sous le nom de mémoire virtuelle partagée .


Linux
  1. Windows - Dossier partagé entre l'invité Windows Qemu et l'hôte Linux ?

  2. Surveillance et gestion de la mémoire

  3. 5 logiciels de gestion scolaire gratuits et open source pour Linux

  4. Récupérer l'utilisation du processeur et l'utilisation de la mémoire d'un seul processus sous Linux ?

  5. Comment utiliser la mémoire partagée avec Linux en C

Surveillance du processeur et de la mémoire de Plesk

Comment vérifier la mémoire partagée Linux à l'aide de la commande ipcs

Gestion des packages Linux avec YUM et RPM

Gestion de la mémoire Linux - Mémoire virtuelle et pagination à la demande

Exemples de commandes ipcs sous Linux

Mémoire partagée Linux :shmget() vs mmap() ?