0

コンピュータがどのように再起動するかについてのこの非常に興味深いq/aを読みました。OSの開発についてはまったく知りませんが、システムを部分的にシャットダウンして、その時点から再起動できるかどうか疑問に思いました。

たとえば、Linuxでは、シャットダウン中に出力を正しく読み取ると、次のようになります。

  1. Terminate/KILLをすべてのプロセスに送信します。
  2. シャットダウンサービス/デーモン
  3. 電源を切る。

そして、起動シーケンスは次のようになります。

  1. BIOS、ブートローダー
  2. カーネルとモジュールをロードする
  3. サービス/デーモンを開始します
  4. プロセスを開始する

では、2時以降までシャットダウンしてから、3時以降にバックアップを開始できますか?基本的に、カーネルをメモリに保持しながらプロセスとデーモンをリセットする必要があると考えています。これにより、通常の(再)ブートでのカーネルのロード時間を節約できます。

4

2 に答える 2

3

ここでLinuxに焦点を当てます:

ユーザースペース(および一部のハードウェア部品)の「再起動」

これらのサービス、デーモン、およびプログラムの起動方法に関して、ブートシーケンスに何かが欠けています。

initLinuxで入力してください。の目的は/sbin/init、system V init、upstart、またはsystemdであり、これらの他のすべてのプロセスを正確に起動することです。これらのinitユーティリティはすべて、その下で実行されるサービスを管理する機能を備えています。

現在、Linuxシステムにはランレベルの概念もあります。

0 = shutdown
1 = single user recovery mode, no networking
2 = ?
3 = multi user networking no X
4 = ?
5 = multi user networking X

?厳密には定義されていません。init 3とにかく、 Linuxを使用していると仮定して、今すぐrootに入力して入力すると、Xおよびすべてのxクライアントが終了します。もちろん、特定のランレベルで何かが許可されている場合、それは強制終了されませんが、特定のプロセスのみを再起動したい場合は、これで非常にうまくいきます。システムデーモンを再起動するユースケースは更新に対応しており、最近のほとんどのパッケージマネージャーは、選択したinitscriptツールを介して実際にこれを実行します。

したがって、GUI全体を再起動でき、任意のデーモンを再起動できます。他のプロセスも強制終了できます。ハードウェアドライバをリロードしますか?私はすでにその場でそれを行うことができるmodprobeので、グラフィックスドライバーの更新が必要な場合はinit 3、古いドライバーを削除し、新しいドライバーを挿入して続行することができます。

パッケージマネージャーはシステムデーモンを再起動する方法を知っており、いつでもそのアドバイスに従ってログアウトして再度ログインできます。したがって、Linuxは、更新時の再起動を回避するという点で、すでにかなり効率的です。

カーネルの「再起動」

つまり、基本的に、Linuxのほとんどは実際に再起動しなくても「再起動」できると思います。だから今何が残っていますか?

  1. カーネルをリロードできません。
  2. ルートファイルシステムを簡単にアンマウントできません。新しくロードされたユーザースペースについては、これに依存しています。免責事項:カーネルの「リロード」中にinitramfsをリロードすることができるため、ここでは1に依存しています。

さて、問題はどのようにカーネルをリロードするかです。カーネルは実際には特別な魔法ではありません。メモリにコピーされた別のコンピュータプログラムなので、カーネルを上書きして実行を渡すプログラムをどこかに書くことができます...

これは存在し、信じられないかもしれませんが、と呼ばれkexecます。ウィキペディアのページを離れて、問題を要約します。

実行可能ではありますが、kexecなどのメカニズムを実装すると、次の2つの大きな課題が発生します。

  1. 新しいカーネルは、実行中に現在実行中のカーネルのメモリを上書きします
  2. 新しいカーネルは通常、すべての物理デバイスが明確に定義された状態にあることを期待します(システムの再起動後、BIOS(またはファームウェア)がデバイスを「正常な」状態にリセットしたとき)。実際の再起動をバイパスすると、デバイスが不明な状態になる可能性があり、新しいカーネルはそれから回復する必要があります。

kexecは、システムシャットダウンとは異なり、ファイルシステムまたはプロセスを自動的に停止しません。あなたがその責任を負います。

だからあなたはそれを持っています。リロードする必要のある部分に応じて、Linuxではほとんどが可能です。

于 2011-06-09T01:06:59.747 に答える
0

ほとんどのプロセッサ/コンピュータメーカーは、コンピュータが置かれる可能性のあるいくつかの異なる電源状態を持っています。Intelはおそらくあなたの質問に最も当てはまります。これは、汎用コンピュータに関するもののようです。このリンクをチェックしてください:

システム電源状態に関するすべて(S0-S5)

インテルの電源状態がどのように機能するか、各状態でどのシステムコンテキストが保持されるかなどについて詳しく知るには、一般に、入力するS状態が高いほど、保持する必要のあるシステムコンテキストが少なくなるため、システムが長くなります。その状態を終了し、S0(完全に動作可能)に戻ります。

于 2011-06-09T00:37:02.083 に答える