<!--Chapter 14 The Linux Kernel Sources-->
<sect>Linux カーネルソース<label id="chapter_ks">
<p>
<figure><ph vspace="1"><img src="./The-Linux-Kernel-images/penguin2.gif">
</figure>

<!--
This chapter describes where in the Linux kernel sources you should start
looking for particular kernel functions. 
-->
<p>この章では、特定のカーネル関数を見たいとき、カーネルソースのどこから
探し始めればよいのかについて説明する。

<!--
This book does not depend on a knowledge of the 'C' programming language
or require that you have the Linux kernel sources available in order to
understand how the Linux kernel works. That said, it is a fruitful exercise to
look at the kernel sources to get an in-depth understanding of the Linux
operating system. This chapter gives an overview of the kernel sources;
how they are arranged and where you might start to look for particular code. 
-->
<p>本書は、C プログラミング言語の知識を前提とするものではなく、カーネルの動作
の仕組みを理解するのに Linux カーネルソースを持っていることを要求するものでも
ない。とはいえ、カーネルソースを見て、Linux オペレーティングシステムへの理解を
深める努力をすることはよい結果をもたらすことだろう。この章では、カーネルソース
の概観を説明し、それらの構造や特定のコードを探す時の目安となるものについて
述べる。

<!--Where to Get The Linux Kernel Sources-->
<sect1>Linux カーネルソースの入手場所<label id="chapter_ks_sect1">

<!--
All of the major Linux distributions ( Craftworks, Debian, Slackware, Red
Hat etcetera) include the kernel sources in them. Usually the Linux kernel
that got installed on your Linux system was built from those sources. By
their very nature these sources tend to be a little out of date so you may
want to get the latest sources from one of the web sites mentioned in
chapter  www-appendix. They are kept on ftp://ftp.cs.helsinki.fi
and all of the other web sites shadow them. This makes the Helsinki web
site the most up to date, but sites like MIT and Sunsite are never very far
behind. 
-->
<p>メジャーな Linux ディストリビューション( Craftworks, Debian, Slackware, 
Red Hat などなど)ならどこでも、カーネルソースが同梱されている。通常、システム
にインストールされた Linux カーネルは、そうしたソースからビルドされている。
やむを得ない事情から、それらのソースは少々古いものになりがちなので、
<ref id="chapter_ww" name="「ウェブと FTP サイト」">で述べるウェブサイト
から最新のソースを入手したいと考えるかもしれない。ソースコードは、
<htmlurl url="ftp://ftp.cs.helsinki.fi" name="ftp://ftp.cs.helsinki.fi">
 で保存されていて、それ以外のウェブサイトはすべてそのミラーである。
(訳注: 現在のプライマリサイトは、<htmlurl url="http:/www.kernel.org" 
name="http://www.kernel.org"> です。)
それゆえ、Helsinki のウェブサイトに最新のソースがあることになるが、MIT や 
Sunsite でも決してひどく古いわけではない。

<!--
If you do not have access to the web, there are many CD ROM vendors who
offer snapshots of the world's major web sites at a very reasonable cost.
Some even offer a subscription service with quarterly or even monthly
updates. Your local Linux User Group is also a good source of sources. 
-->
<p>ウェブにアクセスできない場合でも、多くの CD-ROM ベンダがあり、それらが
世界のメジャーなウェブサイトのスナップショットを妥当な値段で提供している。
四半期や、あるいは毎月更新される定期購買サービスを提供しているベンダまである。
ローカルな Linux ユーザグループも、ソースコードの提供元である。

<!--
The Linux kernel sources have a very simple numbering system. Any even
number kernel (for example 2.0.30) is a stable, released, kernel and any
odd numbered kernel (for example 2.1.42 is a development kernel. This
book is based on the stable 2.0.30 source tree. Development kernels have
all of the latest features and support all of the latest devices. Although they
can be unstable, which may not be exactly what you want it, is important
that the Linux community tries the latest kernels. That way they are tested
for the whole community. Remember that it is always worth backing up your
system thoroughly if you do try out non-production kernels. 
-->
<p>Linux カーネルソースは、非常にシンプルなバージョン番号管理をしている。
中央の番号、<tt>x.y.z</tt> の <tt>y</tt> が、偶数番号のカーネル(たとえば、
2.0.30)は、安定した、リリース版カーネルで、奇数番号のカーネル(たとえば、2.1.42)
は、開発版カーネルである。本書は、安定版 2.0.30 のソースツリーに基づいている。
開発版カーネルは最新機能のすべてを備え、最新デバイスをすべて
サポートしている。それらは安定しない場合があるかもしれず、それはあなたが 
Linux に求めるものではないかもしれないが、Linux コミュニティーが最新版
カーネルを試しているということは重要である。それによって、最新版は
コミュニティー全体でテストされるからである。安定版でないカーネルを使う場合、
システム全体のバックアップは常に価値あるものであることを忘れないでほしい。

<!--
Changes to the kernel sources are distributed as patch files. The patch
utility is used to apply a series of edits to a set of source files. So, for
example, if you have the 2.0.29 kernel source tree and you wanted to move
to the 2.0.30 source tree, you would obtain the 2.0.30 patch file and apply the
patches (edits) to that source tree: 
-->
<p>カーネルソースへの変更は、パッチファイルで配布される。パッチユーティリティ
は、ソースファイルのセットに一連の編集を加えるために使用される。たとえば、
2.0.29 のカーネルソースツリーを持っていて、2.0.30 のソースツリーに移行したい
場合は、2.0.30 のパッチを入手して、そのパッチ(ソース編集スクリプト)をその
カーネルソースに適用すればよい。

<verb>
$ cd /usr/src/linux
$ patch -p1 < patch-2.0.30
</verb>

<!--
This saves copying whole source trees, perhaps over slow serial
connections. A good source of kernel patches (official and unofficial) is the
http://www.linuxhq.com web site. 
-->
そうすれば、ソースツリー全体を、おそらく低速なシリアル回線を使ってコピーしな
くても済む。カーネルパッチ(正式版もそうでないものも)の便利な入手先は、
<htmlurl url="http://www.linuxhq.web.site" name="http://www.linuxhq.web.site">
である。

<!--How The Kernel Sources Are Arranged-->
<sect1>カーネルソースの構造<label id="chapter_ks_sect2">

<!--
At the very top level of the source tree /usr/src/linux you will see a
number of directories: 
-->
<p>ソースツリーの最上ディレクトリである <tt><htmlurl 
url="./The-Linux-Kernel-images/linux" 
name="/usr/src/linux"></tt> には、
(次のような)多くのディレクトリがある。

<#if output="html">
<p>(訳注: JF サイト上でご覧の場合、一部のファイルしか表示されません。
ソース全体を見るには、<ref id="chapter_jp" 
name="日本語訳について">を参照してください。)
<#/if>

<!--
arch The arch subdirectory contains all of the architecture specific
      kernel code. It has further subdirectories, one per supported
      architecture, for example i386 and alpha. 
-->
<descrip>
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/arch" name="arch">
</tt></tag>
<tt>arch</tt> サブディレクトリには、アーキテクチャ(architecture)固有の
カーネルコードが含まれている。
さらに深いサブディレクトリがあり、たとえば、i386 や alpha と
いったサポートするアーキテクチャごとに分かれている。

<!--
include The include subdirectory contains most of the include files
      needed to build the kernel code. It too has further subdirectories
      including one for every architecture supported. The include/asm
      subdirectory is a soft link to the real include directory needed for
      this architecture, for example include/asm-i386. To change
      architectures you need to edit the kernel makefile and rerun the
      Linux kernel configuration program. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/include" name="include">
</tt></tag>
<tt>include</tt> サブディレクトリには、カーネルコードをビルドするのに必要な
インクルードファイル(include files)の大部分が含まれている。
さらに深いサブディレクトリもあり、サポートするアーキテクチャごとのファイルが含
まれている。<tt>include/asm</tt> サブディレクトリは、たとえば <tt>
include/asm-i386</tt> といったそのアーキテクチャに必要な実際の include 
ディレクトリへのソフトリンク(シンボリックリンク)となっている。
アーキテクチャを変更するには、カーネルの makefile を編集し、Linux カーネル
設定プログラムを再実行する必要がある。

<!--
init This directory contains the initialization code for the kernel and it is
      a very good place to start looking at how the kernel works. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/init" name="init">
</tt></tag>
このディレクトリには、カーネルの初期化(initialization)コードが含まれているの
で、カーネルの動作の仕組みをこれから見ようとする場合はよい出発点になる。

<!--
mm This directory contains all of the memory management code. The
      architecture specific memory management code lives down in
      arch/*/mm/, for example arch/i386/mm/fault.c. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/mm" name="mm">
</tt></tag>
このディレクトリには、メモリ管理(memory management)コードのすべてが含まれてい
る。アーキテクチャ固有のメモリ管理コードについては、<tt>arch/i386/mm/fault.c
</tt> といった <tt>arch/*/mm</tt> ディレクトリ以下にある。

<!--
drivers All of the system's device drivers live in this directory. They are
      further sub-divided into classes of device driver, for example
      block. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/drivers" name="drivers">
</tt></tag>
システム上のデバイスドライバ(device drivers)は、すべてこのディレクトリに置かれ
ている。
このディレクトリはさらに再分割され、<tt>block</tt> といったデバイスドライバ
のクラスごとに分かれている。

<!--
ipc This directory contains the kernels inter-process communications
      code. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/ipc" name="ipc">
</tt></tag>
このディレクトリには、カーネルのプロセス間通信(inter-process communications)に
関するコードが含まれている。

<!--
modules
      This is simply a directory used to hold built modules. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/modules" name="modules">
</tt></tag>
このディレクトリは、ビルドされたモジュール(module)を保存するためだけに使用され
ている。

<!--
fs All of the file system code. This is further sub-divided into
      directories, one per supported file system, for example vfat and
      ext2. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/fs" name="fs">
</tt></tag>
ファイルシステム(file system)コードのすべてはここに置かれている。
このディレクトリはさらに再分割されていて、<tt>vfat</tt> や <tt>ext2</tt> と
いったサポートするファイルシステムごとに分かれている。

<!--
kernel The main kernel code. Again, the architecture specific kernel code
      is in arch/*/kernel. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/kernel" name="kernel">
</tt></tag>
主要なカーネル(kernel)コードが置かれている。ここでも、アーキテクチャ固有の
カーネルコードは、<tt>arch/*/kernel</tt> にある。

<!--
net The kernel's networking code. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/net" name="net">
</tt></tag>
カーネルのネットワーク(network)関係のコードが置かれている。

<!--
lib This directory contains the kernel's library code. The architecture
      specific library code can be found in arch/*/lib/. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/lib" name="lib">
</tt></tag>
このディレクトリには、カーネルのライブラリ(library)コードが含まれている。
アーキテクチャ固有のライブラリは、<tt>arch/*/lib</tt> で見つけることができる。

<!--
scripts This directory contains the scripts (for example awk and tk scripts)
      that are used when the kernel is configured. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/scripts" name="scripts">
</tt></tag>
このディレクトリには、カーネルを設定するときに使用されるスクリプト(script)
(たとえば、<tt>awk</tt> や <tt>tk</tt> スクリプト)が含まれている。
</descrip>

<!--Where to Start Looking-->
<sect1>どこから見るべきか<label id="chapter_ks_sect3">

<!--
A large complex program like the Linux kernel can be rather daunting to look
at. It is rather like a large ball of string with no end showing. Looking at 
one part of the kernel often leads to looking at several other related files 
and before long you have forgotten what you were looking for. The next
subsections give you a hint as to where in the source tree the best place to
look is for a given subject. 
-->
<p>Linux カーネルくらい巨大で複雑なプログラムになると、見ようとする者を威圧
するかのような感がなくもない。まるで辿るべき一端がなくて、解けない球状の
巻き糸のようである。カーネルの一部を見ていると、しばしばいくつかの他の関連
ファイルへと導かれて、すぐに自分で何を探していたのか分からなくなる。以下では、
節に付けた題名について、ソースツリーのどこを見れば最良かヒントを述べる。

<!--System Startup and Initialization-->
<sect2>システムの起動と初期化

<!--
On an Intel based system, the kernel starts when either loadlin.exe or LILO
has loaded the kernel into memory and passed control to it. Look in
arch/i386/kernel/head.S for this part. Head.S does some
architecture specific setup and then jumps to the main() routine in
init/main.c. 
-->
<p>Intel ベースのシステムなら、カーネルが起動するのは、<tt>loadlin.exe</tt> 
か LILO がカーネルをメモリにロードして制御をカーネルに渡したときである。
その部分に関しては、<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/arch/i386/kernel/head.S" 
name="arch/i386/kernel/head.S"></tt> を見ること。<tt>head.S
</tt> はアーキテクチャ固有の設定をいくつか行ってから、<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/init/main.c" 
name="init/main.c"></tt> 内にある <tt>main()</tt> ルーチンへジャンプする。

<!--Memory Management-->
<sect2>メモリ管理

<!--
This code is mostly in mm but the architecture specific code is in
arch/*/mm. The page fault handling code is in mm/memory.c and the
memory mapping and page cache code is in mm/filemap.c. The buffer
cache is implemented in mm/buffer.c and the swap cache in
mm/swap_state.c and mm/swapfile.c. 
-->
<p>これに関するコードの大部分は <tt>mm</tt> にあるが、アーキテクチャ固有の
コードは <tt>arch/*/mm</tt> にある。ページフォルト処理コードは <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/mm/memory.c" 
name="mm/memory.c"></tt> にあり、メモリマッピングとページキャッシュのコードは 
<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/mm/filemap.c" 
name="mm/filemap.c"></tt> にある。
バッファキャッシュは、<tt>mm/buffer.c</tt>(訳注: <htmlurl 
url="./The-Linux-Kernel-images/linux/fs/buffer.c" 
name="fs/buffer.c">) で実装されており、
スワップキャッシュは <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/mm/swap_state.c" 
name="mm/swap_state.c"></tt> と <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/mm/swapfile.c" 
name="mm/swapfile.c"></tt> にある。

<!--Kernel-->
<sect2>カーネル

<!--
Most of the relevent generic code is in kernel with the architecture
specific code in arch/*/kernel. The scheduler is in kernel/sched.c
and the fork code is in kernel/fork.c. The bottom half handling code is
in include/linux/interrupt.h. The task_struct data structure
can be found in include/linux/sched.h. 
-->
<p>関連する汎用コードの大部分は、<tt>kernel</tt> にあるが、アーキテクチャ固有
のコードは <tt>arch/*/kernel</tt> にある。スケジューラは <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/kernel/sched.c" 
name="kernel/sched.c"></tt> にあり、fork のコードは <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/kernel/fork.c" 
name="kernel/fork.c"></tt> にある。
ボトムハーフ処理のコードは <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/include/linux/interrupt.h" 
name="include/linux/interrupt.h"></tt> に含まれている。
<tt>task_struct</tt> データ構造体は、<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/include/linux/sched.h" 
name="include/linux/sched.h"></tt> にある。

<!--PCI-->
<sect2>PCI

<!--
The PCI pseudo driver is in drivers/pci/pci.c with the system wide
definitions in include/linux/pci.h. Each architecture has some
specific PCI BIOS code, Alpha AXP's is in
arch/alpha/kernel/bios32.c. 
-->
<p>PCI 仮想ドライバは <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/drivers/pci/pci.c" 
name="drivers/pci/pci.c"></tt> にあり、システム全体の定義
は <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/include/linux/pci.h" 
name="include/linux/pci.h"></tt> にある。個々のアーキテクチャには固有の PCI 
BIOS コードがあり、Alpha AXP のものは <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/arch/alpha/kernel/bios32.c" 
name="arch/alpha/kernel/bios32.c"></tt> にある。

<!--Interprocess Communication-->
<sect2>プロセス間通信

<!--
This is all in ipc. All System V IPC objects include an ipc_perm data
structure and this can be found in include/linux/ipc.h. System V
messages are implemented in ipc/msg.c, shared memory in ipc/shm.c
and semaphores in ipc/sem.c. Pipes are implemented in ipc/pipe.c. 
-->
<p>これらはすべて <tt>ipc</tt> にある。すべての System V IPC オブジェクトは
 <tt>ipc_perm</tt> データ構造体を含んでいるが、これは <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/include/linux/ipc.h" 
name="include/linux/ipc.h"></tt> にある。System V メッセージは <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/ipc/msg.c" 
name="ipc/msg.c"></tt> で実装されていて、
共有メモリは <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/ipc/shm.c" 
name="ipc/shm.c"></tt> 、セマフォは <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/ipc/sem.c" 
name="ipc/sem.c"></tt> にある。
パイプは、<tt>ipc/pipe</tt>(訳注: <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/fs/pipe.c" 
name="fs/pipe.c"></tt>) で実装されている。

<!--Interrupt Handling-->
<sect2>割り込み処理

<!--
The kernel's interrupt handling code is almost all microprocessor (and often
platform) specific. The Intel interrupt handling code is in
arch/i386/kernel/irq.c and its definitions in
include/asm-i386/irq.h. 
-->
<p>カーネルの割り込み処理コードは、ほとんどすべてマイクロプロセッサ(そして、
しばしばプラットフォーム)固有のものである。Intel の割り込み処理コードは、
<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/arch/i386/kernel/irq.c" 
name="arch/i386/kernel/irq.c"></tt> にあり、その定義は <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/include/asm-i386/irq.h" 
name="include/asm-i386/irq.h"></tt> にある。

<!--Device Drivers-->
<sect2>デバイスドライバ

<!--
Most of the lines of the Linux kernel's source code are in its device drivers.
All of Linux's device driver sources are held in drivers but these are
further broken out by type: 
-->
<p>Linux カーネルソースコードの大部分は、デバイスドライバのものである。
Linux デバイスドライバのソースのすべては、<tt>drivers</tt> にあるが、その
ディレクトリはデバイスタイプによってさらに分岐している。

<!--
/block block device drivers such as ide (in ide.c). If you want to look at
      how all of the devices that could possibly contain file systems are
      initialized then you should look at device_setup() in
      drivers/block/genhd.c. It not only initializes the hard disks
      but also the network as you need a network to mount nfs file
      systems. Block devices include both IDE and SCSI based devices. 
-->
<descrip>
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/drivers/block" 
name="/block"></tt></tag>
IDE(<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/drivers/block/ide.c" name="ide.c"></tt>)
などのブロックデバイスドライバ。ファイルシステムを置くことができる
すべてのデバイスがどのように初期化されるのかを見たい場合は、<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/drivers/block/genhd.c" 
name="drivers/block/genhd.c"></tt> にある <tt>device_setup()</tt> を見るべき
である。
それは、ハードディスクの初期化だけでなく、NFS ファイルシステムをマウントする
ためにネットワークを必要とする際にはネットワークデバイスをも初期化する。
ブロックデバイスには、IDE ベースと SCSI ベースの両方のデバイスが含まれる。

<!--
/char This the place to look for character based devices such as ttys,
      serial ports and mice. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/drivers/char" 
name="/char"></tt></tag>
ここは、tty やシリアルポート、マウスなどのキャラクタベースのデバイスを
探すときに見る場所である。

<!--
/cdrom All of the CDROM code for Linux. It is here that the special
      CDROM devices (such as Soundblaster CDROM) can be found.
      Note that the ide CD driver is ide-cd.c in drivers/block and
      that the SCSI CD driver is in scsi.c in drivers/scsi. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/drivers/cdrom" 
name="/cdrom"></tt></tag>
Linux 上のすべての CD-ROM のコード。特定の CD-ROM デバイス(たとえば、
Soundblaster
 CD-ROM)がここに置かれている。IDE CD ドライバは <tt>drivers/block</tt> の 
<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/drivers/block/ide-cd.c" 
name="ide-cd.c"></tt> にあり、SCSI CD ドライバは <tt>drivers/scsi</tt> の 
<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/drivers/scsi/scsi.c" 
name="scsi.c"></tt> にあるので、注意すること。

<!--
/pci This are the sources for the PCI pseudo-driver. A good place to
      look at how the PCI subsystem is mapped and initialized. The Alpha
      AXP  PCI fixup code is also worth looking at in 
      arch/alpha/kernel/bios32.c. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/drivers/pci" 
name="/pci"></tt></tag>
ここには、PCI 仮想ドライバのためのソースがある。PCI サブシステムがマップされ
初期化される方法を見るのに適した場所である。<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/arch/alpha/kernel/bios32.c" 
name="arch/alpha/kernel/bios32.c"></tt> にある Alpha AXP PCI 修正(fixup)コード
も見るに値するだろう。

<!--
/scsi This is where to find all of the SCSI code as well as all of the
      drivers for the scsi devices supported by Linux. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/drivers/scsi" 
name="/scsi"></tt></tag>
ここは、SCSI コードのすべてがある場所であり、Linux でサポートされている 
SCSI デバイスのすべてのドライバが置かれている場所である。

<!--
/net This is where to look to find the network device drivers such as the
      DECChip 21040 PCI ethernet driver which is in tulip.c. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/drivers/net" 
name="/net"></tt></tag>
ここは、DEC Chip 21040 PCI イーサネットドライバ(<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/drivers/net/tulip.c" 
name="tulip.c"></tt>)といったネットワークデバイスドライバが見つかる場所である。

<!--
/sound This is where all of the sound card drivers are. 
-->
<tag><tt><htmlurl url="./The-Linux-Kernel-images/linux/drivers/sound" 
name="/sound"></tt></tag>
ここは、すべてのサウンドカードドライバがある場所である。
</descrip>

<!--File Systems-->
<sect2>ファイルシステム

<!--
The sources for the EXT2 file system are all in the fs/ext2/ directory with
data structure definitions in include/linux/ext2_fs.h,
ext2_fs_i.h and ext2_fs_sb.h. The Virtual File System data
structures are described in include/linux/fs.h and the code is in
fs/*. The buffer cache is implemented in fs/buffer.c along with the
update kernel daemon. 
-->
<p>EXT2 ファイルシステムのソースはすべて、<tt>fs/ext2</tt> ディレクトリにあり、
データ構造の定義は、<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/include/linux/ext2_fs.h" 
name="include/linux/ext2_fs.h"></tt> と <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/include/linux/ext2_fs_i.h" 
name="ext2_fs_i.h"></tt>, 
<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/include/linux/ext2_fs_sb.h" 
name="ext2_fs_sb.h"></tt> にある。
仮想ファイルシステムのデータ構造体は、
<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/include/linux/fs.h" 
name="include/linux/fs.h"></tt> に記述されており、そのコードは <tt>fs/*</tt> に
ある。バッファキャッシュは、<tt>update</tt> デーモンと一緒に 
<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/fs/buffer.c" 
name="fs/buffer.c"></tt> で実装されている。

<!--Network-->
<sect2>ネットワーク

<!--
The networking code is kept in net with most of the include files in
include/net. The BSD socket code is in net/socket.c and the IP
version 4 INET socket code is in net/ipv4/af_inet.c. The generic
protocol support code (including the sk_buff handling routines) is in
net/core with the TCP/IP networking code in net/ipv4. The network
device drivers are in drivers/net. 
-->
<p>ネットワークのコードは、<tt>net</tt> に保存されていて、その大部分の include
 ファイルは <tt>include/net</tt> にある。BSD ソケットコードは、<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/net/socket.c" 
name="net/socket.c"></tt> にあり、IP version 4 INET ソケットコードは、<tt>
<htmlurl url="./The-Linux-Kernel-images/linux/net/ipv4/af_inet.c" 
name="net/ipv4/af_inet.c"></tt> にある。
汎用のプロトコルサポートコード(<tt>sk_buff</tt> 処理ルーチンなど)は、
<tt>net/core</tt> にあり、TCP/IP ネットワークのコードは <tt>net/ipv4</tt> 
にある。ネットワークデバイスドライバは、<tt>drivers/net</tt> にある。

<!--Modules-->
<sect2>モジュール

<!--
The kernel module code is partially in the kernel and partially in the
modules package. The kernel code is all in kernel/modules.c with the
data structures and kernel demon kerneld messages in
include/linux/module.h and include/linux/kerneld.h
respectively. You may want to look at the structure of an ELF object file in
include/linux/elf.h. 
-->
<p>カーネルモジュールコードは、カーネル内にある部分とその <tt>modules</tt> の
パッケージに入っている部分とがある。カーネルコードはすべて <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/kernel/module.c" 
name="kernel/module.c"></tt> にあり、
そのデータ構造とカーネルデーモンである <tt>kerneld</tt> の
メッセージは、<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/include/linux/module.h" 
name="include/linux/module.h"></tt> と <tt><htmlurl 
url="./The-Linux-Kernel-images/linux/include/linux/kerneld.h" 
name="include/linux/kerneld.h"></tt> とにそれぞれ入っている。
ELF オブジェクトファイルの構造は、<tt><htmlurl 
url="./The-Linux-Kernel-images/linux/include/linux/elf.h" 
name="include/linux/elf.h"></tt> で見ることができる。