良好なつながりがある場合、または行間をよく読んでいる場合は、このブログ投稿の内容をすでに推測できます。 それでも、この話は面白いと思うかもしれません。 一杯のコーヒーを手に取り、座って何が来るのか読んでください。
これは長いブログ投稿です。この長いブログ記事を読むことをお勧めしますが、ここに1行のサマリーがあります。新しいダウンロードシステムを試していますが、面白いです。
これがコードです。 そして、ここに物語があります:
プロセスID 1
各Unixシステムには、特別な識別子1を持つプロセスが1つあります。これは、後続のすべてのプロセスの前にカーネルによって起動され、親を見つけることができなかった後続の/残りのすべてのプロセスの親プロセスでもあります。 その結果、彼は他のプロセスでは賄えない多くのことを行うことができます。 彼はまた、他のプロセスが責任を負わないもの、たとえば、システムの起動中にユーザー空間を増やしたりサポートしたりする責任も負っています。
歴史的にLinuxでは、PID 1として機能するソフトウェアは尊敬されている
sysvinitパッケージでしたが、この分野にあまりにも長く留まっていると思います。 代替が何度も提案されてきましたが、実際に受け入れられたのはそのうちの1つだけです。Upstartは、現在、多くの主要なディストリビューションに採用されています。
前述のように、ブートシステムの主な役割は、ユーザースペース(ユーザー環境)を上げることです。 そして、優れたブートシステムはそれを高速に行う必要があります。 残念ながら、従来の
SysVブートシステムはそれほど高速ではありませんでした。
高速で効率的なダウンロードには2つのことが重要です。
- できるだけ実行しない
- そして、可能な限り並行して実行します
これはどういう意味ですか? 少ない開始とは、少数のサービスを開始するか、本当に必要になるまで起動を遅らせることを意味します。 遅かれ早かれ本当にリクエストされることがわかっているサービス(
syslog 、
D-Bus 、
システムバスなど)がいくつかありますが、他の多くの場合、これは重要ではありません。 たとえば、bluetoothドングルを接続するか、一部のアプリケーションが
D-Busインターフェイスを介してbluetoothdと通信するまで、bluetoothdを起動する必要はありません。 同じことが印刷サブシステムにも当てはまります。マシンがプリンターに物理的に接続されるか、何らかのアプリケーションが何かを印刷するまで、
CUPSなどの印刷デーモンを起動する必要はありません。
Avahi:マシンがネットワークに接続されていない場合、
Avahiを実行する必要はありません。または、一部のアプリケーションがそのAPIを使用する必要があります。 また、
SSHを利用することもできます。マシンに接続したい人がいない限り、起動する必要はありません。そうでない場合は、マシンに初めて接続するときに起動(SSH)できます。 (また、SSHを開始できるほとんどのマシンでは、ほとんどの場合、数か月に1回またはそれ以下にしか接続できません。)
可能な限り並行して実行するということは、何かを実行する場合、(
sysvinitのように )連続して/次々に実行するのではなく、CPUとIOの使用を最大化するためにすべてを同時に実行する必要があることを意味します。システムの起動時間が短縮されます。
鉄とソフトウェアは非常に動的に開発されています
現代のシステム(特に汎用システム)は、構成と使用において非常に柔軟です。それらは、モバイルであり、さまざまなアプリケーションを開始および停止し、さまざまな機器が何度も追加および削除されます。 ダウンロードシステムは、ハードウェアおよびソフトウェアの変更リスニングサービスを管理します。 ブートシステムは、プログラムの実行や何らかのハードウェアの使用にサービスが必要な場合、サービスを動的に開始(停止する)する必要があります。
ブートを並列化しようとする現在のほとんどのシステムは、プロセスに関与するさまざまなデーモンの起動を同期し続けます:
Avahiは
D-Busを必要とするため、
D-Busが最初に起動し、
D-Busが準備完了のシグナルを出す場合のみ
Avahiは打ち上げを開始します。 同様に、他のサービスの場合:
libvirtdおよび
X11には
HALが必要です(ここでは、Fedora 13サービスを意味するダックスフンドは、
HALがサポートされなくなったことに注意しません)。したがって、
libvirtdおよび
X11の前にHALが最初に起動します。
libvirtdも
Avahiを必要とするため、
Avahiの起動も待機します。 そして、これらのサービスはすべて
syslogを必要とします。つまり、
Syslogが完全に初期化されて開始されるまですべて待機します。 など...
継続するには...