kernel:Kernelの機能とその利用法(日経Linux 2003.8:要点まとめ)

KernelはOSの中核機能を担うプログラム。Kernelが提供する6つの主要機能は以下の通り。

  1. プロセス管理:実行される処理プロセスの制御
  2. 空間管理:メモリー空間の管理
  3. 時間管理:処理に関する時間管理
  4. 割込管理:各デバイスからの入出力の制御
  5. ファイル・システム:論理的データとディスクブロックをひもづける
  6. ネットワーク:様々なプロトコルによる通信機能
  • Kernelはシステム起動時にまず実行され、ハードウェアの初期化と動作環境を開始させる

LinuxのKernelの特徴は以下の通り。

  1. マルチタスク対応:複数プログラムを競合させずに実行させることが可能
  2. マルチユーザ対応:複数ユーザの同時使用に対応したアクセス権管理
  3. POSIX準拠:POSIX(Portable Operating System Interface):IEEEによる標準インターフェイス規格
  4. モノシリック・カーネルカーネル全体が1つのプログラムで構成される
  5. モジュールの動的ロード:リソース機能を動的に追加・削除できる
  6. オープンソースGNU GPLライセンスに基づいて配布される
  7. 様々なアーキテクチャに対応:20種類以上のアーキテクチャに対応
  8. 開発速度:バザール方式の開発
  • アプリケーションはシステム・コールを用いてカーネルの機能を使用してハードウェアを使用する
    • システム・コールの一覧は"/usr/include/asm/unistd.h"参照

Linuxには2つのモードがある

  • カーネル・モード:メモリー空間やハードウェアに対するアクセスが許される特権モード
  • ユーザ・モード:制限モード/直接ハードウェアを制御することは出来ない
    • x86アーキテクチャの場合はLing0〜3の権限モードがあり、OSはLing0、アプリケーションはLing3で動作する

Linuxはハードウェアを2種類に分別して管理する

  1. キャラクタ・デバイス:データの読み書きを1バイトずつ順番に行う基本的なデバイスの抽象化方式/サウンドカード、シリアル・ポートなど
  2. ブロック・デバイス:データの読み書きをブロック単位で行う抽象化方式。ランダムアクセスに向く/ハードディスクやCD-ROMドライブなど
  • バイスは種類を示すメジャー番号と各デバイスを区別するマイナー番号で区別される
  • Linuxではデバイスをデバイス・ファイルという特殊なファイルを通じて管理する
    • "/dev"以下に配置される/ファイル・タイプでcはキャラクタ・デバイス、bはブロック・デバイス

Kernelの動作例

  1. アプリケーションがシステム・ライブラリの関数を読み出す(ex. fread()関数)
  2. 関数からシステム・コールが呼び出される(read()システム・コール)
  3. ファイルシステムを通じてKernelがデバイス・ドライバにファイルの読み込みを指示する
  4. バイス・ドライバがファイルをKernelのバッファに送る
  5. システム・コール終了、ファイルがシステム・ライブラリのバッファにコピーされる
  6. 関数終了、ファイルがアプリケーションのバッファにコピーされる

Kernel本体は"/boot"配下にあるvmlinuzファイルが実体

  • KernelファイルはKernel Loaderにより起動される特殊なプログラム
  • Linuxではバージョンをx.y.zで示す
    1. xはメジャーバージョン
    2. yは奇数のものが開発版、偶数のものが安定版
    3. zはリビジョン番号