J'ai une question concernant la fonctionnalité mmap. Lorsque mmap est utilisé en mode asynchrone où le noyau prend soin de conserver les données dans le fichier mappé sur le disque, est-il possible que les mises à jour précédentes écrasent les mises à jour ultérieures? Disons à l'instant T, nous modifions un emplacement dans la mémoire qui est mappé à un fichier sur le disque et à nouveau à l'instant T + 1, nous modifions le même emplacement dans la mémoire. Comme les écritures dans le fichier ne sont pas synchrones, est-il possible que le noyau prenne d'abord les modifications à l'instant T + 1 et puis prenne les modifications à l'instant T entraînant une incohérence dans le fichier mappé en mémoire?mmap écrit dans un fichier sur le disque (synchrone/asynchrone)
Répondre
Ce n'est pas vraiment possible. Le fichier est permis incompatible jusqu'à msync (2) ou munmap (2) - lorsque cela se produit, pages sales (modifiées) sont écrites à la page du disque par la page (parfois plus, dépend de système de fichiers en noyaux plus récents). msync() vous permet de spécifier le fonctionnement synchrone et l'invalidation des caches après l'écriture terminée, ce qui vous permet de vous assurer que les données dans cache sont les mêmes que les données dans le fichier. Sans cela, il est possible que votre programme verra des données plus récentes mais le fichier contient des informations plus anciennes - la situation plutôt difficile dépend de l'architecture de l'UC et de l'implémentation spécifique du système d'exploitation de ces routines.
La spécification du système d'exploitation peut aider. –
En général, non. Les écritures sont mises en mémoire tampon dans le cache de la page (ou du système de fichiers). Écrire deux fois au même emplacement signifie que les données sont écrites dans le même emplacement RAM. D'où le problème que vous décrivez n'est pas probable, autant que je sache –