Pour autant que je comprenne la pagination et l'échange, ce sont des concepts complètement différents. Si l'échange signifie qu'un processus se trouve entièrement dans la mémoire physique ou sur le disque dur, les parties de pagination d'un processus peuvent se trouver dans la mémoire physique et d'autres parties sur le disque dur.
Mais pourquoi Linux a-t-il alors besoin d'une partition de swap? Si la mémoire physique est pleine, certains processus seront externalisés sur le disque dur et un nouveau processus sera mappé de la mémoire virtuelle à la mémoire physique.
Je ne comprends tout simplement pas pourquoi on a besoin d'une partition d'échange (ou d'échange en général) alors?
Ou est-ce juste une question de terminologie et swap partition == virtual memory
?
la source
Réponses:
Oui, c'est juste une question de terminologie, dans de nombreux cas une partition de swap est utilisée comme mémoire virtuelle.
La raison pour laquelle les systèmes UNIX et UNIX préfèrent les partitions d'échange aux fichiers d'échange est qu'ils peuvent être contigus, ce qui réduit les temps de recherche par rapport à un fichier d'échange qui peut être fragmenté.
la source
Je ne sais pas d'où vient l'idée que «l'échange signifie qu'un processus est soit complètement dans la mémoire physique, soit sur le disque dur». Ce sens n'a pas été utilisé depuis quelques décennies. Citant Wikipédia :
En effet, dans tout contexte impliquant Linux (ou d'autres systèmes Unix d'ailleurs), la pagination et l' échange sont à peu près synonymes. Les deux se réfèrent à une utilisation de la mémoire virtuelle où les données de page peuvent être stockées dans la RAM ou sur le disque. (Une page fait 4 Ko sur n'importe quel appareil que vous êtes susceptible de rencontrer.) Le programme utilisant la page de mémoire ne se soucie pas ou ne sait même pas où les données sont stockées, il continue simplement à utiliser l'adresse virtuelle. Le noyau transfère les données entre la RAM et le disque et met à jour les tables MMU au fur et à mesure afin que l'entrée de l'adresse virtuelle pointe vers une page physique en mémoire, ou contient une valeur spéciale qui oblige le processeur à exécuter du code du noyau qui chargera les données appropriées à partir du disque.
La pagination fait référence à ce processus générique. L'échange fait référence au cas où les données sur disque se trouvent dans une zone dédiée: la zone d'échange (une partition d'échange ou un fichier d'échange). La pagination peut également être effectuée entre la RAM et un fichier, et dans ce cas, elle n'est généralement pas appelée échange . Par exemple, lorsque vous exécutez un programme, le code doit être chargé en mémoire pour être exécuté; si une page de code doit être supprimée de la RAM pour faire de la place à autre chose, il n'est pas nécessaire d'écrire cette page dans la zone de swap, car elle peut être rechargée à partir du fichier programme. (Cela peut être fait pour toutes les données en lecture seule, pas seulement le code de programme.)
Si la mémoire physique est (presque) pleine, le noyau recherche une page en RAM (pas un processus entier) qui n'a pas été utilisée récemment. Si cette page reproduit le contenu d'un fichier disque (il y a des tables dans le noyau pour l'indiquer), la page peut être récupérée. Sinon, la page est écrite pour être échangée, puis récupérée. Dans les deux cas, le noyau met à jour l'entrée dans la table de mémoire virtuelle du processus (qui devient la table MMU pendant que le processus s'exécute) pour la marquer comme non dans la RAM et peut ensuite réutiliser la page physique pour autre chose (un programme différent ou une autre page de le même programme).
la source
La fonction de mémoire virtuelle / pagination permet à un noyau de «virtualiser» la mémoire dans les processus de l'espace utilisateur. Le noyau peut prendre des pages de la mémoire physique et les organiser par pagination afin qu'elles apparaissent contiguës à un processus de l'espace utilisateur.
Une limite peut être définie sur la mémoire d'un processus de l'espace utilisateur et si le processus va au-delà, une "erreur de page" se produit, ce qui provoque une exception de CPU qui rebondit sur le noyau. Cela empêche le programme de l'espace utilisateur de jouer avec la mémoire allouée au noyau ou à d'autres programmes, sans l'autorisation du noyau.
Généralement, les programmes de l'espace utilisateur demandent au noyau d'étendre cette limite via des interfaces bien définies (appelées par les fonctions C
malloc()
etfree()
par exemple.). Le noyau est responsable du suivi de la quantité et de la mémoire allouée à un programme.Ce mécanisme de "défaut de page" peut également permettre au noyau d'échanger la page à laquelle le processus tentait d'accéder avec une à partir du disque, si le noyau est capable de surcharger la mémoire (et que Windows et Linux le prennent en charge), c'est pourquoi il est appelé échange. Si l'accès à la mémoire était en effet invalide (c'est-à-dire que le processus tente d'accéder à la mémoire qu'il n'a pas demandé en premier), alors le processus sera généralement tué avec un SIGSEGV.
Ainsi, le «swapping» est une fonctionnalité supplémentaire (sous Linux, vous pouvez réellement la désactiver entièrement si vous le souhaitez) qui dépend de la mémoire virtuelle / pagination, mais n'est pas requise simplement parce qu'un processeur possède une mémoire virtuelle / pagination. Les concepts ne sont pas les mêmes, mais l'échange dépend de la pagination / mémoire virtuelle pour exister.
De plus, après avoir lu de plus près votre question, "paging" est parfois utilisé comme synomyme de "swapping" - mais je n'ai jamais entendu parler de "swapping" signifiant que la mémoire de tout le processus est permutée vs. "paging" signifiant seulement une partie de il est échangé.
La «mémoire virtuelle» est de la mémoire physique, juste «remappée». Le matériel MMU ne peut pas être directement mappé à un périphérique de stockage. La MMU peut renvoyer une erreur qui indique au noyau qu'un processus a tenté d'accéder à la mémoire qu'il ne devrait pas avoir - et le noyau peut utiliser ce mécanisme pour voir qu'un processus veut récupérer quelque chose du disque qu'il pensait être en mémoire, puis faire le " échanger". Le fait est que c'est le système d'exploitation qui décide d'enregistrer les pages sur le disque afin qu'il puisse utiliser ces pages pour d'autres processus, pas le matériel.
la source
En général, la partition de swap n'est pas égale à la mémoire virtuelle.
Les processus peuvent nécessiter plus de mémoire que la mémoire physique réelle, les développeurs de système d'exploitation ont donc décidé de supposer qu'il y avait plus de mémoire dans le système, appelée «mémoire virtuelle».
Cette mémoire virtuelle est essentiellement de la mémoire physique et une partie du disque. Cette partie du disque est appelée "swap" sous Linux.
Les développeurs ont également proposé que l'utilisation de la partie de la mémoire virtuelle située sur le disque dur soit aussi faible que possible. Pour le plaisir, toute la mémoire virtuelle était divisée en petites portions appelées "pages". Beaucoup de pages sont utilisées à faible débit, ces pages doivent être écrites dans la partie de la mémoire virtuelle du disque dur. Cette opération est appelée "échange". Le système d'exploitation doit garder une trace des pages qui ne sont pas dans la mémoire physique pour les trouver en cas de besoin. Une erreur de page se produit lorsqu'un programme souhaite écrire / lire une partie de la mémoire qui est permutée.
Pour répondre à votre question: Linux a besoin d'une partition de swap pour échanger certaines pages de mémoire et vous pouvez voir une statistique d'utilisation de la mémoire virtuelle avec
vmstat
:La colonne «swap» affiche les statistiques swap out et in. Aussi ce lien explique la mémoire virtuelle et l' utilisation de
vmstat
aussi bien.la source