web-dev-qa-db-fra.com

Comment l'ordinateur est-il capable de sauvegarder les choses avant qu'il ne se bloque?

J'avais l'impression que lorsqu'un ordinateur s'est écrasé, quelque chose s'est mal passé et il ne peut plus jouer.

Je me demandais comment l'ordinateur est-il capable de sauvegarder les choses avant qu'il ne se bloque?

L'ordinateur est-il vraiment capable de savoir quand il va se bloquer (et informer ainsi tous les processus: "sauvegarder dès que possible parce que je suis sur le point de crash")?

Sinon, comment est-il possible que des programmes tels que Chrome et Microsoft Word peut offrir des services "restauration" après l'enregistrement de l'ordinateur?

52
Pacerier

Lorsqu'un ordinateur "se bloque", il peut, par exemple, être dû à une défaillance de puissance "abrupte" (auquel cas rien ne peut être fait), il peut être dû à une sorte d'événement interne désagréable (tables de page corrompu, par exemple) De même empêche de faire n'importe quoi, ou cela peut être dû à une condition qui empêche tout simplement des "opérations supplémentaires" en quelque sorte - peut-être de nouveaux processus ne peuvent peut-être pas être démarrés, peut-être que l'affichage ne peut peut-être pas être mis à jour, peut-être que le système est simplement à court de stockage.

Dans ces dernières situations, le système d'exploitation peut toujours fonctionner, dans les limites et peut au moins compléter les opérations de disque qui étaient en cours, bien fermer des fichiers, etc. En outre, si un peu plus de fonction est possible, le système d'exploitation peut peut-être indiquer la diversité des différentes applications. processus pour se fermer proprement.

Mais même si le système diminue "HARD", le système dans son ensemble et des applications individuelles a peut-être maintenu un système de "revues" et/ou de "points de contrôle" pour permettre la restauration de l'état du système dans son ensemble et individuelle à rétablir. à un point "atomique", où tout est "cohérent en interne" et où un minimum de données importantes a été perdue.

Tout cela n'est pas accompli avec un seul mécanisme, mais avec des couches de fonctionnalité au niveau du système et de l'application.

En ce qui concerne les défaillances de la puissance spécifiquement, il peut ne pas être une notification préalable, et l'avertissement "avancé" peut être une fraction d'une seconde ou (avec une batterie d'ordinateur portable ou une batterie d'ordinateur portable défaillante) plusieurs minutes. Ce qui peut être fait dépend de la quantité d'avertissement.

Dans la plupart des cas, avec un système de bureau sans UPS, il est au meilleur de la "question de" quesse "des opérations de disque afin qu'aucun disque ne soit au milieu d'une écriture lorsque le pouvoir disparaisse enfin. Cela empêche la génération de secteurs défectueux sur le disque. Auparavant, lorsque RAM = était beaucoup plus petit, qu'il pourrait y avoir suffisamment de temps (avec de gros condensateurs dans l'alimentation électrique, voire, à l'aide de l'énergie stockée dans le rotor de lecteur de disque pour générer Électricité) Pour écrire RAM== sur le disque avant la perte de puissance, mais cette possibilité a à peu près disparu quand RAM a augmenté de plus de 100 m.

[Et notez que, dans les olden jours, lorsque des souvenirs ont été fabriqués avec des "noyaux" magnétiques, RAM= a été préservé intrinsèquement lorsque la puissance a été perdue (bien qu'un mot particulier soit lu/écrit lorsque la puissance a échoué. être corrompu). Cela a permis de récupérer les anciens systèmes de la défaillance de la puissance.]

Cependant, avec quelque chose qui ressemble à un onduleur (qui peut donner n'importe où de quelques minutes à plusieurs heures de puissance supplémentaire), il existe plusieurs options supplémentaires. On consiste simplement à fermer le système, comme si vous demandiez "la mise hors tension". Cela provoque la fin de chaque application, puis le système dans son ensemble écrit des tables permanentes et s'arrête. Cela peut prendre beaucoup de temps (comme je suis sûr que beaucoup d'entre vous l'ont remarqué). Mais il est également possible d'utiliser une stratégie "hibernate", où RAM=== est écrit sur le disque sous forme de bloc unique, puis le système éteint. Dans le scénario "hibernate", sur la restauration du pouvoir, Le RAM=== est lu sur l'endroit où il a été écrit, quelques bits ici et il y a des sauts à ressuscité, puis l'exécution reprend là où elle s'est arrêtée.

Sur certains systèmes plus âgés de "grand fer à repasser", une stratégie semi-hibernate a été utilisée pour effectuer une fermeture d'urgence: la mémoire serait écrite comme ci-dessus, mais lorsque la puissance a été restaurée et que la mémoire est lue, une fermeture standard se produirait. Cela a été fait car certains bits d'état système (en particulier dans les contrôleurs d'E/S) n'ont pas pu être économisés de manière fiable/restaurée pour permettre une utilisation continue.

6
Daniel R Hicks

Chrome et Microsoft Word vous enregistrent périodiquement votre état actuel lorsque vous travaillez. Si l'application ou l'ordinateur se bloque, lorsque les applications relancent, elles recherchent un état enregistré sur le disque et la restauré pour vous. Ils n'ont pas besoin de prédire le crash; Ils sauvent constamment votre état au cas où quelque chose ne va pas.

82
Stephen Jennings

EDIT: Cela ne fonctionne que lorsqu'une application se bloque, pas de Windows.

Étant donné que Windows Vista existe une nouvelle API qui permet à Windows d'appeler une fonction spéciale dans l'application lorsqu'elle se bloque, elle peut donc essayer de récupérer toutes les données avant qu'elle ne soit fermée. Cela fonctionne comme ceci:

  • App démarre
  • Appels app appelle la fonction Windows: lorsque je m'échappe s'il vous plaît exécuter RecoverData()
  • ...
  • App achabure
  • Windows exécute RecoverData() dans l'application
  • RecoverData() tente de récupérer des données sur le document actuellement ouvert, dans la moyenne, il conserve que les fenêtres de Pinging de dire qu'il est toujours occupé à la récupération.
  • Lorsque RecoverData() a fini/time out/arrête de pinging, Windows met fin à l'application et le redémarre.

Plus d'infos: http://msdn.microsoft.com/en-us/library/windows/desktop/aa373351 (v = vs.85) .aspx

62
ZippyV

Les programmes sauvegardent qu'ils indiquent périodiquement dans un fichier sur disque. L'ordinateur n'est pas capable de le savoir. En fait, le dépotoir de crash n'est même pas effectué à l'aide du pilote de disque - le système permet simplement de sortir toutes les mémoires.

8
kinokijuf

J'avais l'impression que lorsqu'un ordinateur s'est écrasé, quelque chose s'est mal passé et il ne peut plus jouer.

Oui, c'est complètement vrai. Cependant, à partir d'une perspective logique, votre programme ne fonctionne pas sans restriction sur l'ordinateur. Le programme fonctionne sous le système d'exploitation!

Je me demandais comment l'ordinateur est-il capable de sauvegarder les choses avant qu'il ne se bloque? L'ordinateur est-il vraiment capable de savoir quand il va se bloquer (et informer ainsi tous les processus: "Enregistrez-vous dès que possible parce que je suis sur le point de vous crancer")?

Eh bien, dans le cas d'un BSOD ou panique de noyau, le système d'exploitation a déterminé qu'une chose vraiment dangereuse allait arriver (pointeur de mémoire invalide, écraser de certains Mémoire allouée au noyau OS, accès au matériel non existant, etc ...). Dans ce cas, le système d'exploitation appelle à tous les processus d'arrêt de l'exécution, enregistre le contenu du fichier RAM au disque (puisque le système d'exploitation est également responsable de la gestion de la répartition de la mémoire) et de la fermeture en toute sécurité. ou redémarre l'ordinateur.

Les applications individuelles se croient s'écraser lorsqu'il existe une exception non gérée par le programme, qui se propage dans le système d'exploitation. Dans ce cas, le système d'exploitation cessera l'exécution du programme et fermera toutes les poignées de mémoire ouverte/fichier.

Dans les deux cas susmentionnés, l'exécution du programme n'est généralement pas terminée de manière gracieuse. Dans ces cas, il appartient aux applications individuelles de récupérer leurs propres données, car elles "arrêtent".

Sinon, comment est-il possible que des programmes tels Chrome et Microsoft Word puissent offrir des services "restauration" après l'enregistrement de l'ordinateur?

IIRC, ces deux applications enregistrent périodiquement les états d'application sur le disque pour empêcher la perte de données si la condition susmentionnée se produit. Par exemple, Word Auto-sauve une copie de sauvegarde de votre document de travail actuel toutes les quelques minutes de sorte que, en cas de redémarrage soudain, vous pouvez toujours récupérer vos données (donner ou prendre quelques minutes de travail) sans que vous ayez à ont fait n'importe quoi.

Encore une fois, en tant que développeur, il est de votre propre responsabilité de veiller à ce que votre demande puisse gérer ces situations.

6
Breakthrough

oui, le processus de restauration de données n'est pas seulement pour les accidents de l'ordinateur, il s'agit pour les pannes de courant, les collisions de programme, cesser de fumer, et bien plus encore ..

Ce que vous avez dit est vrai, l'ordinateur ne peut pas "savoir" quand il va s'écraser, dans le cas de Word, il échange périodiquement afin qu'il puisse restaurer ces données. Dans le cas de Chrome, il stocke probablement l'info pour chaque onglet quelque part et la supprime sur un arrêt qui a suivi, ou lorsqu'une nouvelle session différente commence .. ou probablement d'autres moyens aussi. Quoi qu'il en soit, de cette façon, si ce n'est pas Terminez avec un arrêt réussi, il a ces données à restaurer.

Je (évidemment) ne travaille pas pour Microsoft ou Google, mais c'est probablement la voie (ou proche de la voie) Cela fonctionne.

3
FALL3N

Comme - @ bamboom dit, il existe plusieurs types de "crashs" de l'ordinateur qui doivent être traités différemment. Effectivement une panne de courant est très différente de, par exemple, une division entière par zéro erreur.

Avec de nombreuses langues de programmation soutenant également des exceptions (ramification contrôlée à un gestionnaire d'erreur lorsque quelque chose ne va pas complètement), il est possible de disposer d'un gestionnaire d'erreur à l'échelle de l'application de haut niveau pouvant enregistrer l'état de l'application (y compris les documents ouverts, les modifications apportées. , etc.) Lorsqu'une erreur d'application non heurtée se produit. L'idée est alors d'essayer de tout revenir lorsque l'application est redémarrée. En fonction du type d'erreur et de la manière dont cela est implémenté, il ne fonctionne pas toujours et, bien sûr, il apparaît dans chaque application distincte de faire quelque chose de significatif face à une erreur et avec les données résultantes - mais cela peut être un Stratégie étonnamment efficace pour aider l'utilisateur à se remettre d'un crash avec une quantité minimale de travail perdue.

2
a CVn

Je voudrais un point de bas niveau ici, car il existe une étiquette de système de fichiers.

Vous auriez pu me souvenir de Windows OS qui a utilisé le système de fichiers FAT/FAT16/FAT32. Il y avait parfois des problèmes lorsqu'un utilisateur a connu une panne de courant et que tout le système a diminué. Après avoir essayé de redémarrer, cela dirait qu'un fichier manquait et qu'il n'est pas possible de démarrer. Cela s'est produit car FAT32 n'a pas gardé la trace des opérations qu'il effectuait de manière transactionnelle.

Au contraire, le système de fichiers NTFS plus récent reçu Journal Soutien de son infrastructure, ce qui signifie que les informations relatives au niveau bas des systèmes d'accès au système d'exploitation et à l'accès matériel seraient conservées dans une condition de sécurité stable en enregistrant toutes les actions à commiter.

2
oleksii

Un programme peut écrire un drapeau sur le disque qui dit simplement quelque chose comme "sur bootup, si ce drapeau est défini, alors quelque chose s'est mal passé". Sur le démarrage que le drapeau est vérifié pour voir s'il est défini. Si c'est le cas, le programme sait que quelque chose s'est mal passé.

Le drapeau fonctionne toujours, car il peut être défini dès que le programme démarre et éteint lorsque le programme sort normalement. Si le programme sort de faire une erreur inattendue, comme un ordinateur éteint de manière inattendue, le drapeau sera toujours défini puisqu'il n'a pas quitté normalement. Ensuite, le programme est capable de dire qu'il n'a pas quitté Normalement la dernière fois qu'elle était courue.

2
Paul

Dans certaines applications sur certains systèmes d'exploitation, il est possible de connecter des signaux tels que des défauts de segmentation indiquant des violations d'accès à la mémoire. Dans ce cas, une simple routine peut économiser autant de données que possible. Que ce soit ou non que des données sont utilisables est une autre question - l'accident peut l'avoir corrompu. Bien qu'il soit possible pour une application de continuer à courir après avoir interrompt un signal, il n'est pas recommandé, car il peut être dans un état instable avec une mémoire corrompue pouvant entraîner des problèmes supplémentaires.

D'autres applications utilisent une sauvegarde automatique ou une combinaison des deux - cela dépend des besoins du programme et du support de la plate-forme pour attraper ces signaux.

1
Thomas O

Un crash système n'est qu'une autre routine gérée par le système d'exploitation. La raison pour laquelle un "crash" se produit est dû au fait qu'un programme ou une bibliothèque n'a pas été chargé ou ne s'est pas chargé correctement et a la capacité de causer des dommages permanents aux fichiers système. Ainsi, comme une précaution de sécurité, Windows oblige une fermeture/redémarrage et arrête toutes les fichiers système avant que tous ces fichiers ne soient autorisés à être modifiés par le programme/bibliothèque de délinquants.

Avant de fermer/redémarrer, il effectue les mêmes fonctions qu'un arrêt régulier/redémarrage: c'est-à-dire des fichiers système, etc.

En ce qui concerne les applications uniques (Word/Chrome) enregistrer votre "progression", c'est une fonction interne de l'application, enregistrant ainsi vos progrès à des intervalles spécifiques (que vous pouvez généralement modifier les paramètres du programme). Si vous avez un crash d'application/système, après redémarrage, il peut regarder ce fichier et vous demander si vous souhaitez restaurer la session.

1
Mechaflash

Les applications peuvent attraper signaux en C et enregistrez certaines données. Un signal que vous pouvez obtenir accidentellement est une exception arithmétique de point flottante SIGFPE (ANSI). Les erreurs incluent la division par zéro et débordement. Un autre singual est Sigint qui est soulevé en appuyant sur Ctrl + C sur la console ou le terminal qui tue l'application

0
user3109