init

読み:イニット
外語:init 英語
品詞:名詞

UNIXやその互換OSで、システムが立ち上がった際、最初に起動されるプロセス

目次

initは、全てのプロセスの親となる。initはデーモンプロセスとして起動され、プロセスIDは通常、1が付与される。

initの主要な機能は、その設定ファイルに従い、必要なプロセスを作成することである。

大きくBSD系とSystem V系の二大潮流があり、両者は大きく仕様が異なっている。Linuxの場合は、どちらかに互換のあるものが使われているが、ディストリビューションによっては独自のものが使われている。

initは起動時に読み込まれる必要があるため、起動時にマウントされるドライブに存在する必要がある。

通常は、最初にマウントされるrootfsに置かれる。つまり、ルートディレクトリか、そのサブディレクトリに置かれる。

Androidにも/sbinはあり、これは他と同様にrootfsにあるサブディレクトリだが、initはルートディレクトリに置かれている。

System V系

System V系のinitは、/etc/inittabを読み、動作する。これはinit専用の設定ファイルであり、拡張性は高いが、複雑で、手書きにはあまり向いていない。

このinitは「ランレベル」と呼ばれる8段階のプロセスの分類群がある。/etc/inittabに標準のランレベルを定義するエントリが書かれるが、もしない場合は、ユーザーが起動時に手入力せねばならない。

is:2:initdefault:

なお、ランレベルの定義は、システムごとに異なっている。

それぞれのランレベルで何を行なうかも、/etc/inittabにて定義されるのが一般的である。

BSD系

BSDのinitは、/etc/rcを起動する。これはシェルスクリプトであり、必要な動作はここに記述される。

手で簡単に書き換えられるという利点があるが、設定を誤ると簡単に起動不可能な状態に出来るという難点もある。

古いBSDでは、サービスの設定は/etc/rc.localで行ない、これが/etc/rcから呼び出される、という形式を取っていた。起動不可能な状態に陥ることを、多少でも避ける目的があった。

現在のBSDでは、/etc/rc.dディレクトリ下に、サービスごとに細かく分けられたシェルスクリプトが置かれ、これが/etc/rcから順次実行するようになっている。このスクリプトは、サービスの有効化/無効化でそれぞれ呼び出され、適切な処理を行なうように書かれている。

Linux系

Linuxの場合、init実行まで、通常は次のような手順を踏む。

  1. /dev/sda(MBR)からブートストラップを読み込む
  2. /dev/sda1からブートローダーを読み込む
  3. /dev/sda1からkernelとinitramfsを読み込む
  4. kernelのブートコードを実行する
  5. initramfsのスクリプトを実行する
  6. RAID1ボリュームを認識する
  7. LVMボリュームを認識する
  8. ルートファイルシステムをマウントする
  9. カーネルスレッドkernel_initを実行する
  10. /sbin/init、/etc/init、/bin/init、/bin/shの順で、最初に実行可能なものを実行する

一般的な環境では、/etc/initや/bin/initは存在せず、/bin/shはbashなどへのシンボリックリンクとなっており、実際に起動するのは/sbin/initである。

Android

Androidは、カーネルはLinuxだが、それ以外の殆どはオリジナルであり、initもオリジナルが使われている。

Androidでは、/initが実行ファイルであり、/init.rcを読み、動作する。

このファイルはAndroid Init Languageと呼ばれ、Androidのinit専用の初期化スクリプトである。専用だけあり、Androidの初期化に必要なことはほぼ可能なように作られている。

用語の所属
UNIX
プロセス
関連する用語
kthreadd
ランレベル
/etc/rc
/etc/inittab

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club