101−1.システムアーキテクチャ

システムの起動順序

  1. BIOS / UEFI
  2. Boot Loader
  3. Kernel

  4. SysVinit / Upstart / systemd

BIOS / UEFI

  BIOS (Basic Input Output System)

    ・ 電源起動時、記憶装置(HDD)等の機器に関して最低限の認識を行う
    ・ 基本的なハードウェアの制御。起動デバイスの順序を設定
    ・ 起動する順にデバイスの先頭セクタにあるMBRを読み込み、ブートローダをロードし制御を移す。

  UEFI (Unified Extensible Firmware Interface)

    ・ 基本的なハードウェアの制御を行う。起動時間と再開時間が短縮される。
    ・ CPUに依存しないアーキテクチャとドライバを提供する。セキュリティ機能強化。
    ・ 3TB以上のHDDからの起動をサポートする
    ・ 最初にアクセスされる領域であるESPは /boot/efi にマウントされる
    ・ ブートローダをロードし制御を移す。

Boot Loader

   カーネルと初期RAMディスクイメージをメモリにロードし、カーネルに制御を渡す。
   Linuxの代表的なブートローダ: LILO と GRUB

Kernel

   メモリーの初期化、システムクロックの設定
   仮のルートファイルシステム(initramfs:初期RAMディスク)をマウント
   RAMディスクに組み込まれたデバイスドライバーを使ってデバイスへアクセス
   ルートファイルシステムのマウント。カーネルと初期RAMディスク(initramfs)の内容をメモリ上に展開
   init / systemdを実行
   コマンド
    dmesg    Linuxカーネルが起動時に出力したメッセージを表示
    ・ dmesg –clear   バッファーをクリアする
    ・ dmesg -k     メッセージを表示する
   modprobe  依存関係を解決してモジュールをカーネルに組み込んだり、取り外したりします。
   modprobeの設定ファイル  /etc/modprobe.d/myconfig.conf 

options各カーネルモジュールのデフォルトパラメータを指定する
aliasカーネルモジュールに別名をつける
install特定のカーネルモジュールのロード時に実行されるコマンドを指定する
remove特定のカーネルモジュールのアンロード時に実行されるコマンドを指定する
blacklistロードしたくないカーネルモジュールを指定する

   lsmod    Linuxカーネルのモジュールリストを表示するコマンド
   init / telinit  プロセス制御・ランレベルを変更するコマンド

 

SysVinit / Upstart / systemd

   SysVinit  順次実行型。起動に時間がかかる
   Upstart  イベント駆動型。並列起動可。
   systemd  ユニット単位で処理。並列起動可。

SysVinit

   プロセスをPIDによって管理。 順次実行型。起動に時間がかかる
   最初に起動されるプロセスは init 
    ・ /etc/inittab を読み込み、順に実行
        ・システム初期化スクリプトを実行 ー> /etc/rc.sysinitスクリプト
        ・ /etc/rcスクリプトを実行する
        ・ /etc/rc(ランレベル).d  ディレクトリ配下のスクリプトを実行する
    ・スクリプトのファイル名
       例)K01smartd
         1文字目:S(Start: サービスを起動)、K(Kill: サービスを停止)
         数字:実行優先順位。若番のものが先に実行される
         サービス名:任意の名前をつける
    ・ランレベル

ランレベル内容
0システム停止
1(s/S)シングルユーザモード
2マルチユーザモード(ネット接続無し)
3マルチユーザモード(ネット接続有り)
4(マルチユーザモード)
5マルチユーザモード
6システム再起動

     デフォルトランレベルの設定
      ・ /etc/inittab に記述。
      ・ 設定を変更したい時はこれを書き換える

    ・ランレベル関係コマンド

      説明  コマンド
一つ前と現在のランレベルを表示 runlevel
 runlevel -> N 3 
ランレベルの切り替え init / telinit
 init 4 telinit 5
システムを再起動させずに即座に反映させる init / telinit
 init q telinit q

Upstart

   SysVinitの改良番。SysVinitと同様初めにinitプロセスが実行
   プロセスを並列で起動できる。起動時間を短縮できる
   /etc/event.d or /etc/init にジョブ定義ファイルがある。
   イベント駆動型。initデーモンがイベントを検知すると、イベントに対応するジョブを実行
    ・ initプロセス開始
    ・ 各ジョブが待機状態になる(指定されたイベントの実行を待つ)
    ・ システム起動イベントが発行される
    ・ イベントに対応したジョブが、並列で実行される。

systemd

   Upstartと同じく、各プロセス(ユニット)を並列起動する仕組
   systemdはUpstartと比べて
    ・ より無駄を減らして高速起動を可能
    ・ SysVinitからの移行に便利な互換モードがある
    ・ システム管理の共通化(異なるディストリビューションでも同様の操作が可能)
    ・ その他多数の追加機能

   cgroupsというLinuxカーネルの機能によってプロセスのリソースを管理
   以下のデーモンプロセスが連携して動作

種類意味
systemdsystemdの本体となるプロセス。
systemd-journald各サービスが出力するログを扱う
systemd-logindシステムへのログイン、起動停止、電源などを管理
systemd-udevdudevの代わり。デバイスの動的変更検出


   システム起動のための処理をUnitと言う単位で管理

種類意味
target複数のユニットをグループ化する時に使用する
serviceプロセスの開始・停止・自動起動といった管理を行う
devicesystemdで管理するデバイスを定義する
mountファイルシステムのマウントを行う
automount自動的にマウントされるマウントポイントを定義する
socket特定のソケットをListen(監視)する
swapスワップ領域を有効にする
path指定のファイルが作成されると、指定されたサービスを起動する
timer対応するserviceユニットの実行を管理する。cron の代替機能。

   実行順序
    ・ systemdプロセス開始
    ・default.targetを処理(/etc/systemd/system/default.target:graphical.targetのシンボリックリンク)
    ・リンク先のtargetを解析(/etc/systemd/system/graphical.targetなど)
    ・解析結果により、必要なサービスを起動する(依存関係順に従いながら並列に)
   default.targetの対象。/lib/systemd/system 配下に格納

ランレベルターゲットユニット詳細
runlevel0.target , poweroff.targetシステムをシャットダウンし、電源を切る
runlevel1.target , rescue.targetレスキューシェル (シングルユーザーシステム)
2,3,4runlevel2.target , multi-user.target非グラフィカルなマルチユーザーシステム
runlevel5.target , graphical.targetグラフィカルなマルチユーザーシステム
runlevel6.target , reboot.targetシステムをシャットダウンして再起動

   サービスの管理
    ・ systemctlコマンドを使ってサービスを管理
    ・ コマンド一覧

 コマンド説明
 list-units 全てのユニットとその状態を表示する。
 start指定したユニットを起動する。
 stop指定したユニットを停止する。
 reloadサービスの設定ファイルを再読み込みする。
 restartユニットを再起動する。
 is-active指定したユニットが起動しているか確認する。
 status指定したユニットの実行状況を表示する。
 enableサービス自動起動有効
 disableサービス自動起動無効
 get-default 「default.target」のリンク先を表示する
 set-default「default.target」のリンク先を設定する。
 poweroffシステムを再起動する。
 reboot「default.target」のリンク先を設定する。

その他

   /dev 
    ・ デバイスにアクセスするために使用する仮想ファイルの格納場所

   udev
    ・ Linuxカーネル用のデバイス管理ツール
    ・ /dev ディレクトリにあるデバイスノードの管理
    ・ライブラリ「libudev」とデーモン「udevd」、そして管理コマンド「udevadm」などからなります
    ・udevdデーモンがカーネルの内部情報を監視、
    ・カーネルが新しいデバイスを検知し、そのデバイスに応じて適切なデバイスファイルを動的に作成。
    ・udevの挙動は、/etc/udev/rules.d/ディレクトリ配下の.rulesで終わるファイル内に記述されている


   汎用のクラスドライバ

デバイスクラス対応する機器
HID (Human Interface Device)キーボード、マウス、ジョイスティック
マスストレージデバイス (Mass Storage Class)USBメモリ、HDDなど
オーディオ (Audio Class)マイク、スピーカーなど
コミュニケーション (ACM Communication Device Class)モデム、Ethernetアダプタなど
ワイヤレスコントローラーWi-Fiアダプタ、Bluetoothアダプタなど

    /proc
     システムをコントロールするために使われる。システムのさまざまな情報がここに格納されている
     メモリの中に作られるファイルシステム。「仮想ファイル」

ファイル名説明
/proc/cpuinfoCPU情報
/proc/interruptsIRQ情報
/proc/meminfoメモリの情報
/proc/ioportsI/Oポートの情報
/proc/bus/usb/devicesUSBデバイス情報
/proc/bus/pci/devicesPCIデバイス情報
/proc/scsi/scsiSCSIデバイス情報

    /var/log
     syslogをはじめ様々なログファイルが格納
      ・/var/log/messages …   システムで動作する各種アプリケーションのログ。
                   Ubuntuなど一部のディストリビューションでは「/var/log/syslog」
      ・/var/log/boot.log …    OS起動時のログ
      ・/var/log/secure …    認証に関するログ

   D-Bus(Desktop Bus)  プログラム同士が情報を伝達するプロセス間通信機構のひとつ
   大容量記憶装置の特徴
    ・容量あたりのコストパフォーマンスが高いのはHDDである
    ・SSDとUSBフラッシュドライブは、HDDのような機械的な故障が起きない
    ・SSDはSATAインターフェース以上の速度でアクセスできる
    ・OSの起動ディスクとして使用できる

   shutdown [オプション] 時間 [メッセージ]  ー> Linuxの終了
   wall [オプション]   ー> ログインしている全てのユーザーに一斉にメッセージを送信