ハイバネーション

ハイバネーション（英: hibernation）とは、パーソナルコンピュータ（PC）のオペレーティングシステム（OS）に備わる停止モードのひとつで、コンピュータを停止させるにあたり、まず揮発性メモリからなる主記憶装置（メインメモリ）が保持している内容を不揮発性メモリからなる補助記憶装置（ストレージデバイス）に待避させてから電源を完全に切断し、次にコンピュータを起動させた際は作業途中から再開できるようにする機能である。macOSではセーフスリープ（英: safe sleep）と呼ばれる。 従来のスリープモードと比べて一層深い眠りという意味で、ハイバネーション（冬眠）または休止状態という語が用いられる。 コンピュータを停止させる場合でも、稼働中のアプリケーションソフトウェアなどを終了させなくて済む。ハイバネーションからの再開時は全アプリケーションの起動状態や作業状態などを含めたデータがストレージからメモリに自動的に復元されるため、停止時の状態からそのまま復帰する。 ハイバネーションは特に電力使用量がシビアなノートPCで利用されることが多い。バッテリー残量が少なくなると自動的にハイバネーションへ移行するよう設定することもできる。 初の実装は1992年のアメリカのコンパック・コンピュータ社によるものだとされ、同社は特許も取得している。 ハイバネーションは「スリーピングモードS4」としてACPIの仕様で定義されている。 スリープでコンピュータを停止させる場合は、停止後もメインメモリの内容を保持するために電力がわずかずつだが消費され、モバイル運用に不利である。ハイバネーション（セーフスリープ）では、完全に電源を切るのでバッテリーの消費を避けられる。 バッテリーを搭載しないデスクトップPCなどでも、ハイバネーション中であれば、不意に電源供給が途絶えた場合など、事前に不揮発性メモリにすべて保存されているので、スリープモードとは異なって作業状態が失なわれない。 一方、まずメインメモリの内容を（比較的低速な）ストレージに書き込む作業が行なわれるので、停止するまでに余計な時間を要するというデメリットはある。 通常のシャットダウンの場合、まずOSは起動中のアプリケーションをすべて終了することを試みる。Microsoft Windowsの場合、まず起動中のすべてのアプリケーションにOSからセッションの終了要請（シャットダウン予告）メッセージWM_QUERYENDSESSIONが送信される。このメッセージを受け取ったアプリケーションは、現在の作業状況をファイルに保存するなどして速やかに終了に応じるが、アプリケーションはこのメッセージに速やかに応答しないことによってシャットダウンを遅らせることもできる。通常、アプリケーションウィンドウのクローズボタンを押すなどして終了コマンドを送信すると、未保存のドキュメントがある場合はユーザーに保存するかどうかを確認するダイアログが表示されるが、未保存のドキュメントがあるアプリを起動している状態でWindowsのシャットダウンを実行すると、「x個のアプリを閉じて、シャットダウンします」というメッセージが表示されてシャットダウンが一時的に妨げられ、ユーザーにシャットダウンを強制実行するか、それともキャンセルするかどうか選択する余地が与えられる。シャットダウンが完了し、ふたたび電源を入れたときには、シャットダウン前の作業内容は失なわれている。ハイバネーションでは、これらのプロセスなしに速やかに停止状態に移行し、電源再投入時に停止直前の状態がそのまま再現される。 Windows 95とWindows 98 ではAPMしかサポートされていなかったため、ハードウェアとデバイスドライバ、BIOSが対応している場合だけ「サスペンド」といわれる機能を利用することができた。Windows 98ではACPIもサポートされたが、当時はほとんどのハードウェアがACPI 1.0に完全に対応していたわけではなく、WDMドライバも無かったためハイバネーションは不完全な形でしか利用できなかった。それに加え、FAT32ファイルシステムにも問題があった。 特殊なデバイスドライバ無しでOSレベルでのハイバネーションがサポートされたのはWindows 2000の登場以降、「休止状態」といわれる機能が搭載されてからのことである。 物理メモリの内容はLZXPRESSアルゴリズムによって圧縮され、その作業内容の完全な複製が「hiberfil.sys」という名前の隠し属性システムファイルでシステム・パーティションのルートディレクトリに作成される。Windows Meではこのファイルのサイズは実物理メモリ領域の半分のサイズまで抑えられるようになり、Windows XPではさらに改善された。 すべてのハードウェアがACPIとプラグアンドプレイに準拠しており、デバイスドライバがプラグアンドプレイ互換である場合のみ、ハイバネーションは正常に機能する。 Windows Vista以降では「ハイブリッドスリープ」が搭載され、メモリ内容をストレージに待避させた直後に「スリープ」へ移行することで、素早いシステムの復帰を実現するとともに、ノートパソコンにおけるスリープ中のバッテリー放電や取り外し（およびデスクトップパソコンにおける停電）によってメインメモリの内容が失われるリスクにも対応している。ユーザーはオプションによってハイブリッドスリープを停止することができ、その場合のスリープは（従来同様に）ストレージへのメインメモリ内容の退避をせず、より速くスリープに移行できる。 macOSでは同じ機能がセーフ・スリープという用語で呼ばれ、2005年10月のパワーブックG4以降に搭載されている。物理メモリの内容をHDDへ保存し、瞬時に作業途中の状態に復帰できる機能である。ACアダプタ接続無しでバッテリーを交換するときのように、もし電源が遮断された場合、メインメモリの中身はすべて消えてしまうので、macOSは即座にHDDからメインメモリの内容を復元して元の状態に復帰させる。 セーフスリープは通常のスリープ機能を実行すると自動的に処理されるため、アップルメニューには「ハイバネーション」に相当する選択肢が存在しない。また、Mac OS X v10.4以降に搭載された機能である。Mac OS X v10.4リリース後、Macintoshマニア[誰?]はこの機能を古いMacintoshでも実行可能にするハック・プログラムを発表した。昔[いつ?]のMacintoshにはWindowsのように「ハイバネーション」のメニューがあったが、現在[いつ?]はAppleによって削除されている。 Linuxカーネルでは2.6シリーズに組み込まれたswsusp(Software Suspend)で実装されている。ほかに、Linuxカーネルへのパッチの形で提供されている「TuxOnIce」や「uswsusp」(Userspace Software Suspend)がある。 ^ PCのストレージには、主にハードディスクドライブ（HDD）やソリッドステートドライブ（SSD）が使われる。 ^ Windows 95 では「サスペンド」、Windows 98からは「スタンバイ」と呼ばれるが、どちらもメインメモリ以外の給電を停止するものである。厳密な用語としてはサスペンドはメインメモリ以外のすべての給電を停止（スリーピングモードS3）、スタンバイはCPUといくつかのデバイスの給電を停止するもの（スリーピングモードS1）。なお「レジューム」という呼称もあるが、これも厳密には「中断状態から復帰すること」を指す用語である。 ^ Macのセーフスリープとは - Apple サポート (日本) ^ “Hibernation Patent”. Patents.google.com (1998年). 24 January 2021時点のオリジナルよりアーカイブ。24 January 2021閲覧。 ^ Shutdown Processes Duration | Microsoft Learn ^ NEC LAVIE公式サイト > サービス＆サポート > Q&A > Q&A番号 019013 ^ swsusp のLinuxカーネルのドキュメント ^ TuxOnIce ^ uswsusp ACPI シャットダウン 再起動 スリープ サインアウト（ログオフ） ロック ユーザーの切り替え Hibernate on your non-brandnew Mac TuxOnIce for Linux Suspend and hibernation status report