2.2. カーネルの構成
戻る | 第2章 4.4BSD の設計の概要 | 次へ

## 2.2. カーネルの構成

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

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

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

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

- 基礎的なカーネル機能: タイマーおよびシステム時計の取り扱い、 記述子管理、そしてプロセス管理

- メモリ管理のサポート: ページングとスワッピング

- 汎用のシステムインタフェース: I/O、コントロール、 記述子によって実現される多重化操作

- ファイルシステム: ファイル、ディレクトリ、パス名の解釈、ファイルロック、 I/O バッファ管理

- 端末の取り扱いのサポート: 端末のインタフェースドライバと ラインディシプリン

- プロセス間通信機能: ソケット

- ネットワーク通信への対応: 経路制御等の通信プロトコル、一般的なネットワーク機能

表2.1 4.4BSD カーネルにおける機種非依存なソフトウェア

分類 | コード行数 | カーネル内での割合
--- | --- | ---
機種非依存部分の総計 | 162,617 | 80.4
ヘッダ | 9,393 | 4.6
初期化部分 | 1,107 | 0.6
カーネルの機能 | 8,793 | 4.4
汎用のインタフェース | 4,782 | 2.4
プロセス間通信 | 4,540 | 2.2
端末の取り扱い | 3,911 | 1.9
仮想メモリ | 11,813 | 5.8
vnode 管理 | 7,954 | 3.9
ファイルシステムネーミング | 6,550 | 3.2
FFS | 4,365 | 2.2
ログ構造化ファイルシステム | 4,337 | 2.1
メモリベースのファイルシステム | 645 | 0.3
cd9660 ファイルシステム | 4,177 | 2.1
その他のファイルシステム (10) | 12,695 | 6.3
ネットワークファイルシステム | 17,199 | 8.5
ネットワーク通信 | 8,630 | 4.3
インターネットプロトコル | 11,984 | 5.9
ISO プロトコル | 23,924 | 11.8
X.25 プロトコル | 10,626 | 5.3
XNS プロトコル | 5,192 | 2.6

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

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

- 低レベルなシステム起動のための動作

- トラップおよびフォールトの扱い

- プロセスの動作状態に関する低レベルな操作

- ハードウェアデバイスの設定と初期化

- I/O デバイスのランタイムサポート

表2.2 4.4BSD カーネル内にある HP300 用の機種依存部分

分類 | コード行数 | カーネル内での割合
--- | --- | ---
機種依存部分の総計 | 39,634 | 19.6
機種依存部分のヘッダ | 1,562 | 0.8
デバイスドライバのヘッダ | 3,495 | 1.7
デバイスドライバのソースコード | 17,506 | 8.7
仮想メモリ | 3,087 | 1.5
他の機種依存部分 | 6,287 | 3.1
アセンブリ言語で書かれたルーチン | 3,014 | 1.5
HP/UX 互換機能 | 4,683 | 2.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% に過ぎないからです。 そして、起動のためのコードはカーネルの中の一部分に固まってはいません。 それは全体にわたって散在しており、初期化されたときに論理的に関連していた 場所に存在します。

戻る | 上に戻る | 次へ
第2章 4.4BSD の設計の概要 | ホーム | 2.3. カーネル サービス

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

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