2.2. カーネルの構成

この節では、2 つの側面から 4.4BSD カーネルの構成を見ていきます。

  1. ソフトウェアの静的側面、つまりカーネルを構築するためのモジュール によって提供された機能性による分類

  2. その動的な機能、つまりユーザに提供されるサービスによる分類

カーネルの大部分は、システムコールを通してアプリケーションが アクセスするためのシステムサービスを実装しています。 4.4BSD では、このソフトウェアは次のような構成になっています。

表2.1 4.4BSD カーネルにおける機種非依存なソフトウェア
分類コード行数カーネル内での割合
機種非依存部分の総計162,61780.4
ヘッダ9,3934.6
初期化部分1,1070.6
カーネルの機能8,7934.4
汎用のインタフェース4,7822.4
プロセス間通信4,5402.2
端末の取り扱い3,9111.9
仮想メモリ11,8135.8
vnode 管理7,9543.9
ファイルシステムネーミング6,5503.2
FFS4,3652.2
ログ構造化ファイルシステム4,3372.1
メモリベースのファイルシステム6450.3
cd9660 ファイルシステム4,1772.1
その他のファイルシステム (10)12,6956.3
ネットワークファイルシステム17,1998.5
ネットワーク通信8,6304.3
インターネットプロトコル11,9845.9
ISO プロトコル23,92411.8
X.25 プロトコル10,6265.3
XNS プロトコル5,1922.6

これらのカテゴリのソフトウェアのほとんどは機種非依存であり、しかも 異なるハードウェアアーキテクチャに移植できるものです。

カーネルの機種依存部分は本流のコードから分離されています。 特に、機種依存しているコードのどれを取っても、 特定のアーキテクチャのためのコードを含んでいません。 機種に依存する機能が必要なときには、機種に依存しないコードは 機種依存のコード内にあるアーキテクチャ依存の関数を呼び出します。 機種依存であるソフトウェアは次のものを含んでいます。

表2.2 4.4BSD カーネル内にある HP300 用の機種依存部分
分類コード行数カーネル内での割合
機種依存部分の総計39,63419.6
機種依存部分のヘッダ1,5620.8
デバイスドライバのヘッダ3,4951.7
デバイスドライバのソースコード17,5068.7
仮想メモリ3,0871.5
他の機種依存部分6,2873.1
アセンブリ言語で書かれたルーチン3,0141.5
HP/UX 互換機能4,6832.3

表2.1「4.4BSD カーネルにおける機種非依存なソフトウェア」 は HP300 用 4.4BSD カーネルを構成するソフトウェアのうち、 機種非依存の部分をまとめたものです。 2 列目の数値は C 言語のソースコード、ヘッダファイル、そして アセンブリ言語のものを表しており、 アセンブリ言語のものは 2% 以下しかありません。 また、表2.2「4.4BSD カーネル内にある HP300 用の機種依存部分」 の統計が示しているように、 機種依存のソフトウェアは、HP/UX やデバイスサポートを除いて、 カーネルのうちわずかに 6.9% しかありません。

カーネルのごく小さな部分だけがシステムの初期化に専念します。 このコードはシステムが 起動する ときに用いられ、 カーネルがハードウェアやソフトウェアの環境構築をするための基本部分と なります (14 章参照)。 (制限された物理メモリを持つものには特に) オペレーティングシステムの中には これらの機能が実行された後にそのソフトウェアを廃棄してしまうか、 上から覆ってしまう ものもあります。 4.4BSD カーネルは、起動するために要したコードのためのメモリを再利用しません。 それは通常の機種ではカーネルのリソースのうち 0.5% に過ぎないからです。 そして、起動のためのコードはカーネルの中の一部分に固まってはいません。 それは全体にわたって散在しており、初期化されたときに論理的に関連していた 場所に存在します。

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。

本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。