頭弱いがPCの勉強する

正真正銘のPC初心者。勉強ノートのつもり。
ITなんてトンチンカン、だから書くことやること全部適当。

SysVinitとUpstartとSystemdについて

2018-03-10 17:26:08 | Linuxの勉強
こんにちは、今回はLinuxの起動の仕組みについての話です。
ここら辺について詳しくは学んだことは無く軽く勉強したので軽くまとめたいと思います。

SysVinit
Upstart
Systemd
これらはLinuxの起動の仕組みの種類です。
簡単な関係性に表すと一番古いのがSysVinitで、その次の改良版がupstart、それの改良版がSystemdだそうです。
現在主流なのはSystemdです。

それぞれについて説明していきます。
従来のLinuxでは「SysVinit」という起動の仕組みが取られていました。
SysVinitを採用しているLinuxマシンが起動するときは、
ハードウェア起動

BIOS/UEFI起動

OSのカーネル起動

initプロセス起動

ユーザープロセス起動

ユーザープロセス起動

といった感じでユーザプロセスが順番に処理されていくので起動が遅くなります。


それに比べてUpstartはイベント駆動型の仕組みです。
ハードウェア起動

BIOS/UEFI起動

OSのカーネル起動

initプロセス起動

ユーザープロセス起動 ユーザープロセス起動 …

といった感じで並列的にプロセスを起動していくのでSysVinitよりも高速で起動することが可能になっています。
しかしながら問題点も存在しています。
Upstartはイベント駆動というだけあって、プロセスが起動するイベント(条件)を設定ファイルに記述する必要があります。
しかも、指定したイベントがそろうとジョブは無条件で起動、停止をしてしまうので不必要なジョブへの操作が行われてしまうかもしれません。
Upstartではジョブの依存関係をイベントに書き換えて記述しなおさないといけないため、SysVinitからの移行には手間がかかります。


そして現在主流となっているSystemdです。
SystemdもUpstartと同じくユーザープロセスを並列起動可能です。
ただ、Upstartと違い必要なプロセスのみを起動するのでより高速です。
Upstartの場合は最初に発動したイベントをトリガーに連鎖的にジョブを起動させていきます、
なのでシステムに不必要なジョブまで起動してしまうとのことです。
その点はSystemdで改善されています。
Systemdはジョブではなくユニットという単位で管理でプロセスを管理しており、起動したいユニットに必要なユニットのみ起動することで改善されています。
そのほかにも機能が多数追加されています。
・スナップショット機能
systemdの動作状態をある時点で保存しておくことにより、復元可能にする。
・cgroups
Upstartでは孫プロセスまでしか監視できないが、systemdではcgroupsを単位に監視するので同一グループのプロセスはすべて監視できる。
・SysVinitとの互換性
Upstartと違いSysVinitとの互換モードが存在するので移行に便利

Systemdでは様々な機能をsystemctlコマンドで操作します。
SysVinit/Upstartの場合はserviceコマンドでした。
以降したばっかりの頃は、SysVinit/Upstartの癖が抜けずに苦しんだ人が続出したとかしないとか。

にわか知識ですので、ご指摘あったらぜひともください。