コンピュータはどうやって再起動するのですか?電源が切れた後、どうやって自分で再起動するように指示するのでしょうか?これができるのはどんなソフトですか?
495 Seth Carnegie 2011-06-08
tl;dr: コンピュータの電源状態は、ACPI (advanced configuration and power interface) の実装によって制御されます。シャットダウンプロセスの最後に、オペレーティングシステムは、コンピュータを再起動すべきであることを示すACPIコマンドを設定します。これに応答して、マザーボードはそれぞれのリセットコマンドまたはラインを使用してすべてのコンポーネントをリセットし、ブートストラッププロセスに従います。マザーボードは実際には電源が切れることはなく、さまざまなコンポーネントをリセットして、電源ボタンが押されたかのように動作するだけです
長くてだらだらしていますが、(私の考えでは)もっと面白い答えがあります
ソフトパワーとその仕組み
昔(まあ、私のような大学生にとっては90年代なんて大昔の話ですが)、AT電源管理機能付きのAT(Advanced Technology)マザーボードがありました。AT電源システムは非常にシンプルでした。コンピュータの電源ボタンはハードウェアのトグル(おそらくケースの後ろにある)で、120Vacの入力はそこを通っていました。このスイッチが物理的に電源のオンとオフを切り替え、このスイッチがオフの位置にあるとコンピュータ内のすべてのものが完全に死んでしまいます(CMOSバッテリーがないとハードウェアのクロックを維持するための電源が供給されないため、このことが非常に重要になります)。電源スイッチは物理的なメカニズムだったので、電源のオン/オフをソフトウェアで切り替える方法はありませんでした。Windowsは、有名な “それは今、あなたのコンピュータをオフにするには安全です” メッセージが表示されます, すべてが駐車され、オフにする準備ができていたが、それはOSが実際に電源スイッチを反転させることはできませんでした.この構成は、時にはハードパワーと呼ばれていました, それはすべてのハードウェアだからだ
最近では、ATXマザーボードとATXパワーの驚異のおかげで、状況は変わってきています(これはAdvanced Technology eXtendedです)。他の多くの進歩(mini-DIN PS/2など)とともに、ATXはソフトパワーをもたらしました。ソフトパワーとは、コンピュータへの電力をソフトウェアで制御できることを意味します。これは、いくつかの輸入品の変更をもたらしました
- スタンバイ電源:電源のピンアウトに「5v SB」または「5v スタンバイ」のラベルが貼られたコネクタを見たことがあるかもしれません。スタンバイ電源は、コンピュータの電源が切れていても、常にオンになっているマザーボードへの5Vラインです。これが、最新のコンピュータを修理する際には、PSUのハードスイッチ(もしあれば)を抜くか、オフにすることが重要な理由です。5v SBは電源が主電源になったときにCMOSバッテリーを交換するために使用されるため、CMOSバッテリーはコンピュータのプラグを完全に抜いたときにのみ使用されます。5v SBラインは、コンピュータのコンポーネント(最も重要なのはBIOSとネットワークアダプタ)が、コンピュータの電源が切れても簡単なソフトウェアを実行し続けることを可能にする重要なものです
- インテリジェント電源制御。電源装置のマザーボード(P1)コネクタのピンアウトを見ると、一般的にPS_ONとPS_RDYのラベルが付けられた2つのピンがあることに気づくでしょう。これらは「電源オン」と「電源準備完了」を意味します。実験が好きな方は、コンピュータにない電源装置を持ってきて、それを接続し、アース線(黒い線の一つ)をPS_ON線(緑色の線)に慎重にショートさせます。電源が目に見えてオンになり、ファンが回転します。5v SBで動作するマザーボードのコンポーネントは、実際にはPS_ONピンに電源を接続することで電源のオンオフを行います。電源には充電に時間がかかるコンデンサや他のコンポーネントがあるため、PSUがオンになった直後は電源のメイン出力からの電圧が安定しないことがあります。これがPS_RDYピンの役割で、電源装置の内部ロジックが電源装置が「準備ができた」と判断し、安定した電力を供給するとオンになります。マザーボードはPS_RDYがオンになるまで待機して起動を続けます
つまり、電源スイッチはもはやコンピュータを「オン」にするものではありません。その代わりに、電源スイッチはマザーボードの基本コントローラに接続されており、ボタンが押されたことを検出し、PS_ON を点灯させて電源を供給するなど、システムを準備するためのいくつかのステップを実行します。電源ボタンだけが起動プロセスのトリガーとなるわけではありませんが、拡張バス上のデバイスでも起動することができます。これは、イーサネットネットワークアダプタがコンピュータの電源が切れているときに、「マジックパケット」と呼ばれる非常に特殊なパケットを探すために重要なことです。彼らは自分のMACアドレスにアドレスされたこのパケットを検出した場合、彼らは起動プロセスをトリガします。これが「ウェイクオンLAN」(WoL)の仕組みです。時計も起動を開始することができます(ほとんどのBIOSでは、コンピュータが毎日起動する時間を設定することができます)し、USBやFireWireデバイスも起動を開始することができますが、私はこれについての実装を知りません
パワーコントロールを理解する
さて、私がソフトパワーについて説明するのは、それが面白いと思うから(私が物事を説明する上でいつも重要な理由)と、コンピュータの電源や実行/オフ状態がソフトウェアによってどのように制御されているかを理解することができるからです。現在のほとんどのコンピュータでは、このソフトウェアシステムは、ACPI(Advanced Configuration and Power Interface)の実装です。ACPIは、標準化された統一されたシステムで、ソフトウェアがコンピュータの電源システムを制御することを可能にします。ACPIのパワーステートという言葉を聞いたことがあるかもしれません。電源制御の基本的なメカニズムは、これらの「電源状態」であり、オペレーティングシステムは、スイッチ(実際に電源がオフになる前に発生するシャットダウン/休止プロセス)を準備して電源モードを切り替え、その後、マザーボードに電源状態を切り替えるようにコマンドを送信します。電源状態は次のようになります
- G0:作業中(コンピュータが「オン」の状態)
- G1:スリーピング(コンピュータの待機状態をS変態に分割したもの)
- S1:CPUやRAMへの電源は入ったままだが、CPUが命令を実行していない。周辺機器の電源はオフになっています
- S2: CPUは電源オフ、RAMは維持されています
- S3:RAMとレジュームのトリガーとなるデバイス(キーボード)を除いて、すべてのコンポーネントがパワーダウンしています。OSに「スリープ」を指示すると、プロセスを停止してこのモードになります
- S4:冬眠。絶対的にすべてがオフになります。オペレーティングシステムにハイバネートを指示すると、プロセスを停止し、RAMの内容をディスクに保存し、このモードに入ります
- G2: ソフトオフ:コンピュータの「オフ」状態です。起動のトリガーとなるデバイスを除いて、すべての電源がオフになっています
- G3:メカニカルオフ
リセットが実際にどのように起こるのか
再起動はこれらの状態の一つではないことに気づくでしょう。では、コンピュータが再起動すると実際には何が起こるのでしょうか?答えは意外かもしれませんが、電源管理の観点からはほとんど何もないからです。ACPIリセットコマンドがあります。オペレーティングシステムを再起動するように指示すると、通常のシャットダウンプロセス (すべてのプロセスを停止し、少しのメンテナンスを行い、ファイルシステムをマウント解除するなど) に従い、最後のステップとして、マシンをパワーステートG2にする代わりに (単にシャットダウンするように指示した場合と同じように)、リセットコマンドを設定します。これは一般的に「リセットレジスタ」と呼ばれていますが、ACPIインターフェースのほとんどと同様に、リセットを要求するために特定の値を書き込むためのアドレスに過ぎないからです。これが何をするかについては、2.0 の仕様を引用します
オプションの ACPI リセット・メカニズムは、完全なシステム・リセットを提供する標準メカニズムを指定します。このメカニズムを実装する場合、システム全体をリセットする必要があります。これには、プロセッサ、コアロジック、すべてのバス、およびすべてのペリフェラルが含まれます。OSPM の観点からは、リセット・メカニズムをアサートすることは、論理的にはマシンの電源を切ることと同等です。リセット後に制御を得ると、OSPM はコールドブートと同様の動作を実行します
そのため、リセットレジスタがセットされると、いくつかのことが順番に起こります
- すべてのロジックがリセットされます。これは、CPU、メモリコントローラ、ペリフェラルコントローラなどを含む様々なハードウェアのビットにそれぞれのリセットコマンドを送信することを意味します。ほとんどの場合、これは上で AndrejaKo が示したように、単に物理的な RST ワイヤを点灯させることを意味します
- そして、コンピュータをブートストラップします。これが「コールドブートに似た動作を実行する」部分です。マザーボードは、電源ボタンが押された後に電源が準備できた場合と同じ手順を実行します
この 2 つのステップ (実際にはもっと多くのステップに分解されます) の最終的な効果は、コンピュータが起動したように見えても、実際にはずっと電源が入っていたということです。これは、シャットダウンと起動に必要な時間が短くなることを意味します (電源の準備が整うのを待つ必要がないので)。これは、別の起動トリガー(WoLなど)を使用する必要がないことを意味し、ブートをトリガーする方法がない場合、リモートでシステムをリセットするための効果的な方法としてRebootを使用することができます
長い答えだったでもね、うまくいけば、コンピュータの電源管理についてもっと知っているといいんだけどね。これを研究していて、確かにいくつかのことを学びました
602 jcrawfordor 2011-06-08
ここからがスタートです
チップは通常、オフになってからオンになることはありません。その代わりに、リセットラインがあり、通常はすべてのメモリがクリアされ、プロセッサが電源を入れたばかりのように見えるときに、プロセッサをいわゆるリセット状態にします。このピンがハイ(またはロー)になっている間は、プロセッサはリセット状態になります。ピンを離すと、最初に電源を入れたときと同じように、通常の起動を続けます。電源カット自体がないのがポイントですね
では、現代のパソコンのような大規模なシステムにはどのようにスケールするのでしょうか?そうですね………現代のコンピュータは、コンピュータそのもので作られていることもあります。ですから、コンピュータをリセットするように設定すると、コンピュータを作っている「コンピュータ」は(リセットが制御されていれば)状態を保存し始めたり、リセットピンを引っ張られたりします
一部のプロセッサやマイクロコントローラ(これは小型の自己完結型コンピュータで、通常は現代のデスクトップコンピュータより20年遅れています)は、内部のスイッチを使ってリセットできるようになっています。私が言ったように、リセットを発生させる信号がなくなると、コンピュータは起動します。だから、質問の前提が完全に正しいわけではありません。コンピュータはいつ電源を入れるかを知りません。オフ」か「リセット」が必要な時を知っていて、それを維持する信号が無くなればオンになります
この動作は、特定の時間に電源を入れるように設定したり、ネットワーク経由で電源を入れるように設定したりすることができる現代のコンピュータではおかしく見えるかもしれません。私が言ったように、コンピュータはコンピュータでできています。そのため、メインプロセッサはオフになっていても、内部にはオンになっている他のチップやマイクロコントローラが多数存在する可能性があります。一番わかりやすいのは、電池で動くリアルタイムクロックです。リアルタイムクロックは、他のチップをオンにして、他のチップをオンにし、コンピュータ全体がオンになるまで連鎖反応を繰り返します。今日のコンピュータには、+5 VDCスタンバイ電圧と呼ばれる電源ラインがあります。これは、コンピュータが「オフ」になっているときにオンになっている様々なデバイスに約50mWの電力を供給します
ちょっとした豆知識。Intel 386 EXプロセッサーのリセットピンは110番ピンです
Intel i7-900ではランドナンバーAL39です
かなり複雑なシステムなので、高度な視点から物事の仕組みを説明できるような答えを誰かが出してくれることを期待しています
81 AndrejaKo 2011-06-08
このブログ記事では、Linux がリブートを誘発する方法を説明しています
Excerpt:
Linux には x86 をリセットする方法がたくさんあります。その中には32ビットのみのものもあるので無視することにします。また、それらは恐ろしいものです。だから、5つの方法が残っている
kbd – キーボードコントローラ経由で再起動します。オリジナルのIBM PCにはCPUリセットラインがキーボードコントローラに接続されていました。適切なマジック値を書き込むと、そのラインにパルスが送られ、マシンがリセットされます。最近のマシンはキーボードコントローラを持っていない(実際には組み込みコントローラの一部です)という事実を除けば、これは非常に簡単なことですし、最新のマシンはキーボードコントローラを持っているふりをしていません。さて、組み込みコントローラはソフトウェアを実行します。そして、誰もが知っているように、ソフトウェアは恐ろしいものです。しかし、さらに悪いことに、組み込みコントローラのソフトウェアはBIOSの作者によって書かれています。だから、明らかに、これが動くというふりをするのは、ある種の手の込んだ作り話なのです。いくつかのマシンは、ハードウェアがWindowsがプログラムするであろう正確な状態にあることに非常に敏感です。いくつかのマシンは10回中9回は動作し、その後、奇妙なタイミングの問題でロックアップします。他のマシンは全く動作しないものもあります。ハラッ!
triple – トリプルフォールトの生成を試みます。これは、空の割り込み記述子テーブルをロードしてから int(3) を呼び出すことで行われます。割り込みが失敗し(IDTがありません)、フォールトハンドラが失敗し(IDTがありません)、CPUは理論的にはリセットをトリガするべき状態になります。しかし、このようなことが起こるという要件がないようで、多くのマシンでは動作しません
pci – 実際にはpciではありません。従来の PCI コンフィグスペースへのアクセスは、io ポート 0xcf8 に 32 ビットの値を書き込むことで、バス、デバイス、ファンクション、コンフィグレジスタを識別します。ポート 0xcfc には問題のレジスタが格納されています。しかし、0xcf9 に適切な魔法の値を書き込むと、マシンは再起動します。壮観です。そして、標準化されていない(確かに PCI 仕様の一部ではありません)ので、チップセットによって異なる要件があるかもしれません。ブー
efi – EFI ランタイムサービスは、マシンを再起動するためのエントリーポイントを提供します。通常は動作します!EFI ランタイムサービスが全く動作している限り、これはストレッチかもしれません
acpi – ACPI 仕様の最近のバージョンでは、アドレス (通常はメモリやシステム IO 空間) とそこに書き込む値を指定することができます。アドレスに値を書き込むとシステムがリセットされます。しかし、そうすると失敗することが多いことがわかりました。また、PCIリブートメソッドは値のペアを必要とし、ACPIは1つの値しか与えないので、ACPIを介してPCIリブートメソッドを表現することは不可能です
27 jabiko 2011-06-08
それは、それがやっていることは何でも停止し、BIOSの特定の場所からコードを実行し始めるべきであることをCPUに伝えるデータラインを低く引っ張るI/Oの場所をfrobsします
10 Ignacio Vazquez-Abrams 2010-07-28
電源管理の前の昔は、もちろんコンピュータは自分で再起動することができました。(フリーズしたプログラムがあると、Ctrl+Alt+Deleteでコンピュータを再起動しなければならなかったことを覚えている人はいますか?)
私の古い486では、アセンブリ言語コマンドJMP FFFF:0000
(つまり、CPUの命令ポインタをそのアドレスにセットする)を実行すると、コンピュータ全体が再起動してしまう。言い換えれば、FFFFF:0000は、コンピュータが最初に起動したときに何をすべきかを指示するBIOSの場所を指定しているのです。AndrejaKoさんの回答で説明されているリセットピンや、電源管理以前の時代のリセットボタンも、命令ポインタを同じアドレスに強制的に移動させるのではないでしょうか
Googleで「JMP FFFF:0000」と検索すると、これについての興味深いページがたくさん出てきます
10 krubo 2011-06-12
番犬という名のものもあります。この装置はデッドマンのスイッチとして機能するコンピュータは1分ごとにウォッチドッグにまだ生きていることを合図しなければなりません。コンピュータがクラッシュすると、例えばエンドレスループに突入することで、ウォッチドッグに信号を送ることができなくなり、ウォッチドッグはハードウェアリセットを実行します。これは、ロボットが高電圧電力サージによってノックアウトされたターミネーターの人気テレビシリーズで実証されました
9 Marcel 2011-06-09
古いIBM PC-1に戻ると、キーボードコントローラは、奇妙なことにリブートを処理していました。IBMはキーボードを扱うために小さなマイクロプロセッサを組み込み、それには予備のI/Oラインがあったので、そのラインの一つをメインCPUのリセットラインの駆動に使っていました。キーボードコントローラに送られたコマンドは、あたかも電源が入ったかのようにCPUをリセットすることになります
この伝統は “AT “時代まで続いていて、ACPIにもその名残が残っているのではないかと推測しています
追記: 上記のリセットスキームには興味深い詳細があります。初期のブートシーケンスの間、コードは以前に実行されたコードによって設定された可能性のある特定のパターンをRAM内で探します。このコードが存在する場合、POST (パワーオンセルフテスト) 診断のいくつかはスキップされます。このパターンが存在するのは「ウォーム」ブート時のみです
4 Daniel R Hicks 2011-12-03