Donc, je comprends que chaque processus a son propre espace de mémoire virtuelle allant de 0x0 à 0xFF .... F. Ces adresses virtuelles correspondent à des adresses en mémoire physique (RAM). Pourquoi ce niveau d'abstraction est-il utile? Pourquoi ne pas simplement utiliser les adresses directes?
Je comprends pourquoi la pagination est bénéfique, mais pas la mémoire virtuelle.
Il y a plusieurs raisons à cela:
Si vous avez un binaire compilé, chaque fonction a une adresse fixe en mémoire et les instructions d'assemblage pour appeler les fonctions ont cette adresse codée en dur. Si la mémoire virtuelle n'existait pas, deux programmes ne pouvaient pas être chargés en mémoire et exécutés en même temps, car ils auraient potentiellement besoin d'avoir des fonctions différentes à la même adresse physique.
Si deux programmes ou plus s'exécutent en même temps (ou sont basculés entre les contextes) et utilisent des adresses directes, une erreur de mémoire dans un programme (par exemple, la lecture d'un mauvais pointeur) pourrait détruire la mémoire utilisée par l'autre processus, suppression de plusieurs programmes suite à un seul crash.
Sur une note similaire, il y a un problème de sécurité où un processus pourrait lire des données sensibles dans un autre programme en devinant à quelle adresse physique il se trouverait et en le lisant directement.
Si vous essayez de combattre les deux problèmes ci-dessus en paginant toute la mémoire d'un processus lorsque vous passez à un deuxième processus, vous encourez un massif succès de performance car vous devrez peut-être paginer toute la mémoire.
Selon le matériel, certaines adresses mémoire peuvent être réservées aux périphériques physiques (par exemple, la RAM vidéo, les périphériques externes, etc.) Si les programmes sont compilés sans savoir que ces adresses sont importantes, ils peuvent physiquement casser les périphériques connectés en lisant et écrire à leur mémoire. Pire encore, si cette mémoire est en lecture seule ou en écriture seule, le programme peut écrire des bits dans une adresse en s'attendant à ce qu'ils y restent, puis relire différentes valeurs.
J'espère que cela t'aides!
Réponse courte: Le code du programme et les données nécessaires à l'exécution d'un processus doivent résider dans la mémoire principale pour être exécutés, mais la mémoire principale peut ne pas être suffisamment grande pour répondre aux besoins d'un processus entier.
Deux propositions
(1) Utiliser une très grande mémoire principale pour alléger tout besoin d'allocation de stockage: ce n'est pas faisable en raison du coût très élevé.
(2) Mémoire virtuelle: elle permet aux processus qui ne sont pas entièrement en mémoire de s'exécuter au moyen d'une allocation de stockage automatique sur demande. Le terme mémoire virtuelle fait référence à l'abstraction de la séparation de la mémoire LOGIQUE - la mémoire vue par le processus - de la mémoire PHYSIQUE - la mémoire vue par le processeur. En raison de cette séparation, le programmeur doit être conscient uniquement de l'espace mémoire logique tandis que le système d'exploitation conserve deux ou plusieurs niveaux d'espace mémoire physique.
Plus:
Les premiers programmeurs informatiques ont divisé les programmes en sections qui ont été transférées dans la mémoire principale pendant une période de temps de traitement. Comme les langues de niveau supérieur sont devenues populaires, l'efficacité des programmes complexes a souffert de systèmes de superposition médiocres. Le problème de l'allocation du stockage est devenu plus complexe.
Deux théories pour résoudre le problème de la gestion inefficace de la mémoire ont émergé - allocation statique et dynamique. L'allocation statique suppose que la disponibilité des ressources mémoire et la chaîne de référence mémoire d'un programme peuvent être prédites. L'allocation dynamique repose sur l'augmentation et la diminution de l'utilisation de la mémoire en fonction des besoins réels du programme, et non sur la prévision des besoins en mémoire.
Les objectifs du programme et les progrès de la machine dans les années 60 ont rendu les prédictions requises pour l'allocation statique difficiles, voire impossibles. Par conséquent, la solution d'allocation dynamique a été généralement acceptée, mais les opinions sur la mise en œuvre étaient encore divisées.
Un groupe pensait que le programmeur devrait continuer d'être responsable de l'allocation de stockage, ce qui serait accompli par des appels système pour allouer ou désallouer de la mémoire. Le deuxième groupe a pris en charge l'allocation de stockage automatique effectuée par le système d'exploitation, en raison de la complexité croissante de l'allocation de stockage et de l'importance croissante de la multiprogrammation.
En 1961, deux groupes ont proposé un magasin de mémoire à un niveau. ne proposition demandait une très grande mémoire principale pour alléger tout besoin d'allocation de stockage. Cette solution n'était pas possible en raison du coût très élevé. La deuxième proposition est connue sous le nom de mémoire virtuelle.
cne/modules/vm/green/defn.html