Mappage d'adresses virtuelles et physiques dans Windows 32 bits

0

Corrigez-moi je me trompe.

Q1) Je crois comprendre qu'en mode 32 bits, nous obtenons un espace d'adressage virtuel de 4 Go. Est-ce parce que Windows 32 bits ne peut prendre en charge que 4 Go de RAM physique?

Q2) Chaque processus reçoit son propre espace d'adressage privé de 4 Go. Mode utilisateur 2 Go et noyau 2 Go. Le processus mappe-t-il l'intégralité de son code en mode utilisateur et les composants du système d'exploitation nécessaires pour qu'il puisse communiquer avec le processeur afin d'exécuter le code sont chargés en mode noyau?

Q3) Si un processus obtient son propre espace privé de 4 Go. Si je charge 3 processus, un total de 12 Go d'espace d'adressage. Aurai-je un problème de performances car je ne dispose que de 4 Go de RAM?

Mais comme adresse virtuelle est conçu pour répondre à la nécessité de processus en cas de moins de RAM. SO ma vraie question, lorsqu’un processus (application à processus unique) est chargé, il mappe tout son code à l’adresse virtuelle de 4 Go, même si l’application n’exécute actuellement qu’une partie du code.

Ce que je comprends, c’est que lorsqu’un processus est démarré, tout son code est chargé dans un espace d’adresse virtuel de 2 Go en mode utilisateur et 2 Go en plus, il charge les fichiers du noyau du système d’exploitation. Maintenant, en utilisant les tables de pages, l'adresse virtuelle est mappée sur l'adresse physique dans la RAM et le disque. Toute l'adresse virtuelle de 4 Go sera-t-elle mappée sur 4 Go de RAM physique et restera-t-elle dans le fichier de page? Si je refuse d'utiliser le fichier d'échange, cela signifie-t-il qu'un seul processus avec une adresse virtuelle de 4 Go peut s'exécuter sur un système d'exploitation 32 bits de 4 Go?

=============================================== ============================ Merci pour les réponses précédentes.

Je suis encore un peu confus quant à la façon dont l'espace d'adressage utilisateur et noyau est divisé.

1) Est-ce que l'espace d'adressage du noyau de 2 Go est partagé par tous les processus, car il concerne l'ensemble du système et est chargé au moment du démarrage? ou chaque processus obtient-il 2 Go d'espace d'adressage du noyau? 2) Je lis une application mal écrite peut consommer tout son espace adresse.? Est-ce que cela signifie qu'il n'y a plus de place pour que d'autres applications s'exécutent maintenant sur une machine de 4 Go? 3) Si un espace d'adressage du noyau est partagé par tous les processus, est-ce qu'il ne manque jamais d'espace d'adressage ou jamais parce que l'adresse du noyau reste (je pense) restée fixe en fonction de l'architecture du système d'exploitation et partagée par tous les processus. 4) En utilisant le commutateur USERVA, l’adresse du noyau est réduite à 1 Go uniquement pour les applications avec adresse étendue. Pourquoi ne le fait-il pas pour tous les processus si l'espace d'adressage du noyau si 2 Go (ce qui, je pense) est partagé entre tous les processus? 5) Comment différencions-nous exactement la mémoire virtuelle b / w et le sace d’adresses virtuelles? ? Si une application nécessite 5 Go de mémoire selon devloper, ne sera-t-elle pas exécutée sur une machine 32 bits avec une adresse de 2 Go (est-il correct de dire que la mémoire virtuelle du processus = l'espace d'adressage virtuel du processus?)

Aman Yadav
la source
la plupart de ces réponses ont été fournies à votre question précédente Gestion de la mémoire dans Windows 32 bits . Les adresses virtuelles de 3 processus ne totalisent pas 12 Go, car elles ne sont pas mappées linéairement, sinon des tonnes de mémoire seraient gaspillées lorsqu'un processus utilise seulement 10 Mo de RAM mais consomme l'intégralité du bloc d'adresses de 4 Go. Si vous ouvrez le gestionnaire de tâches, vous constaterez qu'il existe des milliers de processus. Cela signifie-t-il que l'ordinateur a besoin de plusieurs To en RAM?
phuclv

Réponses:

0

Corrigez-moi je me trompe.

Volontier. Es-tu prêt?


Q1) Je crois comprendre qu'en mode 32 bits, nous obtenons un espace d'adressage virtuel de 4 Go.

Correct.

Est-ce parce que Windows 32 bits ne peut prendre en charge que 4 Go de RAM physique?

Non, la taille de la mémoire virtuelle est indépendante de la taille de la mémoire physique ou installée.
Ces quantités ne sont identiques que parce qu'elles utilisent toutes deux des valeurs (pour les adresses) d'une largeur de 32 bits. Un processeur peut être conçu pour avoir une taille d'adresse virtuelle différente de sa taille d'adresse physique. Cela a été fait par l'IIRC quand les dimensions et les coûts du matériel étaient beaucoup plus importants qu'aujourd'hui.


Q2) Chaque processus reçoit son propre espace d'adressage privé de 4 Go.

Oui, un espace d'adressage virtuel.

Mode utilisateur 2 Go et noyau 2 Go.

Non, le "mode utilisateur" se rapporte à l'état opérationnel de la CPU, c'est-à-dire aux modes de la CPU. La mémoire n'a pas de "mode utilisateur" (ni de "mode noyau").
La mémoire virtuelle est divisée en espace utilisateur et en espace noyau.

Le processus mappe-t-il l'intégralité de son code en mode utilisateur et les composants du système d'exploitation nécessaires pour que ce processus communique avec le processeur afin d'exécuter le code sont chargés en mode noyau?

Cette question n'a de sens que si "mode" est remplacé par "espace".

Le noyau est chargé dans la mémoire physique lors du démarrage.
L’exécution du noyau est ce qui contrôle le système, par exemple le démarrage et la gestion des processus.
Le noyau est mappé dans l'espace d'adressage virtuel de chaque processus. C'est pourquoi une partie de la mémoire virtuelle du processus est "l'espace noyau".

Le code du programme et les bibliothèques (partagées) sont mappés à la mémoire virtuelle dans l'espace utilisateur.

Le système d'exploitation ne "communique pas avec le processeur" (ni aucun processus).
Le processeur / CPU exécute des instructions. Il n'y a pas de "communication" avec la CPU.
Un processus est un travail ou une tâche conceptualisé auquel sont allouées des ressources telles que la mémoire (à la fois virtuelle et physique) et le temps CPU planifié.
La seule interaction entre un processus et le processeur / CPU est l'exécution d'instructions pour ce processus. L'interaction entre le noyau et le processeur / CPU correspond à l'exécution d'instructions pour ce noyau et au routage des exceptions et des interruptions.


Q3) Si un processus obtient son propre espace privé de 4 Go.

Il n'y a pas de "si" . Chaque processus obtient 4 Go de mémoire virtuelle.

Si je charge 3 processus, un total de 12 Go d'espace d'adressage. Aurai-je un problème de performances car je n'ai que 4 Go de RAM?

Pas du tout probable, car les processus classiques utilisent rarement toute leur mémoire virtuelle. Et même s’ils le faisaient, un magasin de sauvegarde (par exemple, le fichier de pagination ou l’espace de permutation) permettait de gérer les situations où il y avait moins de mémoire physique que l’espace d’adresse virtuel (qui était la raison initiale de l’utilisation de la mémoire virtuelle).


Mais comme adresse virtuelle est conçu pour répondre à la nécessité de processus en cas de moins de RAM.

Vous voulez probablement dire mémoire virtuelle, pas "adresse virtuelle" .

SO ma vraie question, lorsqu’un processus (application à processus unique) est chargé, il mappe tout son code à l’adresse virtuelle de 4 Go, même si l’application n’exécute actuellement qu’une partie du code.

(Pourquoi votre "vraie question" n'est-elle pas numérotée?)
Je n'ai pas de réponse définitive, mais je m'attendrais à ce qu'elle charge tout le programme, afin d'effectuer toute relocalisation, ainsi que de résoudre tout lien externe ( par exemple aux bibliothèques).
Tout ce qui est chargé doit être mappé, c'est-à-dire une mémoire physique allouée.

Ce que je comprends, c’est que lorsqu’un processus est démarré, tout son code est chargé dans un espace d’adresse virtuel de 2 Go en mode utilisateur et 2 Go en plus, il charge les fichiers du noyau du système d’exploitation.

Là encore, vous abusez du "mode utilisateur" .
Le chargement du code du noyau est effectué au démarrage, et non au démarrage d'un processus.

Maintenant, en utilisant les tables de pages, l'adresse virtuelle est mappée sur l'adresse physique dans la RAM et le disque. Toute l'adresse virtuelle de 4 Go sera-t-elle mappée sur 4 Go de RAM physique et restera-t-elle dans le fichier de page?

Non, les tables de pages mappent uniquement la mémoire virtuelle sur la mémoire physique (en unités de pages). Il n'y a pas de mappage sur "disque" . Cela ressemble à une idée fausse commune sur le fonctionnement du fichier d'échange et de la mémoire virtuelle.
Le fichier de page est un magasin de sauvegarde. Il contient temporairement le contenu des pages de mémoire virtuelle qui ne peut pas être résident (c.-à-d. Mémoire physique allouée).

Si je refuse d'utiliser le fichier d'échange, cela signifie-t-il qu'un seul processus avec une adresse virtuelle de 4 Go peut s'exécuter sur un système d'exploitation 32 bits de 4 Go?

Non, car généralement, un processus n'utilise pas l'intégralité de son espace d'adressage virtuel et n'exige donc pas 4 Go de mémoire physique.
J'ai vu plus de deux douzaines de processus s'exécuter sur un système Linux 32 bits avec seulement 512 Mo de RAM d'installation et aucun fichier d'échange.

sciure
la source
0

Q1: Non, c'est parce qu'un registre 32 bits ne peut contenir que 4 Go d'adresses uniques.

Q2: incorrect, il n'y a pas de division de la mémoire utilisateur en utilisateur et noyau. Le noyau n'est pas dans l'espace d'adressage du processus.

Q3: Oui, Windows remplacera au besoin les pages de mémoire référencées les plus anciennes.

Vraie question: oui, un processus ne peut pas démarrer sans le mappage pour échanger l'espace de toute sa mémoire, de sorte qu'il peut être échangé à tout moment, en totalité ou en partie.

Pour le reste, je vous suggère de lire d'abord sur Wikipedia:

harrymc
la source