7 votes

Pourquoi le système d'exploitation doit-il copier toute la mémoire vive sur le disque dur pour la mise en veille prolongée ?

Ma question est d'ordre théorique dans les systèmes d'exploitation des ordinateurs, et plus précisément sur l'hibernation.

Pour autant que je sache, l'hibernation (état ACPI S5, c'est bien ça ?) consiste à écrire dans le disque dur toutes les données nécessaires à la restauration de la RAM lors du redémarrage du système d'exploitation. OK, ça me paraît bien.

Mais je me souviens du bon vieux temps des cours sur les systèmes d'exploitation, lorsque le professeur expliquait les différences de gestion de la mémoire entre les systèmes d'exploitation. Windows et le noyau Linux utilisent tous deux mémoire virtuelle : toutes les pages sont initialisées dans le swap, puis chargées dans la RAM en cas de besoin afin qu'ils puissent être déplacés à tout moment.

Je sais également que les pages de mémoire ne sont pas immédiatement transférées dans le swap, mais qu'elles sont conservées en mémoire pendant un certain temps, ou lorsqu'il est nécessaire de charger une page à partir du swap et que toutes les pages de mémoire ont été transférées dans le swap. sale

Ma question est la suivante : Pourquoi Windows doit-il stocker un hiberfil.sys avec toute la mémoire vive à l'intérieur puisque toutes les pages devrait Les caches sont déjà présents dans le fichier d'échange (et l'hibernation signifierait simplement vider les caches et arrêter l'ordinateur) et presque tous nettoyés après une inactivité prolongée ?

De même, pourquoi Linux indique-t-il explicitement qu'il copie des pages sur la partition swap ? Lorsque je suspends simplement le système, il faut quelques secondes d'accès continu au disque avant l'arrêt (peut-être que le noyau vide les caches), mais lorsque je veux mettre le système en veille prolongée, il faut le même temps que pour la restauration.

Ai-je oublié quelque chose à propos des noyaux ?

4voto

harrymc Points 394411

Le malentendu réside dans le fait que tous les contenus de la mémoire vive ne peuvent pas être transférés sur le disque.

Les processus utilisateurs disposent d'un espace de pagination dédié, mais pas le système. En effet, de nombreuses parties du système ne sont jamais échangées, et celles qui le sont sont simplement effacées de la mémoire parce qu'elles ne sont plus nécessaires (pas de écrit out). Dans ce cas, le système comprend le noyau et les pilotes, ainsi que toutes les données utilisées pour contrôler les processus (comme la table des segments de mémoire virtuelle).

Le fichier d'hibernation est écrit avec toutes les données nécessaires pour dupliquer le fichier d'hibernation. système état. Sa taille est loin d'être égale à celle de la mémoire vive, car seule la mémoire occupée est écrite.

La sauvegarde et la restauration prennent à peu près le même temps, car il faut lire les mêmes données que celles qui ont été écrites. Sur les disques où la lecture est beaucoup plus rapide que l'écriture, comme les disques SSD, la restauration sera beaucoup plus rapide.

2voto

Votre fichier de page peut être plus petit, plus grand ou de la même taille que votre RAM. Certaines personnes le désactivent même (par erreur). Microsoft a donc décidé de créer un fichier distinct dont la taille est garantie identique à celle de la mémoire vive et qui peut être lu et écrit respectivement au démarrage et à la mise en veille prolongée. Pour ce qui est de Linux, je suppose que la logique est la même.

EDITAR:

Et comme le souligne harrymc dans sa réponse, c'est pour maintenir l'état du système.

2voto

Jander Points 854

Ce que vous décrivez ressemble moins à de la mémoire virtuelle qu'à un cache de disque, où le système d'exploitation conserve des copies en mémoire des données qu'il lit sur le disque, au cas où une application voudrait les relire. Dans ce scénario, il peut également retarder l'écriture des pages "sales" sur le disque afin d'augmenter l'efficacité en écrivant un grand nombre de pages en une seule fois.

La mémoire virtuelle fonctionne dans l'autre sens : les données sont d'abord écrites dans la mémoire vive, et seulement dans le fichier d'échange si le noyau a besoin de libérer cette mémoire vive pour une autre raison. (Chaque bit de mémoire n'a pas nécessairement un espace correspondant dans le fichier d'échange ; sinon, vous ne pourriez pas avoir un fichier d'échange plus petit que la taille de votre mémoire vive). La pensée conventionnelle veut qu'il en soit ainsi ; il serait trop coûteux de continuer à copier la RAM sur le disque tout le temps lorsque ce n'est pas nécessaire. Pensez à la lenteur de votre ordinateur lorsque vous exécutez de nombreux programmes gourmands en mémoire et qu'il doit commencer à solliciter l'espace d'échange.

Cela dit, il existe des systèmes d'exploitation expérimentaux qui fonctionnent plus comme vous le décrivez, avec des règles complexes pour copier la mémoire sur le disque à intervalles réguliers, et le résultat est qu'il n'y a pas besoin d'hibernation - vous pouvez débrancher l'ordinateur et perdre peut-être 30 secondes de travail. Consultez le site CoyotOS , CapROS ou EROS si vous êtes intéressé par la théorie. Je ne sais pas quelles sont leurs performances, ni quels sont les autres inconvénients d'une telle stratégie, mais quand on prend en compte des choses bizarres comme la mémoire partagée avec la carte vidéo ou d'autres périphériques, j'imagine qu'il est difficile de la faire fonctionner correctement dans tous les cas. Pour autant que je sache, aucun système d'exploitation de production ne fait ce genre de choses.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X