- ベストアンサー
シャットダウン時のコンピュータ内部の動作について
- シャットダウン時のコンピュータ内部の動作について調査しました。システムをシャットダウンすると、コンピュータ内部では特定の順番で複数の処理が行われます。
- また、シャットダウン処理にはメモリの解放も含まれており、これはメモリリークを防ぐための設計上の理由です。
- さらに、シャットダウンに関する情報を探す際は、特定のOSに偏ったものではなく、システム全般に言える再起動の意味を理解するために幅広い情報を参考にすることがおすすめです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
Q/システムをシャットダウンするとは、コンピュータにとって、どういう処理をするプロセスなのでしょうか。 A/仮想メモリの情報で必要なものを、ハードディスクやSSDに書き出す。レジストリやイベント情報の更新を行う。物理的に電源の遮断を行うという手順のみです。 Q/なぜ、使用していたメモリを解放するのでしょうか。 A/その発想は正直なかったです。きっとACPIやAPMのルールが確立してから質問者様はPCを触られたのでしょう。基本的に、メモリを解放するというのは、電源が入っているときに、強制的にソフトウェアまたはハードウェアの手段によって、メモリ上のデータを別の場所に移したり、廃棄する場合を厳密には解放といいます。もちろん、それを理解した上で、再起動すると解放する。電源をいれば解放されるという言い方をすることはありますが、ソフトウェアだけの概念で答えると解放の条件は一般に再起動やシャットダウンは含まれません。これらは、ハードウェア起因の解放ですから・・・。 では、何故ハードウェア起因なのかというと、一般にメモリと呼ばれる媒体は正式に日本語で言うと主記憶装置と言いますが、このメモリーはDRAMだからです。Dynamic Random Access Memoryの略で、日本語で直訳すると「随時記憶保持動作が必要なメモリ」を意味します。製造は比較的安価で、大容量で高速な記録装置となるのが特徴ですが、とてもMemory(記憶装置)としては大きな欠陥があり、電気が流れていないと一定の間隔で、そこにあるデータを別の回路の一時的に循環させ元の保存場所に戻さないと、データが消えるという特徴があります。(これをリフレッシュという) これを行うのに、電気が必要で電気の供給がとぎれると、保存されているデータは全て失われます。 その代わり補助記憶装置(電源が切れてもデータが保持できる記録装置)より劇的に高速にデータのやりとりができます。 電源が切れると、一般にメモリが解放されますが、それはソフトウェアによって行われるのではなく、ハードとして消えるから、当然意図しなくとも解放されてしまうのです。 では、休止状態などで電源が切れているのに何故、途中の状態から開始できるかというと、OSにこれは電源を切るのではなく、途中から開始しますよというメッセージを残し、起動のステートに組み込みます。そして、メモリに保存している内容を、丸ごと補助記憶装置(HDDやSSD)に移して保管します。 電源が入ると、OSのブート領域は途中開始のメッセージを読み取り、ハードディスク上に保存されたメモリのバックアップを、DRAMに移すよう指示します。そして、移し終わったらメモリをロードします。 そうやって、休止前に戻すのです。 コンピュータの再起動やシャットダウンでは、メモリ内容を残すような指示は送られません。そのため、メモリはハードウェア(物理)的にクリアされます。そのため、リークを防ぐという意味はなく、仕様上消去されるのです。 ちなみに、メモリリーク(メモリ漏れ)は、意図せず発生するメモリの不正な浪費を意味します。 一般に、100MBしか日頃消費しないソフトが、500MB消費するといった現象がそれになります。リークを防ぐという概念は、一般にハードウェア理論ではなく、ソフトウェアの理論であり、どのようにアプリケーションまたはオペレーティングシステムがメモリを管理、解放するかという点と、それに対して、どういう場合に解放しないようにするかというルールの矛盾点が重なったときに発生します。 例えば、Aというソフトが1つ起動したときに100MB消費します。 2つ起動すると合わせて150MB、3つ以降は200MB、250MBと50MBずつ増えます。 OSの管理は、これに対して、ソフトウェアが求めるならそのソフトが完全に終了するまでは、ソフトが必要としたメモリ領域の最大量を常に保持するというルールだとしましょう。 同じソフトが4つのウィンドウで起動すると、250MB消費します。しかしそのうち3つを閉じると、実質で使われるのは100MBです。 ただ、OSが250MBの最大値を保持するとしていると、残りの150MBはAというソフトの予約として割り当てられ続けます。これを、リークといいます。 一般にリークを防ぐというのは、一般にOSとアプリケーションの関係から成立するもので、アプリケーションが使っていない領域をいつOSが解放するか、そしてその正確性がどれほどあるかによって、リークが少ないか多いかが決まります。 厳密にはリークを防ぐために再起動やシャットダウンをするというのは、正しい解釈ではなく、リークが起きるからシャットダウンせざる終えないまたは、再起動せざる終えないという解釈になります。 再起動しないと、解決しないようなリークが発生する素行の悪いアプリケーションやOSの場合は、それが必要になるのです。 尚、その昔コンピュータは、電源ボタンとリセットボタンを搭載していました。 電源ボタンは今でもありますけど、昔のコンピュータはブレーカーのように電源のオンとオフのスイッチが厳密にあったのです。OSはあくまで、ソフトを動かすための道具でしかなく、作業の途中でリセットしても、電源を切っても、影響はさほど無かったのです。 何故なら、コンピュータ1台で出来るソフトウェアでの作業は、1つだったからです。 要は、一つのソフトを1台のコンピュータで動かすシングルタスクでした。だから、ソフトが終了すればもちろんOSも終了する。別のアクセスが生まれることもありません。電源を切ってメモリリークを防ぐような状況なら、ソフトの設計を見直した方が効率的でした。 リセットボタンがあったのは、上記のようにスイッチでリセットしても動作上問題がないこと。また、仕組みとしてボタン制御の方が容易だったからです。OSがある程度進化しACPIやAPMといったローレベルプログラムでの制御コマンドが生まれてから、今のようにOSで全て制御できるようになりました。 そして、ソフトウェアの発展によりプリエンティブマルチタスクと呼ばれる時間単位(ミリ秒単位)でCPUやメモリの扱いなどをコントロールする技術が生まれたことで、現在でいうメモリリーク(OSや必要なソフトが必要なメモリを確保できなくなる現象)が起きるようになりました。 その際に、再起動すれば、電源を切れば改善するという言い回しが、質問者様のようにリークを防ぐためにわざわざ搭載されていると考える人も出てきたのです。 厳密には、当初から電源を切ればメモリ上のデータは消え、リセットボタンでもメモリ上のデータは消えたのです。そして、リークを防ぐ技術はソフトウェアの改善以外に昔からないのです。あくまで、ソフトの改善はソフトウェアの開発者にしかできないため、苦肉の策として電源を切ったり、再起動するという手段が使われているに過ぎないのですよ。 これが重要です。
その他の回答 (5)
- 山田 太郎(@testman199)
- ベストアンサー率17% (438/2463)
>何と何の、どんな関係に従っているのか、 それぞれのシステムによって異なります。 データをHDDに書き込んでいる最中に、HDD書き込みプログラム(ファイルシステム)を止めることはできません。 等々
お礼
追加質問にご返信いただきまして、ありがとうございました。 他の皆さんと同様、今後の参考にさせて頂きます。
- wellow
- ベストアンサー率46% (892/1932)
訂正 >>なぜ、使用していたメモリを解放するのでしょうか。 >#1の方の回答を参照。 シャットダウンはプロセスの終了を伴いますが、プロセスの終了に伴い解放されるメモリは解放されます。メモリリークはバグなので、プロセスの終了では解放されません。 電源を切れば、#1の方の仰る通り、メモリリークも解消されます。再起動により、IPLからOSをロードしてもメモリは初期化されますので、メモリリークも解消されます。 何故、こういった訂正をしたかというと、シャットダウンという処理には電源断を含まないからです。シャットダウンは安全にシステムを停止し、管理者が安全に電源を切ることができる状態にまで持っていくシーケンスです。 「電源断までがシャットダウンだ」というなら、AT電源のPCではシャットダウン手前までしかできないということになります。現にwindows95の頃は「コンピュータの電源を切断しても安全です」というメッセージが出てから、電源を切ったものです。 今のPCはACPIを実装していますので、こういうメッセージは出ません。
お礼
>現にwindows95の頃は「コンピュータの電源を >切断しても安全です」というメッセージが出てから、 >電源を切ったものです。 私はWindows95からのPCユーザーですが、そんな感じでしたか。 完全に忘れていたため、勉強になりました。 ありがとうございます。
- pringlez
- ベストアンサー率36% (598/1630)
>システムをシャットダウンするとは、コンピュータにとって、 >どういう処理をするプロセスなのでしょうか。 「システムをシャットダウンする」という意味では単に電源を切るというだけです。 ポイントはHDDやSSD、CF、SDカードと言った補助記憶装置を使うか使わないかです。補助記憶装置を使わないコンピュータでは、いきなりブチンと電源を切ります。それで問題ないからです。例えば、ファミコンなんかは補助記憶装置を使わないコンピュータに当たります。 一方、補助記憶装置を使うコンピュータでは、プロセスが起動中に電源が切られると、補助記憶装置への書き込み中であればファイルが破損する事になりますし、保存すべき情報が保存されていない不正な状態で終了する事になりえます。すると、次回起動時にファイルの破損等により不具合が発生したり、最悪の場合システムが起動しないことも発生しえます。 そのようなことを防ぐため、「システムを【安全に】シャットダウンする」ために、プロセスを終了しているのです。決してメモリを開放することを目的としているわけではありません。
お礼
>ポイントはHDDやSSD、CF、SDカードと言った >補助記憶装置を使うか使わないかです。 >いきなりブチンと電源を切ります。それで問題ないからです。 なるほど。 ソフトからのシャットダウンと、ハードからの シャットダウン(電源ボタンを落とす)との違い (ポイント)について教えていただきまして、 ありがとうございました。 私の質問は、ソフトからのシャットダウンの流れ (シーケンス)について、大枠を教えて頂いた上で、 それぞれのプロセスが、なぜシャットダウンという シーケンスの中に組み込まれているのか、 そのプロセスがないと、どうなってしまうのか、とか、そういうことが聞きたかったのですが、 これはこれで大変参考になる情報でした。 知識として、記憶しておきます。 回答ありがとうございました。
- wellow
- ベストアンサー率46% (892/1932)
>システムをシャットダウンするとは、コンピュータにとって、 >どういう処理をするプロセスなのでしょうか。 プロセスを停止させ、デバイスのバッファを吐き出したりクローズ処理を行い停止させることです。 プロセスの停止に伴いユーザはログオフされ、ネットワークセションはそのプロトコル手順(FINとかRST)に従って解放され、ディスクはwriteキャッシュはディスクに書き込まれた後にアンマウントされ、、といった感じになります。 >なぜ、使用していたメモリを解放するのでしょうか。 #1の方の回答を参照。 >メモリリークを防ぐための、設計上の理由でしょうか。 「今の生活をぶち壊して、生まれ変わってやり直したい」みたいな発想ですね。もう、メモリリークでも何でも「あり」まくりなシステム前提のようですが、それでは短期間で再起動を求められます。そんなものは誰も欲しくないですね。 >私が知りたいのは、特定のOSに偏った >ものではなく、システム全般に言える、コンピュータに >とっての再起動の意味です。 動的な組み込みや取り外しができる機能は良いのですが、そうでないものはOSの起動時に組み込んだり、メモリを確保しなければなりません。それができるのは起動時で、OS起動後のOS起動は、いわゆる再起動ということになります。
お礼
お返事ありがとうございました。 >プロセスを停止させ、デバイスのバッファを >吐き出したりクローズ処理を行い停止させることです。 もう少し詳しい情報が欲しかったです。 でもその他、大変参考になる情報ありがとうございました。
- 山田 太郎(@testman199)
- ベストアンサー率17% (438/2463)
一般的なメモリに使用されるDRAMは電源が止まると記録内容を保持できないためです。 シャットダウン時には依存関係に従いプロセスを停止してメモリを開放します。 その対必要なデータは電源供給が必要ないHDD等に保存します。 DRAMに電源供給し続けるのは、windowsで言えばスリープモードです
補足
早速、回答いただきまして、ありがとうございました。 >依存関係に従い とありますが、何と何の、どんな関係に従っているのか、 お手数ですが、その辺の説明をお願いします。
お礼
お返事ありがとうございました。 かなり細かい情報まで教えて頂きまして、 ありがとうございました。 正直全部は理解し切れませんので、 少しずつ必要なところから、吸収していこうと 思います。 回答ありがとうございました。