第17回 素早い起動を可能にする「高速スタートアップ」:Windows 8レボリューション
Windows 8では起動とシャットダウンのメカニズムが刷新され、従来と比較すると大幅な高速化を実現している。OSカーネルの休止と再開を使った「高速スタートアップ」の仕組みを解説。
Windows 8ではブートの仕組みが改善され、以前のWindows OSよりも起動やシャットダウンなどが速くなっている。今回はこの仕組みについて見ていく。
高速スタートアップとは
Windows 8の新機能の1つとして、「高速スタートアップ(ハイブリッド・ブート)」がある。これは、Windows OSの起動やシャットダウンを高速化する技術である。システムにもよるが、高速スタートアップが有効な場合は、起動やシャットダウンの時間が10秒とか、それ以内で完了する。例えば手元のシステムでは次のようになった。
起動とシャットダウン時間の比較
Intelのマザーボード(DQ67SW)とCore i7-2600、2Tbytesクラスのハードディスクを使った自作PCシステムでの測定結果。電源ボタンを押して起動し、BIOSのPOST画面が終わってからログオン画面(Windows 8ではサインイン画面)が表示されるまでの時間と、電源ボタンを押してシステムの動作中LEDが完全に消灯するまでの時間を測定。3回測定して平均値を算出。
高速スタートアップが利用できるかどうか確認するには
通常、高速スタートアップは明示的にオンにする必要はない。高速スタートアップが利用できるシステムであれば、Windows 8が自動的にその機能をオンにするからだ(この場合、手動でオフにすることはできる)。使用中のWindows 8で高速スタートアップが利用できるかどうかは、コントロール・パネルを見るか、コマンド・プロンプトを使えば確認できる。
コントロール・パネルで確認するには、まず「システムとセキュリティ」グループの中にある[電源オプション]のリンクをクリックする。
次に「電源オプション」画面の左側にあるメニューから、上側の2つのいずれかのリンクをクリックする。
高速スタートアップの設定確認
高速スタートアップ機能が有効なシステムならば、(1)が表示されている。高速スタートアップが利用できないシステムの場合は、この項目自体が表示されていない。システムによっては、「スリープ」や「休止状態」の項目も表示されていないことがある。
(1)高速スタートアップ機能が利用可能なシステムの場合は、このように項目が表示され、デフォルトではチェックボックスがオンになっているはずである。
(2)設定を変更したい場合は、一度このリンクをクリックしてから、設定を変更する。
「シャットダウン設定」グループの中に、上の画面のように「高速スタートアップを有効にする(推奨)」という項目があれば、このシステムでは高速スタートアップ機能が利用できる。この設定を変更して一時的に無効にしたり、元に戻したりするには、画面上部にある[現在利用可能ではない設定を変更します]のリンクをクリックしてから、チェックボックスをオン/オフして変更すればよい。
次の画面のように、「高速スタートアップを有効にする(推奨)」という項目がなければ、高速スタートアップは利用できない。
高速スタートアップが利用できないシステムの例
高速スタートアップが利用できない場合はこのように表示される。
(1)「高速スタートアップを有効にする(推奨)」が見あたらない。このシステムでは、スリープとロック画面しか利用できない。
コマンド・プロンプト上で確認するには、「powercfg -a」コマンドを実行してみればよい。
※高速スタートアップが有効なシステムの場合
C:\>powercfg -a …これを実行してみる
以下のスリープ状態がこのシステムで利用可能です:
スタンバイ (S3)
休止状態
ハイブリッド スリープ
高速スタートアップ…このシステムでは利用可能
以下のスリープ状態はこのシステムでは利用できません:
スタンバイ (S1)
システム ファームウェアはこのスタンバイ状態をサポートしていません。
…(以下省略)…
利用できないシステムの場合は次のように表示される。
※高速スタートアップが利用できないシステムの場合
C:\>powercfg -a
以下のスリープ状態がこのシステムで利用可能です:
スタンバイ (S1)
…ここに「高速スタートアップ」という項目が表示されない
以下のスリープ状態はこのシステムでは利用できません:
スタンバイ (S2)
システム ファームウェアはこのスタンバイ状態をサポートしていません。
…(以下省略)…
高速スタートアップの仕組み
Windows 8では元々、ブート・コードの見直しなどにより、以前のWindows 7よりもブートに要する時間(サインインの画面が表示されるまでの時間)はいくらか短くなっている。それをさらに改善して、大幅に高速化したのが高速スタートアップである。
従来のブート・シーケンスでは初期化に時間がかかっている
まず、以前のWindows OSにおけるブート・シーケンスを見てみよう。
Windows OSの一般的なブート・シーケンス
Windows OSにおけるフルブート(コールド・ブート)・シーケンスの概要(休止状態やサスペンドからの復帰の場合は別)。BIOSのPOST処理が終わると、OSのロードと初期化が始まり、デバイスの検出やデバイス・ドライバ、サービスなどのロードと初期化などが行われ、その後ユーザー・セッションが開始される。
システムが起動すると、まず「POST(Power On Self Test)」と呼ばれるコードが実行される。これは一般的にはBIOSの起動画面として認識されているものである(表示しないようになっているシステムも多いが)。システム全体の初期化やテストなどが行われた後、ディスクの先頭からブート・コードを読み出してきて、OSのロードの準備を始める段階である。
OSの初期ロードが完了すると、続いてOSカーネルや必須デバイス・ドライバのロードと初期化が行われる。そしてシステムに接続されているデバイスをスキャンして調査し、追加のデバイス・ドライバのロードと初期化も行う。以後は、サービスの起動やユーザー・シェルの起動、サインイン(ログオン)画面の表示などが行われる。
以上が主なブート処理であるが、この中で一番時間がかかるのが、システムに接続されているデバイスの調査とデバイス・ドライバのロード/起動である。どんなシステムでも数十個のデバイス・ドライバがロードされるし、新しいデバイスを追加すると、通常はそれに関連して新しいサービスなども追加されるので、初期化に要する時間はますます増える傾向になる。特に、PnP(プラグ&プレイ)対応ではないレガシーなデバイスでは、特定のポートをスキャンしてデバイスの存在をチェックするので(デバイスが存在しているかどうかは応答が返ってくるかどうかで判断するため、いくらかの待ち時間も必要)、非常に時間がかかる。
初期化を省いて休止状態から起動することで起動時間を短縮する
これを改善して、起動時間を大幅に短縮するにはどうすればよいか? そこで考え出された解決方法が「起動時に初期化するのを止める」である。代わりに、前回の最後の状態(シャットダウン直前のメモリやCPUの状態)を「休止状態としてディスクに保存」しておき、「起動時にはその休止状態から復帰させる」ようにすれば、いちいち初期化する必要がなくなるというわけだ。ただし一般的な休止(ハイバネーション)状態と違い、高速スタートアップではユーザー・セッションをすべて終了させ、ユーザー・シェルまで終了させた状態にしてから、カーネルを休止している。カーネルとデバイス・ドライバ、サービスだけがメモリ上に残った状態で休止させることにより、保存に必要なディスク領域が少なくて済む(カーネル・メモリの分だけなので数100Mybtesでよい)。
Windows 8の高速スタートアップ
Windows 8の高速スタートアップでは、完全な再起動ではなく、カーネル・モードの休止と再開を使って、高速な起動を実現している。シャットダウン時にOSカーネル(デバイス・ドライバとサービスを含む)をディスクに書き出して休止させておき、起動時には休止状態ファイルのロードとそこからの再開を行う。起動時にデバイスの検出やロード、必要なサービスのロードなどを行わないため、大幅に高速化できる。休止状態の保存のため、シャットダウン時間が少しだけ長くなるが、実際には数秒なので、問題はないだろう。
次回起動時には、以前のような「完全なブート処理(コールド・ブート)」ではなく、休止ファイルからの状態のロードとカーネルやデバイス・ドライバ、サービスなどの起動だけで済むので、起動時間は大幅に短縮される。ファイル・システム経由でデバイス・ドライバをロードするわけではなく、単一の休止ファイル(hiberfile.sysファイル)からの読み出しだけなので、ディスク読み出しの効率もよい(休止状態からの復帰には、マルチコアを駆使して並列処理している)。カーネルをロードして起動できたら、あとはシェルのロードやユーザー・セッションの開始などを行って、Windows 8の初期化(サインインの準備)が完了する。
このような工夫により、コールド・ブートするよりも30〜70%程度高速化されているとのことである(以下のブログ参照)。
システムを強制的にコールド・ブートさせる
高速スタートアップは便利な機能であるが、例えばシステムに新しいデバイスを追加した場合などに問題が発生することがある。USBのようなPnPデバイスでは自動的に検出され、ドライバがインストールされるが、カードを増設したような場合には増設したデバイスが見つからず、エラーになることがある。そのような場合は、システムを手動で完全にコールド・ブートさせるとよい。このためにはいくつか方法がある。本記事冒頭で紹介した方法で、いったん高速スタートアップを無効にしてから再起動してもよいが、次の方法を使えば、高速スタートアップの設定を変えずに、1回だけコールド・ブートできる。
GUIメニューで再起動させる
Windows 8システムをシャットダウンするには、設定チャームの「電源」をクリックして[シャットダウン]を選べばよいが、[再起動]を選べばコールド・ブートになる。
GUIメニューで再起動する
これは設定チャームの「電源」をクリックしたところ。システムを完全に再起動させたい場合は、GUIで再起動メニューを選択する。
(1)マウス・カーソルを画面右下へ移動させるか[Windows]+[C]キーなどで設定チャームを表示させ、これをクリックする。
(2)これを実行する。
コマンド・プロンプトで再起動させる
コマンド・プロンプト上の操作でシステムを完全にコールド・ブートさせるためには、shutdownコマンドを実行する。末尾の「/t 0」オプションは、タイムアウト=0秒、つまり、いますぐ実行せよという指示である。
※コールド・ブートさせる場合
shutdown /r /t 0
※シャットダウンさせる場合
shutdown /s /t 0
ちなみに、/sと/hybridを組み合わせてシャットダウンすると、次回のブートは高速スタートアップになる。
※次回高速スタートアップさせるためのシャットダウン
shutdown /s /hybrid /t 0
システムをマルチ・ブートしている場合のOS選択
システムに2つ以上のWindows OSをインストールしている場合、通常は起動時にOSを選択するメニュー画面が表示される。だがWindows 8をインストールすると、最後にインストールしたOSがアクティブになり、電源ボタンを押してシステムを起動しても、ブート・メニューが表示されないことがある(OSの選択待ち時間を0にしていたり、高速スタートアップが有効な場合)。これでは起動するOSを変更したり、別のOSを起動することができない。またBIOSやUEFI(UEFIについては後述)のセットアップを呼び出すこともできない。
このような場合は設定を変更して、次回起動時に必ずOS選択メニューを表示させるようにするとよい。
起動時に強制的にブート・メニューを表示させるには、TIPS「Windows 8を確実にセーフ・モードでブートさせる」と同じ方法が使える。以下のいずれかの方法でシステムを再起動させるとよい。
- 設定チャームから[PC設定の変更]という項目を選択して、「PC設定」画面を表示させる。そして画面左側のメニューから[全般]を選び、右側のペインの最下部にある[今すぐ再起動する]を実行する。
- 設定チャームを起動後、画面中央下にある電源マークをクリックする(前掲の「GUIメニューで再起動する」画面参照)。表示されたメニューの[再起動]を、[Shift]キーを押しながらクリックする。
- コマンド・プロンプトを開き、shutdownに「/r」と「/o」オプションを付けて実行する。例えば「shutdown /r /o /t 0」のようなコマンドを実行する。
この操作を行うと、次のような「オプションの選択」画面が表示されるので、「別のオペレーティング システムの使用」を選んで別OSを起動させたり(デフォルトのOSを変更することも可能)、「トラブルシューティング」−「詳細オプション」を選んで、システム設定を変更したりできる。UEFIがサポートされているシステムの場合は、UEFIのメニュー画面を呼び出したり、起動するディスクやUSBメモリを選択したりもできる。
オプション選択画面
この画面から、起動するOSを選択したり、デフォルトのOSを変更したり、回復コンソールを起動したり、システムの復元を実行したり、セーフ・モードで起動したりできる。UEFIをサポートしたシステムの場合は、ブート・デバイス(システムに接続されているハードディスクやUSBメモリなどが列挙される)を選択するオプションも表示される。
(1)起動するOSを選択する。
(2)PCのリフレッシュや復元、スタートアップ設定(セーフ・モードの起動)などを行うには、これをクリックする。
UEFIやSSDで、さらなる高速ブートを実現する
「高速スタートアップ」ではOSカーネルの休止と再開機能を使って高速な起動を実現しているが、POST処理部分の高速化は実現できていない。この部分はOS起動前の処理であるし、システムによって処理内容が異なるため、OS側では対応できないからだ。
だがUEFIがサポートされたシステムを利用すれば(UEFIについては「UEFIブートでWindows OSをインストールする」参照)、POST処理部分も短縮化できる可能性がある。さらにハードディスクではなく、SSD(半導体ディスク)も併用すれば、例えば電源スイッチを押してから1〜2秒で起動できるシステムにすることも可能である。UFEIやSSDを使ったブートについては、今後解説する。
Copyright© Digital Advantage Corp. All Rights Reserved.