2016-10-18 2 views
3

Un fichier est mis en correspondance avec le système de l'appel:Quels octets du fichier restent mappés?

mmap(65536, 32768, READ, FLAGS, fd, 0) 

pages sont 8 Ko, donc 4 pages d'une valeur du fichier ont été mis en correspondance (32768/8k = 4 pages). Ensuite, l'appel suivant est effectué:

munmap(65536, 8192) 

Qui supprime la partie spécifiée de la mappe de mémoire. Quels octets du fichier restent mappés? La clé de réponse indique que les pages 2 et 3 restent, donc seuls les octets 16384 à 32767 restent; Cependant, je ne suis pas sûr que ce soit juste. Puisque l'argument len (deuxième argument) de la commande munmap est de 8192 octets, la page 0 doit-elle être supprimée, laissant les octets 8192 à 32767?

+1

Votre logique me semble juste. Leur réponse serait correcte si la taille de 'munmap' était' 8193'. – Barmar

+0

@duskwuff Selon http://pubs.opengroup.org/onlinepubs/009695399/functions/munmap.html, 'addr' doit être un multiple de la taille de la page, mais il ne dit rien sur' len'. – Barmar

+0

@Barmar Mon erreur. Mal lire la documentation. – duskwuff

Répondre

1

Vous et la clé de réponse vous avez tort, mais de différentes manières.

Les pages de mémoire sur la plupart des systèmes sont 4 Ko (4096 octets), pas 8 Ko. Je n'ai jamais entendu parler d'un système avec 8 pages de mémoire KB.

Cela fait l'ensemble du mappage de 32768 octets sortir à 8 pages. En démappant les 8192 premiers octets (2 pages), les 6 pages restantes (2 à 8) resteraient en place.