2017-02-06 3 views
0

En exécutant la commande "libre", je vois que la mémoire utilisée est:
total: 3.854.884
utilisé: 3752304
gratuitement: 102580
partagé: 352
tampons: 9252
mises en cache: 150908Comment la mémoire virtuelle peut-elle exister lorsqu'il n'y a pas d'espace d'échange?

-/+ tampons/cache: utilisé: 3592144
gratuit: 262740

Swap: 0 0 0

Mais en cours d'exécution htop, je vois qu'il ya beaucoup de processus en utilisant quantité de mémoire 4507M dans la colonne VIRT (mémoire virtuelle). La colonne RES (RAM physique utilisée par le processus) affiche 209M. SHR (mémoire partagée) est 5352M.

-Xmx pour le procédé est réalisé sous 2048m.

Comment la mémoire virtuelle être utilisée si l'espace d'échange est égal à zéro?

+0

Les fichiers mappés en mémoire seraient-ils inclus dans 'VIRT'? – Thilo

Répondre

3

La mémoire virtuelle de ces programmes (htop et similaires) comptent est juste la taille de l'espace d'adressage des processus ont demandé. Vous disposez de mémoire physique, de RAM réelle et d'un espace d'adressage virtuel qui mappe les adresses en tant que programmes d'espace utilisateur les voient dans la mémoire physique. Ils sont séparés. Un pointeur 0x0ff84560 ne fait probablement pas référence à cette partie de RAM. L'OS peut mettre en place une cartographie qui décide où dans la RAM vous faites réellement référence. Encore plus loin, il peut mettre en place le mapping avant qu'il ait RAM pour le sauvegarder. C'est un processus axé sur les événements. Le système d'exploitation configurera le mappage sur demande sans réel support, sans mémoire physique allouée et ne le mappera réellement à la vraie mémoire vive que lorsque vous essaierez d'utiliser la mémoire virtuelle.

La taille de la mémoire virtuelle est la taille de cette cartographie. Mais tout cela ne doit pas être soutenu par de la RAM physique, donc il peut être plus grand que la RAM, même s'il n'y a pas d'échange. Mais cela provoque des problèmes de programmes à essayer réellement utiliser plus de mémoire que de RAM. Ce n'est pas un problème s'ils le demandent seulement s'ils l'utilisent.

De plus, comme mentionné Thilo, la mémoire des fichiers mis en correspondance peuvent ajouter. Vous pouvez mapper un fichier de 100 To dans votre espace d'adressage virtuel sans problème. L'OS gère la logistique en arrière-plan: en apportant les parties dont vous avez besoin (les parties auxquelles vous essayez d'accéder) et en récoltant les parties nécessaires pour effacer la mémoire physique.

+0

Donc, htop me montre que le programme a demandé 4 Go de mémoire virtuelle mais ça ne va pas arriver quand même parce que l'espace de swap est 0? Cela explique les accidents. – Nav

+0

Ce n'est pas seulement parce que l'espace d'échange est 0. Les fichiers mappés en mémoire rendent cela un peu plus compliqué. Si vous faites la carte d'un fichier de 100 Go, le système d'exploitation pourrait être en mesure de le faire fonctionner, il sera vraiment lent car il doit effacer les choses et apporter de nouvelles choses souvent, et cela nécessite de mettre votre programme en pause. – Tyler

+0

Cela dépend du type de mémoire virtuelle demandé par le programme. – Tyler