Je souhaite conserver l'espace d'adressage virtuel réservé dans mon processus pour la mémoire qui était précédemment utilisée mais qui n'est pas actuellement nécessaire. Je m'intéresse à la situation où le noyau de l'hôte est Linux et il est configuré pour empêcher les surcharges (ce qu'il fait par la comptabilité détaillée de toute la mémoire engagée).Est-ce que mmap/mprotect-readonly zero pages compte pour la mémoire validée?
Si je veux juste éviter les données que ma demande n'utilise plus d'occuper la mémoire physique ou se permuté sur le disque (gaspillage de ressources soit façon), je peux madvise
le noyau qu'il est inutile, ou mmap
nouvelles zéro pages sur en haut. Mais aucune de ces approches ne réduira nécessairement la quantité de mémoire qui compte comme commise, que d'autres processus sont alors empêchés d'utiliser. Que se passe-t-il si je remplace les pages par de nouvelles pages zéro marquées en lecture seule? Mon intention est qu'ils ne comptent pas dans la mémoire validée, et que je puisse ensuite utiliser mprotect
pour les rendre accessibles en écriture, et que cela échouerait si leur écriture dépassait la limite de mémoire validée. Est-ce que ma compréhension est correcte? Est-ce que ça va marcher?
Une page en lecture seule ne doit pas être considérée dans un processus de validation (je n'ai pas de référence à portée de main, donc ce n'est pas une réponse), et Linux fournit le drapeau MAP_NORESERVE qui devrait vous donner un garantie. Mais je dois demander: pourquoi ressentez-vous le besoin de réserver de la mémoire qui n'est pas utilisée? – Anon
Les mauvaises choses (tm) se produiraient si les mêmes adresses virtuelles étaient allouées par 'mmap' (au hasard) sans que le programme en soit conscient. :-) En ce qui concerne 'MAP_NORESERVE', je m'inquiète que cela empêche les pages d'être comptées même après que je les ai protégées par écrit plus tard. Je suppose que je pourrais juste «mmap» sur eux encore avec de nouvelles pages zéro. –
Quelles mauvaises choses arriveraient? Pourquoi votre programme n'a-t-il jamais besoin de réutiliser l'espace d'adressage utilisé précédemment? Cela semble très inhabituel. – Angus