2

Bien. Je suis assez confus avec le concept de memory mapped file utilisé dans virtual address spaces.Utilisation du fichier mappé en mémoire dans l'espace adresse virtuel

Dans le lien suivant j'ai googlé.

http://en.wikipedia.org/wiki/Virtual_address_space

J'ai trouvé un Maintenant ce qui est de ce fichier de mémoire mappée section

  Then the application's executable file is mapped into the Virtual Address Space. 
      Addresses in the process VAS are mapped to bytes in the exe file. 
      The OS manages the mapping: 

        0           4GB 
     VAS  |---vvvvvvv------------------------------------| 
     mapping  |-----| 
     file bytes  app.exe 

     The v's are values from bytes in the mapped file. 

a à voir avec un processus particulier dans un espace d'adressage virtuel particulier (confondu dans la dernière déclaration de la section ci-dessus)?

Pourquoi y a-t-il un besoin explicite d'inclure le code pour créer un fichier mappé en mémoire correspondant à un processus particulier?

+0

Il est décrit comment le code d'un exécutable que vous exécutez est chargé dans la mémoire en utilisant la cartographie de la mémoire. – Barmar

Répondre

3

La première chose que vous devez comprendre est la différence entre une adresse physique et une adresse virtuelle. Lorsque votre programme écrit des données dans une adresse de mémoire (virtuelle) particulière, l'adresse de votre écriture est traduite dans l'adresse réelle sur la puce RAM. Si une adresse physique n'est pas programmée pour une adresse virtuelle particulière, vous obtiendrez normalement une violation d'accès ou une erreur de segmentation.

La façon dont cela fonctionne est l'unité de gestion de la mémoire (MMU) génère une exception de l'UC qui provoque l'exécution de passer à un gestionnaire d'erreur du noyau. Dans le cas de violation d'accès, votre processus est terminé.

Le noyau est capable de faire d'autres choses intelligentes. Si votre processus est inactif, il peut copier une partie de la mémoire physique utilisée par votre processus dans un fichier d'échange (et supprimer les entrées du mmu), lorsque vous accédez auxdites adresses, l'exception de CPU n'annule pas votre programme. Au lieu de cela, le noyau va d'abord suspendre votre processus. Il va ensuite copier les données du fichier d'échange dans la mémoire, reprogrammer le MMU. Le noyau reprendra alors votre processus et le processus accédera à la mémoire comme si elle avait toujours été là. En ce qui concerne le processus, rien de spécial ne s'est produit. Ce processus est connu comme Demand Paging.

Lorsque vous mmap un fichier, le noyau effectue effectivement la pagination à la demande, mais à partir de votre fichier spécifié lu et non du fichier d'échange. Le processus est exactement le même. L'exception d'accès à la CPU entraînera la lecture des données du fichier dans la RAM à laquelle vous accédez en tant que mémoire normale. Lorsque vous fermez le fichier, la mémoire est réécrite dans le fichier désalloué. Le gros avantage est que vous pouvez utiliser les données du fichier avec des pointeurs.

Hope this helps

Questions connexes