Je suis en train de lire Operating Systems Concept et j'en suis au 8ème chapitre! Cependant, je pourrais utiliser des éclaircissements ou m'assurer que ma compréhension est correcte.
Adresses logiques: les adresses logiques sont générées par la CPU, conformément au livre. Qu'est-ce que cela signifie exactement? (Dans un système d’adresse généré par execute.) Je suppose que lorsque le code est compilé pour un programme, le programme a non idée où le code sera chargé en mémoire. Tout ce que le compilateur fait est d’établir une esquisse générale de la structure du programme et de la manière dont l’image doit être agencée, mais ne lui attribue aucune adresse réelle. Lorsque le programme est exécuté, la CPU prend cette image de présentation créée par le compilateur et attribue des adresses (logiques) à celles générées à partir du code.
Adresses physiques: les adresses physiques ne sont générées qu'après que la CPU ait généré un ensemble d'adresses logiques (consistant en une adresse de base et un décalage). Les adresses logiques passent par le MMU ou un autre périphérique et quelque part sur la ligne, les adresses logiques sont mappées sur des adresses physiques RAM.
Quelle est alors la différence réelle? Je peux voir un avantage. L'utilisation d'adresses logiques donne plus de liberté aux applications. Si les adresses physiques étaient codées en dur, le succès du programme dépendrait fortement de l'ordinateur physique, des adresses RAM disponibles, etc.
L’utilisation d’adresses logiques converties en adresse physique n’impose-t-elle pas deux étapes au lieu d’une à une, et donc davantage au-dessus de la tête?
Où résident les adresses logiques après la génération? Ils peuvent exister dans un registre de la CPU pendant que celle-ci traite un processus, mais avant et après, où vont-ils? Je comprends que cela dépend de la mise en œuvre. Je suppose qu'ils peuvent être stockés dans un espace de registre spécial ou dans une mémoire tampon de la CPU, telle qu'un TLB, correct? Sinon, la table peut exister dans la RAM elle-même, et la CPU ne conserve qu'un pointeur/une adresse sur l'adresse de base de la table dans la RAM, correct?
Il semble que contenir les adresses dans RAM est contre-productif par rapport aux adresses logiques de la mémoire. Je ne peux que supposer que ma compréhension est incorrecte.
Cette réponse n’est nullement exhaustive, mais elle peut l’expliquer suffisamment pour que les choses cliquent.
Dans les systèmes de mémoire virtuelle, il existe une déconnexion entre les adresses logiques et physiques.
Une application peut recevoir un espace d'adressage virtuel de (disons) 4G. C'est sa mémoire utilisable et il est libre de l'utiliser à sa guise. C'est un joli bloc de mémoire contigu (du point de vue de l'application).
Cependant, ce n'est pas l'application seulement en cours d'exécution, et le système d'exploitation doit assurer la médiation entre eux. Sous ce joli modèle contigu, de nombreux mappages sont en cours pour convertir les adresses logiques en adresses physiques.
Avec ce mappage, le système d'exploitation et le matériel (à partir de maintenant, nous appellerons ces couches inférieures) sont libres de placer les pages de l'application où bon leur semble (dans la mémoire physique ou sur le stockage secondaire).
Lorsque l'application tente d'accéder à la mémoire à l'adresse logique 50, les niveaux inférieurs peuvent la convertir en adresse physique à l'aide de tables de traduction. Et, s'il tente d'accéder à la mémoire logique qui a été permutée sur le disque, une erreur de page est générée et les niveaux inférieurs peuvent remettre les données pertinentes en mémoire, à l'adresse physique souhaitée.
Au mauvais vieux temps, quand vous n'aviez que des adresses physiques, le code devait pouvoir être déplacé (ou corrigé au chargement) car il pouvait être chargé n'importe où. Avec la mémoire virtuelle, ce code (et ces données) peuvent se trouver à l'emplacement de mémoire logique 50 dans une douzaine de processus différents à la fois - c'est réel physique l'adresse sera différente.
Il peut même être partagé de sorte qu'une copie physique soit présente simultanément dans l'espace adresse de nombreux processus. C’est le noeud du code partagé (nous n’utilisons donc pas plus de mémoire physique que nécessaire) et de mémoire partagée pour permettre une communication facile entre processus.
Bien sûr, il est moins efficace qu'un environnement à adresse physique pure, mais les fabricants de CPU tentent de le rendre aussi incroyablement efficace que possible, car il est très utilisé. Les avantages loin l'emportent sur les inconvénients.
adresse logique est l'adresse relative au programme. Il indique la quantité de mémoire qu'un processus particulier prendra, mais pas quelle sera l'emplacement exact du processus et cet emplacement exact que nous allons générer en utilisant un mappage. Cette adresse est appelée adresse physique.
Adresse logique: - Adresse logique générée par la CPU. lorsque nous donnons le problème à l'ordinateur, notre ordinateur le transmet au processeur par le biais d'une adresse logique. Cette adresse n'est pas connue sous le nom d'adresse logique.
Adresse physique: lorsque notre processeur crée un processus et résout notre problème, nous stockons les données dans la mémoire secondaire via une adresse appelée adresse physique.
Une adresse logique est une référence à l'emplacement de la mémoire, indépendamment de l'affectation actuelle des données à la mémoire. Une adresse physique ou absolue est un emplacement réel dans la mémoire principale.
C'est au chapitre 7.2 de Stallings.
Espace d'adressage physique vs logique
Une adresse générée par la CPU est généralement référencée en tant qu’adresse logique, alors que l’adresse vue par l’unité de mémoire, c’est-à-dire une chargée dans le registre d’adresses de mémoire de la mémoire, est communément référencée en tant qu’adresse physique. génère les mêmes adresses logiques et physiques.Toutefois, le schéma de liaison des adresses d’exécution entraîne des adresses logiques et physiques différentes.
L’ensemble des adresses logiques générées par un programme est appelé espace d’adresses logiques, tandis que l’ensemble des adresses physiques correspondant à ces adresses logiques est l’adresse physique. Maintenant, le mappage de l’exécution d’une adresse virtuelle à une adresse physique est effectué par Dispositif matériel appelé unité de gestion de la mémoire. Dans le cas du mappage du registre de base, on parle de registre de relocalisation. La valeur du registre de relocalisation est ajoutée à l'adresse générée par un processus utilisateur au moment où il est envoyé à la mémoire. Cette situation à l’aide de l’exemple suivant: Si le registre de base contient la valeur 1000, l’utilisateur tentant alors de localiser l’adresse 0 de manière dynamique est déplacé vers l’emplacement 1000, l’accès à l’emplacement 346 est mappé sur l’emplacement 1346.
Le programme utilisateur ne voit jamais l'espace d'adressage physique réel, il traite toujours avec les adresses logiques. Comme nous avons deux types d'adresses différents, l'adresse logique se situe dans la plage (0 à max) et les adresses physiques dans la plage (R à R + max). où R est la valeur du registre de relocalisation. L'utilisateur génère uniquement des adresses logiques et pense que le processus s'exécute dans une plage allant de 0 à 0. Comme il ressort clairement du texte ci-dessus que le programme utilisateur fournit uniquement des adresses logiques, ces adresses logiques doivent être mappées à l'adresse physique avant leur utilisation.
Au mieux de ma mémoire, une adresse physique est une adresse explicite définie dans une adresse pierre, alors qu'une adresse logique consiste en un pointeur de base et un offset.
La raison est telle que vous l'avez essentiellement spécifiée. Il permet non seulement la segmentation des programmes et des processus en threads et données, mais également le chargement dynamique de tels programmes et le pseudo-parallélisme au moins, sans entrelacement des instructions en mémoire.
J'ai trouvé un article à propos de l'adresse logique vs physique dans le système d'exploitation, ce qui explique clairement ce sujet.
L'adresse logique est générée par la CPU pendant l'exécution d'un programme. L'adresse logique est l'adresse virtuelle car elle n'existe pas physiquement, elle est donc également appelée adresse virtuelle. Cette adresse est utilisée comme référence pour accéder à l'emplacement de la mémoire physique par CPU. Le terme espace d'adresses logiques est utilisé pour l'ensemble de toutes les adresses logiques générées par une perspective de programmes. Le périphérique matériel appelé unité de gestion de la mémoire est utilisé pour mapper une adresse logique à son adresse physique correspondante.
Adresse physique identifie un emplacement physique des données requises dans une mémoire. L'utilisateur ne traite jamais directement avec l'adresse physique, mais peut y accéder par son adresse logique correspondante. Le programme utilisateur génère l'adresse logique et pense que le programme est exécuté dans cette adresse logique, mais il a besoin d'une mémoire physique pour son exécution. L'adresse logique doit donc être mappée sur l'adresse physique bu MMU avant Le terme espace d'adressage physique est utilisé pour toutes les adresses physiques correspondant aux adresses logiques d'un espace d'adressage logique.
Source: www.geeksforgeeks.org