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?)
la source
Réponses:
Volontier. Es-tu prêt?
Correct.
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.
Oui, un espace d'adressage virtuel.
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.
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.
Il n'y a pas de "si" . Chaque processus obtient 4 Go de mémoire virtuelle.
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).
Vous voulez probablement dire mémoire virtuelle, pas "adresse virtuelle" .
(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.
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.
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).
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.
la source
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:
la source