web-dev-qa-db-ja.com

「オペレーティングシステムがシャットダウンしたとき」と「カーネルがシャットダウンしたとき」の違いは何ですか?

読んで スティーブンの優れた回答の1つ 、私は違いが何であるか疑問に思いました

オペレーティングシステムがシャットダウンしたとき。 .。

そして

カーネルがシャットダウンすると、...(...外部コマンドを使用してシャットダウンするバリアントはそうではないと考えていますカーネル)

「外部コマンドを使用してシャットダウンするバリアント」は「OSがシャットダウンしたとき」ですか、「カーネルがシャットダウンしたとき」ですか?

つまり、「外部コマンドを使用してシャットダウンするバリアントはカーネルではないと考えている」とはどういう意味ですか?

システムコール reboot() OSまたはカーネルを再起動しますか?

コマンドrebootはOSを再起動しますが、カーネルは再起動しませんか?

ありがとう。

2
Tim

彼は、カーネル自体と、カーネルの上に構築されたユーザースペース構造であるオペレーティングシステムの他の部分との違いに注目しているようです。

_/sbin/reboot_または同等のもの(systemdまたはいくつかのinitスクリプトなどを呼び出す)を使用してシステムをシャットダウンすると、カーネルにシャットダウンを要求するだけではありません。ユーザースペースツールは、ファイルシステムのアンマウント、他のプロセスへのSIGTERMの送信、シャットダウンの要求など、ほとんどすべてのクリーンアップを実行するツールです。

代わりに、 reboot()システムコール をrootとして直接呼び出した場合、そのクリーンアップは行われず、カーネルは指示されたとおりに実行し、すぐにシャットダウンします。 (おそらく、マシンを再起動またはパワーダウンします)。マニュアルページには、reboot()sync()と同等の機能すら実行しないため、カーネル内(ファイルシステムが存在する場所)で実行できる種類のクリーンアップも実行しないことが記載されています。ドライバとI/Oバッファが存在します。)

マニュアルページの例として:

_LINUX_REBOOT_CMD_RESTART
       (RB_AUTOBOOT, 0x1234567).  The message "Restarting system." is
       printed, and a default restart is performed immediately.  If
       not preceded by a sync(2), data will be lost.
_

そう、

システムコールはreboot()を呼び出しますか?OSまたはカーネルを再起動しますか?

カーネルにシャットダウンまたは再起動を要求し、OSも一緒にダウンします。

コマンドrebootはOSを再起動しますが、カーネルは再起動しませんか?

ユーザースペースプロセスにシャットダウンを要求し、他のクリーンアップを実行し、その場合にのみカーネルにシャットダウンまたは再起動を要求します。

reboot()システムコールには、「コマンド文字列を使用する」と記述されているモード(_LINUX_REBOOT_CMD_RESTART2_)があります。ただし、これはユーザーモードコマンドを意味するのではなく、カーネルの内部にあるコマンドと、x86でも使用されていないコマンドを意味します。

カーネルとOS-on-top-of-the-kernelの違いを検討している間、原則としてOSだけを再起動し、カーネルを実行し続けることができることに注意してください。ユーザースペースによって設定されたすべてをクリーンアップし、他のユーザースペースプロセスを強制終了してから、カーネルの再起動を要求する代わりに、initを再起動してすべてを再起動する必要があります。ただし、これはあまり役に立たない可能性があり、カーネルに残っているすべての状態を確実にリセットするのは困難です(すべてのネットワークインターフェイスを手動でリセットする、iptablesルールをクリーンアップする、RAIDとループデバイスをリセットするなどが必要です)。何かを見逃す可能性が高く、後で噛み返る可能性があります。)

6
ilkkachu

あなたが引用した投稿は実際にこれを言っています:

カーネルがシャットダウンまたは再起動するとき、プロセスを気にせず、プロセスを強制終了しません(詳細については reboot() を参照してください;私はそれを考慮しています外部コマンドを使用してシャットダウンするバリアントはカーネルではありません)。

選択的な編集により、無関係な文がつなぎ合わされて、誤った印象が生まれました。

(セミコロンの後から)保持した部分は、(削除した)セミコロンの直前の部分に関連しています。つまり、外部コマンドを使用してシャットダウンするバリアントreboot()LINUX_REBOOT_CMD_RESTART2、リンクされたドキュメント内)は、スティーブンの目的のための検討から除外されています。

最初の引用は関係ありません。

8
Michael Homer