前回までの10回の連載で,プロセス管理やメモリー管理,ファイル・システムといったカーネルの基本機能を一通り解説しました。

 しかし,これまで解説してきた機能は,ほぼプロセッサと主メモリーだけを対象とするものばかりです。ファイル・システムはハード・ディスクなどの補助記憶装置と関連が高いのですが,主メモリー上にRAMディスクを作成した場合などを考えれば分かる通り,必ずしも補助記憶装置を必要とはしません。

 これに対し,カーネルにはもう一つ重要な役割があります。それは,コンピュータに接続されているさまざまなハードウエアの制御です。

 最近のコンピュータには,非常に多くの周辺機器が接続されています。モニターやキーボードはもちろん,ハード・ディスクやCD-ROMドライブなどの補助記憶装置,ネットワーク・インタフェースや各種USBデバイスなどさまざまな周辺機器が挙げられます。カーネルは,こういったさまざまな周辺機器を制御し,アプリケーションに対して統一的なインタフェースを提供しています。こうすることで,アプリケーションが周辺機器を手軽に利用できるようになっています。

 例えば,ハード・ディスクの接続インタフェースがSCSIであろうとATAであろうと,ファイルを読み込むときはreadシステム・コールを利用するだけで済みます。アプリケーションはどちらの接続規格のハード・ディスクであるかを意識する必要はありません。これもカーネルが,周辺機器を抽象化し,統一的なインタフェース(この場合は,readシステム・コール)を提供してくれるおかげです。

 カーネルの中でハードウエアを制御する部分をデバイス・ドライバと呼びます。今回は,このデバイス・ドライバを中心にカーネルが周辺機器をどのように管理するかを解説します。

Linuxにおけるデバイスの分類

 コンピュータの周辺機器には,前述のようにいろいろな種類のものが存在します。種類によって制御方法やデータの入出力方法はさまざまですが,OSは,これをできるだけ共通化することで取り扱いを容易にしています。Linuxを含むUNIX系OSでは,デバイスを大まかに「キャラクタ・デバイス」,「ブロック・デバイス」,「ネットワーク・デバイス」の3種類に分類して,それぞれ異なる管理方法を用意しています(図1)。

図1●Linuxカーネルの構造
図1●Linuxカーネルの構造
デバイス・ドライバは,Linuxカーネルの中でハードウエアの制御を担当する部分を指します。

 このうちネットワーク・デバイスは,その名の通りネットワーク・インタフェースなどのネットワーク機器を扱うためのデバイスです。UNIXではネットワーク機能はいわば「後付け」された機能であるため,ネットワーク・デバイスの取り扱いはやや特殊なものになっています。また,カーネルのネットワーク機能とも密接に関係しています。そこで,これについては別の回に解説し,ここでは他の2つのデバイスについて解説します。

この先は会員の登録が必要です。有料会員(月額プラン)は初月無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら