Un processus peut utiliser jusqu'à 4 Go de mémoire virtuelle (y compris l'utilisateur et le noyau) mais lorsqu'il n'utilise pas la mémoire virtuelle, a-t-il la mémoire du noyau et de l'utilisateur dans la mémoire vive ?
Réponse
Trop de publicités?L'utilisation de la mémoire virtuelle n'est pas facultative, une application ne peut pas l'éviter. En supposant que nous parlions de la mémoire protégée x86, qui est ce que la plupart des systèmes d'exploitation actuels tels que Linux, OS X et Windows utilisent sur x86.
Fondamentalement, chaque processus voit un espace d'adressage virtuel (EAV) de 4 Go. Le système d'exploitation, en collaboration avec le matériel, établit des tables de descripteurs de pages (PDT) qui décrivent comment cet espace d'adressage virtuel est mappé, avec une granularité de page (généralement 4 Ko). Une page peut être mappée à la mémoire physique, elle peut être mappée à un fichier (ce qui signifie que lorsque le processus essaie de lire cette partie de la SVA, il sera piégé dans le système d'exploitation qui lira alors la page du fichier sur le disque et la placera en mémoire), ou elle peut ne pas être mappée du tout, auquel cas essayer d'accéder à cette partie de la SVA fera planter le processus. En outre, si la mémoire du noyau est mappée dans le processus, ce dernier ne peut pas y accéder directement et se plantera s'il tente de le faire.
De plus, le système d'exploitation peut utiliser un fichier de page, ou une partition d'échange, permettant au système d'exploitation de déplacer les pages de mémoire moins utilisées vers le disque et d'utiliser la mémoire pour quelque chose de plus utile. Encore une fois, s'il le fait, les PDT doivent être mis à jour en conséquence, et comme pour les fichiers mappés en mémoire, si le processus tente d'accéder à des pages qui ont été déplacées, il sera piégé par le système d'exploitation qui ramènera la page en mémoire. (Alors que la possibilité de swap est souvent confondue avec la mémoire virtuelle en soi, l'idée fondamentale derrière la mémoire virtuelle est le concept des adresses virtuelles distinctes des adresses de la mémoire physique).