Je lisais à propos de l'utilisation de COW -approach après avoir fait fork
dans les systèmes modernes UNIX. Supposons que nous ayons un processus - P1. Il forks; nous obtenons un autre processus - P2. Leur mémoire virtuelle est soutenue par les mêmes pages physiques en raison de COW. Il y a une page où une variable statique globale (par exemple, en dehors de static long variable;
main
) se trouve (dans le .data segment) qui est soutenu par page physique A.Comment fonctionne COW after fork?
maintenant P1 change de variable globale statique; le noyau, après avoir traité l'erreur de protection, mappe une nouvelle page (page B) sur la mémoire virtuelle de P1 pour stocker cette variable modifiée. De la même manière que P2 modifie sa variable globale statique, le noyau, après avoir traité l'erreur de protection, mappe une nouvelle page (page C) sur la mémoire virtuelle de P1 pour stocker cette variable modifiée.
Maintenant, rien ne fait référence à la page A. Où se trouve-t-elle? Je suppose que ce n'est pas "suspendu dans les airs" en gardant une page physique hors d'usage, gaspillant ainsi de la mémoire?
Pourquoi ne pas simplement modifier A puisque seulement un le référence? Et pourquoi serait-il conservé dans la mémoire physique si rien ne l'utilise? –
@Sami, vous voulez dire que P2 pourrait simplement changer les drapeaux A'pages au lieu de mapper la nouvelle page "C"? Je pense que ce parent pourrait avoir plusieurs enfants donc A devrait rester en lecture seule? –