システムの起動


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

システムの起動
システムが起動するまでの詳細な流れは、ハードウェアアーキテクチャによって違います。
今回は、x86アーキテクチャのコンピュータにおける流れです。

1、電源を入れるとBIOSが起動
2、MBRに格納されたブートローダが起動
3、ブートローダはカーネルをロードして実行する。

BIOS(Basic Input/Output System:入出力基本システム)は
もっとも基本的な制御プログラムであり、基本的な入出力の管理を行います。
電源が投入されると、不揮発性メモリに格納されているBIOSが実行され、
下記のような作業を行います。

  • メモリのチェック
  • ハードウェア設定の読み込み
  • 起動デバイスのチェック
  • 起動デバイスのマスターブートレコード内に格納されたブートローダを実行

マスターブートレコード(MBR)
マスターブートレコードは、起動デバイスの先頭セクタです。
ここには通常、OSを起動するプログラムであるブートローダの一部と、
基本パーティションの情報を収めたパーティションテーブルが含まれています。
ブートローダ部分は446byte、パーティションテーブルは64byte、残りの2byteは
正しいブートセクタであるかを確認するマジックナンバーです。

ブートローダ
基本的にマスターブートレコードに格納される第一段階ブートローダと
そこから第二段階のブートローダが呼び出されるというように分かれています。
マスターブートレコードの中に格納されるブートローダのサイズが制限されて、
ブートローダ全体を格納できません。

Linuxでよく利用されるブートローダには、GRUB(Grand Unified Bootloader)や
LILO(Linux Loader)があります。

カーネルは組み込まれているハードウェアの検出、メモリのチェック、システムクロックの設定、
IRQの設定、ルートパーティションのマウント、最後にinitプログラム(/sbin/init)を実行します。
なお、カーネル起動中に表示される様々なメッセージは、起動後にdmesgコマンドで確認することができます。

initプロセス
カーネルによって最初に起動されるプロセスがinitです。
  • initのPIDは『1』です。
  • initは、設定ファイル/etc/inittabの設定に基づき、様々な起動処理をする。
  • /etc/inittabファイルは、ブートアップ時や通常運転中にどのようなプロセスを起動するのかを指定するファイル

下記が/etc/inittabの書式です。

ID:ランレベル:アクション指示子:処理

  • IDエントリを識別するためのID(1~4文字)を指定する
  • ランレベル~そのエントリが処理を行うランレベルを指定
  • アクション指示子~どのようなタイミングで処理を行うのかを指定
  • 処理~initが実行するプロセスを指定

アクション指示子

boot ~ システム起動時に実行され、プロセスが終わるのを待たずに次の処理をする

bootwait ~ システム起動時に実行され、プロセスが終わるまで次の処理を待つ

ctrlaltdel ~ Ctrlキー、Altキー、Deleteキーが同時に押されるなど、SIGINTがinitに送られた時に実行する

initdefault ~ デフォルトのランレベルを指定する

once ~ 指定したランレベルになった際に一度だけ処理され、プロセスが終わるのを待たずに次の処理を行う。

respawn ~ 指定したプロセスが終わり次第再起動される

sysinit ~ システム起動時に、bootやbootwaitより先に実行される

wait ~ 指定したランレベルになった際に一度だけ実行され、プロセスが終わるまで次の処理をしない

|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|