1. トップ
  2. 新着ニュース
  3. IT
  4. IT総合

Windowsはなぜ再起動が必要になるのか?

ASCII.jp / 2024年6月30日 10時0分

 Windowsでは、Windows Updateの直後やアプリケーションなどのインストール後に再起動が要求されることがある。以前に比べると、再起動にかかる時間は短縮されたものの、開いているプログラムを閉じてファイルを保存する必要があるなど、ちょっと面倒ではある。

Windowsの再起動
毎月の「累積的なアップデート」や、Windows Insiderのプレビュー版の更新では、再起動を要求される

 なお、システムの再起動は、何もWindowsだけでなく、Linuxなど他のプラットフォームでも必要になることはある。とはいえ、ちょっとしたアプリケーションのインストールやアップデートの後に再起動が要求されるなど、頻度が高い気がしないでもない。今回は、この再起動について調べる。

Windows Updateが再起動を要求するとき

 Windows Updateの場合、再起動が必要になるのは大きく2つの理由がある。1つはWindows自体の更新で、このときにWindowsのインストールイメージが作られて再起動。Windowsの再インストールが実行される。Windows 10の初期には、再インストール作業は、Windowsのインストーラー(setup.exe)同様、インストールイメージの作成などをWindowsの停止状態でしていた。

 最近のWindowsでは、ほとんどの処理をWindowsが起動している間に済ませてしまう。具体的にはWindowsを停止している間に以下のことをする。まず、インストールイメージからWindows自体を更新する。そして、デバイスを探索して、ドライバ環境を構築する、などだ。そのためWindowsを停止している時間が短縮され、数分でWindowsを起動できるようになった。

 Windows Updateによる再起動のあとに「デバイスのセットアップを完了しましょう」といったウェルカム画面が表示されるのは、Windowsが更新され、再インストールがされたことを示す。なお、このウェルカム画面は「設定」→「システム」→「通知ページ」の一番下にある「追加の設定」にある、「更新後およびサインイン時にWindowsのウェルカム エクスペリエンスを表示して新機能と提案を表示する」をオフにすると、表示されなくなる。

 もう1つは、Windowsが起動している間は止めることができないプログラムの実行ファイルや、利用しているファイルなどを差し替える場合だ。こちらは、インストールイメージを作成することはなく、Windowsをシャットダウンして、目的のファイルを差し替えたら、すぐにWindowsを起動する。こうした理由で再起動をするものに.NET/.NET Framework関連のアップデートがある。

 .NETや.NET Frameworkのアップデートでは、プログラム実行に利用するCLR(Common Language Runtime)や、標準のクラスなどが差し替わる。このとき、Windows側に.NETや.NET Frameworkで動作するプログラムがあれば止めることができない。そこでWindowsを再起動してファイルを差し替える。

 Windowsには、こうした場合に利用するMoveFileEx APIやレジストリキーが用意されている。これらで可能な作業は、ファイルの削除もしくは移動(単純なリネームを含む)である。

Windowsは実行ファイルをロックする

 実行ファイルの更新に、再起動して削除などの面倒な作業が必要になるのは、Windowsでは、起動中の実行ファイルがロックされるからである。以下の画面は、作成したプログラム(testProg.exe)起動しているときに実行ファイルを削除しようとしたもの。アクセスが拒否され、削除できない。

Windowsの再起動
testProg.exeは起動するとキーを待ち受けるだけのプログラム。起動中には実行ファイルがロックされて削除できない

 しかし、プログラムを終了させると、実行ファイルの削除ができる。

Windowsの再起動
プログラムが実行を終えると、削除できる。これは、Windowsが起動中の実行ファイルをロックしていることを意味する

 Windows 2.xは、8086 CPUでも動作するため、仮想記憶を利用できないが、メモリ中のコードブロックを廃棄可能とすることで、メモリ領域を空けることができた。廃棄されたコードブロックは、必要になったときに実行ファイルから読み直される。このため、プログラムの実行中は実行ファイルを残しておかねばならない。

 Windows 11での明確なドキュメントを見つけることはできなかったが、こうした仕組みが今でも残っている可能性はある。仮想記憶が使える現在でも、コードブロックをスワップアウトする時間を短縮でき、スワップ領域の利用率を下げることができる。Windowsには実行ファイルをロックしなければならない何らかの事情があることだけは確かだ。

 なおLinuxでは、実行ファイルはプログラムを起動してもロックされず、実行ファイルを削除することができる。これは偶然の産物ではない。そのための仕組みがあり、削除されるのはファイル自体ではなく、ディレクトリ内のファイルエントリだけのようだ。この機能のおかげで、カーネルやシステム側のファイルを起動中に差し替えることが可能になる。

 とはいえ、まったく再起動が不要というわけでもない。ファイルを差し替えることができても、該当のプログラムを実行させるには、既存のプロセスを停止して、新しい実行ファイルを起動する必要がある。たとえば、カーネルはプロセスとして常に動いている。これを差し替えるには、一回停止する必要がある。Linuxカーネルを停止することは、システムの停止を意味する。通常、カーネルを差し替えたあとは、再起動処理をする。

 Linuxカーネルを使うChromebookも稼働中にシステムファイルを書き換えることはできるが、更新されたOSを有効にするためには、再起動する必要がある。

 それぞれ事情は異なるが、OSに属するファイルの更新、特にカーネルの更新では、何らかの再起動はつきものである、と言えるだろう。

そのほかのWindowsを再起動を求める理由 ただ“用心のため”に再起動を促すアプリも多い

 Windowsの機能の中には、起動時にデータを読み込んだら、データの更新に対応しないものがある。たとえば、ユーザーの所属グループは、ログオン時に読み込まれて、その後、所属グループが更新されても、ログオンしているユーザーの状態は元のままになる。このため、ユーザーをグループに追加した場合には、その設定を有効にするには再ログオンが必要になる。

 このほかにも、こうした構造のプログラムが存在する可能性がある。ただし、必ずしも情報がすべての公開されてはいないので、システム状態を最新にしておくためには、再起動あるいは再ログインをするくらいしかユーザーの対策はない。こうした理由から、インストール時に、“安全”のために再起動を促すアプリケーションもあるのだろう。

 昔は、Windowsでは「何かあったら再起動」と言われていた。Windowsが一番調子がいいのは、再起動直後であり、長時間使い続けると発見されていないバグのために、実行中のWindowsがおかしな状態になっている可能性があった。少なくとも再起動すれば、キレイな状態に戻せるというわけだ。

 アプリケーションのアップデートは、旧版のアンインストール、新版のインストールという手順でされるものがある。この場合、テンポラリファイルなどが残って、悪影響などを及ぼす可能性がある。このときに確実なのは、アンインストール後にWindowsを再起動することだ。再起動することで、次のインストールは比較的「クリーン」な状態で作業できる。

 長い間バージョンアップが続けられてきたアプリケーションほど、インストールやアップデートでのエラーを経験しており、そのための知見も少なくない。そう考えると、“用心のため”に再起動する気持ちも理解できなくもない。

 Linuxでも、個人用のマシンなら、再起動すべきプロセスがわかっていてもいちいち手動で作業するのが面倒なので、設定やシステムの更新のあと、再起動させてしまうことはままある。

 何かの設定作業などを説明する文書を作成するとき、「自分で必要なプロセス判断して停止して起動しろ」と書いてしまうのは無責任だ。しかし、コマンドを使って再起動が必要なプロセスを調べ、適切な方法でそれらを再起動させる手順を書き始めると、ページがいくらあっても足りなくなってしまい、逆に文書自体が読まれなくなる可能性も高まる。となると、そもそも説明すべきことではないというのが結論だ。このときの最善の記述は「システムを再起動しろ」である。

 アプリケーションのインストールや更新で再起動を要求されるものがまだある。単に開発時期が古く、以前から更新されていないケースもあるが、最近のプログラムでもインストール後に再起動を要求するものがある。しかし、本当に再起動が必要なのかは不明だ。再起動しなくてもアップデートしたバージョンを起動できることもある。そろそろ“用心のため”の再起動はやめ、再起動が必要ならば、明確に理由を示してほしいものだ。

この記事に関連するニュース

トピックスRSS

ランキング

記事ミッション中・・・

10秒滞在

記事にリアクションする

記事ミッション中・・・

10秒滞在

記事にリアクションする

デイリー: 参加する
ウィークリー: 参加する
マンスリー: 参加する
10秒滞在

記事にリアクションする

次の記事を探す

エラーが発生しました

ページを再読み込みして
ください