コンピューターはどのように再起動できますか?オフになった後、どのようにして再びオンに戻るように自分自身に伝えるのですか?これを行うことができるのはどのようなソフトウェアですか?
コンピューターはどのように再起動できますか?オフになった後、どのようにして再びオンに戻るように自分自身に伝えるのですか?これを行うことができるのはどのようなソフトウェアですか?
回答:
tl; dr:コンピューターの電源状態は、ACPI(高度な構成と電源インターフェイス)の実装によって制御されます。シャットダウンプロセスの最後に、オペレーティングシステムはACPIコマンドを設定して、コンピューターを再起動する必要があることを示します。それに応じて、マザーボードは、それぞれのリセットコマンドまたはラインを使用してすべてのコンポーネントをリセットし、ブートストラッププロセスに従います。マザーボードが実際にオフになることはありません。さまざまなコンポーネントをリセットするだけで、電源ボタンが押されたように動作します。
長くてとりとめのない、しかし(私の意見では)より興味深い答え:
昔(大丈夫、私のような大学生にとっては90年代は昔でした)、ATパワーを備えたAT(Advanced Technology)マザーボードがありました管理。AT電源システムは非常にシンプルでした。コンピューターの電源ボタンはハードウェアのトグルで(おそらくケースの背面にあります)、120vacの入力はそのまま通されました。物理的に電源の電源をオン/オフし、このスイッチがオフの位置にあると、コンピューターのすべてが完全に停止しました(これにより、CMOSバッテリーが非常に重要になりました。クロックカチカチ)。電源スイッチは物理的なメカニズムであるため、電源をオンまたはオフにするソフトウェアの方法はありませんでした。Windowsには有名な「コンピューターの電源を切るのは安全です」というメッセージが表示されます。これは、すべてが駐車されて電源を切る準備ができているにもかかわらず、OSが実際に電源スイッチを切り替えることができないためです。この構成は、ハードパワー、それはすべてのハードウェアだから。
最近では、ATXマザーボードとATX電源の不思議さにより、状況は異なります(追跡している場合、それはAdvanced Technology eXtendedです)。他の多くの進歩(ミニDIN PS / 2、誰か?)とともに、ATXはソフトパワーをもたらしました。ソフト電源とは、コンピューターへの電源をソフトウェアで制御できることを意味します。これにより、インポートの変更がいくつか行われました。
したがって、電源スイッチはコンピューターを「オン」にすることはありません。代わりに、マザーボードの基本コントローラーに接続され、ボタンが押されたことを検出し、電源を使用できるようにPS_ONを点灯するなど、いくつかの手順を実行してシステムを準備します。電源ボタンは、起動プロセスをトリガーする唯一の方法ではありません。拡張バス上のデバイスもトリガーできます。これは重要です。なぜなら、コンピューターの電源が切れているときにイーサネットネットワークアダプターが実際にオンのままで、「マジックパケット」と呼ばれる特定のパケットを探すからです。MACアドレス宛のこのパケットを検出すると、起動プロセスがトリガーされます。これが「Wake-on-LAN」(WoL)の仕組みです。クロックはブートを開始することもできます(ほとんどのBIOSでは、コンピューターが毎日ブートする時間を設定できます)。
それで、私はそれがおもしろいと思うので(私が物事を説明する主な理由である)、そしてあなたのコンピューターの電源と実行/オフ状態がすべてソフトウェアによってどのように制御されるかを理解できるので、私はSoft Powerの事を説明します。現在のほとんどのコンピューターでは、このソフトウェアシステムはAdvanced Configuration and Power Interface(ACPI)の実装です。ACPIは、ソフトウェアがコンピューターの電源システムを制御できるようにする標準化された統合システムです。ACPIの電源状態について聞いたことがあるかもしれません。電源制御の基本的なメカニズムはこれらの「電源状態」です。オペレーティングシステムは、スイッチ(電源が実際にオフになる前に発生するシャットダウン/休止プロセス)を準備し、マザーボードに電源状態を切り替えるように命令することで電源モードを切り替えます。電源状態は次のようになります。
リブートはこれらの状態の1つではないことがわかります。それでは、コンピューターが再起動したときに実際に何が起こるのでしょうか?電源管理の観点からはほとんど何もないため、答えは驚くかもしれません。ACPIリセットコマンドがあります。オペレーティングシステムを再起動するように指示すると、通常のシャットダウンプロセス(すべてのプロセスの停止、少しのメンテナンスの実行、ファイルシステムのマウント解除など)が行われ、その後、マシンを電源状態にする代わりに最終ステップとしてG2(単にシャットダウンするように指示した場合のように)Resetコマンドを設定します。これは一般に「リセットレジスタ」と呼ばれます。これは、ほとんどのACPIインターフェイスと同様に、リセットを要求するために特定の値を書き込む必要があるアドレスにすぎないためです。2.0の仕様を引用して引用します。
オプションのACPIリセットメカニズムは、完全なシステムリセットを提供する標準メカニズムを指定します。実装されると、このメカニズムはシステム全体をリセットする必要があります。これには、プロセッサ、コアロジック、すべてのバス、およびすべての周辺機器が含まれます。OSPMの観点からは、リセットメカニズムのアサートは、マシンの電源を入れ直すことと論理的に同等です。リセット後に制御を取得すると、OSPMはコールドブートと同様の方法でアクションを実行します。
そのため、リセットレジスタを設定すると、いくつかのことが順番に発生します。
これらの2つのステップ(実際にはさらに多くのステップに分解されます)の最終結果は、コンピューターが起動したばかりのように見えますが、実際には常に電源が入っていることです。これは、シャットダウンして起動するのに必要な時間が短くなることを意味し(電源の準備が整うまで待つ必要がないため)、オペレーティングシステムのシャットダウンによって起動を開始できることが重要です。これは、別のスタートアップトリガー(WoLなど)を使用する必要がないことを意味し、ブートをトリガーする方法がない場合、システムをリモートでリセットする効果的な方法としてRebootを使用できます。
それは長い答えでした。でもね、今はコンピュータの電源管理についてもっと知っているといいですね。私は確かにこれを研究するいくつかのことを学びました。
出発点は次のとおりです。
通常、チップはオフになってからオンになりません。代わりに、通常はすべてのメモリがクリアされ、プロセッサの電源が入ったばかりのように見えるときに、プロセッサをいわゆるリセット状態にするリセットラインがあります。そのピンがHigh(またはプロセッサによってはLow)に保持されている間、プロセッサはリセットされます。ピンがリリースされると、初めてオンになった場合と同じように、ピンは通常どおり起動し続けます。これのポイントは、停電自体がないことです。
では、これは現代のPCのような大規模システムにどのように拡張されるのでしょうか?現代のコンピューターは、コンピューター自体で作られていることもあります。したがって、コンピューターをリセットするように設定すると、コンピューターを作成する「コンピューター」は、状態の保存を開始します(リセットが制御されている場合)、または単にリセットピンを引っ張ります。
一部のプロセッサおよびマイクロコントローラ(通常、最新のデスクトップコンピュータより20年遅れの小型の内蔵型コンピュータ)は、内部スイッチを使用して自分自身をリセットできます。前述したように、リセットを生成する信号がなくなると、コンピューターが起動します。したがって、質問の前提は完全に正しいわけではありません。コンピューターはいつ電源を入れるべきかを知りません。「オフ」またはリセットする必要があるとき、およびそれを保持する信号がなくなると、それはオンになります。
この動作は、特定の時間またはネットワークなどでオンに設定できる現代のコンピューターでは奇妙に見えるかもしれません。私が言ったように、コンピューターはコンピューターでできています。そのため、メインプロセッサはオフになっている場合がありますが、内部には他にも多数のチップやマイクロコントローラがオンになっている場合があります。最も明らかなケースは、多くの場合バッテリー駆動のリアルタイムクロックです。その後、他のチップをオンにして、他のチップをオンにし、コンピューター全体がオンになるまで連鎖反応を続けます。今日のコンピューターには、+ 5 VDCスタンバイ電圧と呼ばれるPSUラインがあります。コンピューターが「オフ」のときにオンになっているさまざまなデバイスに約50 mWの電力を供給します。
ちょっとした雑学:Intel 386 EXプロセッサーのリセットピンはピン番号110です。
Intel i7-900では、ランド番号はAL39です。
それは非常に複雑なシステムなので、誰かが物事が高レベルの観点からどのように機能するかを説明する答えを提供できることを願っています。
このブログ投稿では、Linuxがリブートをトリガーする方法について説明しています。
抜粋:
Linuxには、x86をリセットするさまざまな方法があります。それらのいくつかは32ビットのみであるため、正直に言うと、あなたは自分の人生で何をしているのかを無視するつもりです。また、彼らは恐ろしいです。そのため、5つが残ります。
kbd-キーボードコントローラーを介して再起動します。元のIBM PCでは、CPUリセットラインがキーボードコントローラーに接続されていました。適切なマジック値を書き込むと、回線がパルスされ、マシンがリセットされます。これは非常に簡単です。ただし、最新のマシンにはキーボードコントローラーがなく(実際には組み込みコントローラーの一部です)、さらに最新のマシンにはキーボードコントローラーのふりもありません。現在、組み込みコントローラーはソフトウェアを実行しています。そして、誰もが知っているように、ソフトウェアは恐ろしいものです。しかし、さらに悪いことに、組み込みコントローラー上のソフトウェアはBIOS作成者によって作成されています。したがって、これがこれまでに機能しているふりは、何らかの手の込んだフィクションです。一部のマシンは、Windowsがプログラムするのとまったく同じ状態のハードウェアについて非常にうるさいです。一部のマシンは、10回のうち9回動作してから、何らかの奇妙なタイミングの問題のためにロックします。そして、他の人はまったく機能しません。ハラー!
triple-トリプルフォールトの生成を試みます。これは、空の割り込み記述子テーブルをロードしてから、int(3)を呼び出すことによって行われます。割り込みは失敗し(IDTはありません)、障害ハンドラーは失敗し(IDTはありません)、CPUは理論的にはリセットをトリガーする必要がある状態に入ります。ただし、これが発生する必要はないようで、多くのマシンでは機能しません。
pci-実際にはpciではありません。従来のPCI構成スペースアクセスは、32ビット値をioポート0xcf8に書き込んで、バス、デバイス、機能、および構成レジスタを識別することによって実現されます。ポート0xcfcには、問題のレジスタが含まれます。ただし、適切なマジック値のペアを0xcf9に書き込むと、マシンは再起動します。素晴らしい!また、何らかの方法で標準化されていないため(確かにPCI仕様の一部ではないため)、チップセットごとに要件が異なる場合があります。ブー
efi-EFIランタイムサービスは、マシンを再起動するためのエントリポイントを提供します。通常はそれでも動作します!EFIランタイムサービスがまったく機能している限り、これは大幅に増加する可能性があります。
acpi-ACPI仕様の最近のバージョンでは、アドレス(通常はメモリまたはシステムIOスペース)とそこに書き込む値を指定できます。この考え方は、アドレスに値を書き込むとシステムがリセットされるというものです。そうすることはしばしば失敗することがわかります。PCIの再起動方法には値のペアが必要で、ACPIには1つの値しか与えられないため、ACPIを介してPCIの再起動方法を表すこともできません。
I / Oロケーションをフロップし、データラインをLowにします。これにより、CPUに、実行中の処理を停止し、BIOSの特定のロケーションからコードの実行を開始するよう指示します。
もちろん、電源管理の前の昔に、コンピューターはもちろん自分で再起動することができました。(プログラムを凍結したためにCtrl + Alt + Deleteを使用してコンピューターを再起動する必要があったことを覚えている人はいますか?)
私の古い486では、アセンブリ言語コマンドJMP FFFF:0000
(つまり、CPUの命令ポインターを上記のアドレスに設定)によってコンピューター全体が再起動しました。言い換えれば、FFFF:0000は、コンピューターが最初に起動したときに実行する必要がある指示を含むBIOS内の場所に対応します。AndrejaKoの答えで説明されているリセットピン、または電源管理前のリセットボタンは、命令ポインターを同じアドレスに強制するものと思われます。
JMP FFFFのためのGoogle検索:0000はこのことについて多くの興味深いページを明らかにする。
ウォッチドッグと呼ばれるものもあります。このデバイスは、デッドマンのスイッチとして機能します。コンピューターは、ウォッチドッグに1分ごとにウォッチドッグに信号を送り、まだ生きていることを知らせます。無限ループに陥ることなどによりコンピューターがクラッシュすると、ウォッチドッグが意図したとおりに実行中であることをウォッチドッグに通知できず、その場合、ウォッチドッグはハードウェアリセットを実行します。これは、ロボットが高電圧の電力サージによってノックアウトされたターミネーターの人気のあるtvシリーズで実証されました。2分でリセットされます。
古いIBM PC-1に戻ると、奇妙なことに、キーボードコントローラーが再起動を処理しました。IBMは、キーボードを処理するために小さなマイクロプロセッサーを組み込み、予備のI / Oラインをいくつか持っていたため、それらのラインの1つを使用してメインCPUのリセットラインを駆動しました。キーボードコントローラーに送信されたコマンドは、電源がオンになった直後のようにCPUをリセットします。
この伝統は「AT」時代にまで続き、今日のACPIにはその痕跡が残っていると思います。
追加:上記のリセットスキームについて興味深い詳細があります。初期のブートシーケンス中に、コードは、以前に実行したコードによって設定された可能性のあるRAM内の特定のパターンを探しました。このコードが存在する場合、POST(電源投入時自己診断)診断の一部がスキップされました。パターンは「ウォーム」ブートにのみ存在します。