jdh a écrit :...
L'écriture vers le swap suppose que le swap n'est pas utilisée et qu'il est d'une taille au moins égal à la mémoire vive.
(Je vois mal comment un système pourrait écrire sur le swap si le swap est déjà en cours lui-même d'utilisation ...)
...
Finalement, la remarque de jdh n'est pas anodine.
Tout d'abord, lors du chargement d'un programme le fichier est vérouillée (cf. ci-dessous), des structures de données sont créés en RAM ainsi que quelques pages du programme (vous pouvez consulter le code de execve).
Vérouillée : vous pouvez essayer de supprimer le fichier d'un programme sur le disque alors qu'il est en cours exécution vous constaterez que ce n'est pas possible, même en étant root. Il peut être renommé, mais vu qu'il est accédé par son inode ce n'est pas un problème.
Lors d'un défaut de page (PAGE FAULT) la page est recherchée sur le disque, et vu que le fichier du programme (via son inode) est vérouillé par le système il sera toujours là.
L'algo de LRU (Least Recently Used) va gérer un age des pages et, quand cela est nécessaire (pas assez de RAM), il va supprimer les "vieilles" pages des programmes.
Ce que je veux dire c'est qu'il ne va pas les mettre dans le SWAP. Elles sont toujours dans le fichier du programme qui est vérouillé ... donc toujours accessible en lecture.
Du coup, qu'est-ce qui est mis dans le SWAP ?
Dans le SWAP il y a : les dirty pages, soit les pages modifiées et pas écrites. Et c'est encore l'algo LRU qui est utilisé.
Dans les dirty pages il peux y avoir, entre autre, les données du programme (plutôt du processus), les buffers des fichiers, etc.
Du coup, si le SWAP est trop rempli de dirty page et que l'on veut hirberner ... comment fait-on ?
Et bien ça plante !
Du coup, un swap de la taille de la RAM pour assurer une hibernation n'est pas garanti (a moins de ne pas utilisé le SWAP car la RAM est suffisante ...).
Dans le cas où le SWAP est utilisé, il est conseillé : 2 fois la taille de la RAM ...
Tout ça n'enlève pas le fait que dans le mécanisme d'hibernation il y a bien une optimisation de ce qui va devoir être sauvegardé (en 5 phases comme décris ci-dessus).
Un petit lien interressant
http://tldp.org/LDP/tlk/mm/memory.html avec une partie des infos ci-dessus.