Linuxをデスクトップとして使うためのナレッジ - Linuxカーネルとモジュール(ドライバ絡み)

はじめに

いきなりですが、Linuxカーネルとは何でしょうか。ここは中級者向けの内容を記載するページですが、意識してこなかった方もおられることでしょう。カーネル(Kernel)とは「核」を意味します。つまりLinuxディストリビューションの核。これがあるからディストリビューションはLinuxを名乗れますし、OSとしてのLinuxが存在するわけです。このページではカーネルの仕組みとモジュールについて解説します。

Linuxカーネルについて

Linuxカーネルには様々な機能が含まれています。
  • メモリ管理
  • CPUスケジューリング(プロセススケジューリング)
  • ファイルシステム
  • ビルトインデバイスドライバ etc...
Windowsにもカーネルと呼ばれるものは存在し、それをNTOSKRNL.EXEと言います。機能的にはLinuxカーネルとほとんど同じと見てよいでしょう。そんな共通っぽい機能を備えているカーネルですが、今回特に着目するのは「デバイスの抽象化」です。

デバイスの抽象化とは

デバイス…何でも構いませんのでイメージしてみてください。プリンタ、デジカメ、マウス、タブレット、キーボード。はたまたハードディスクコントローラやネットワークカードなんていうものもあります。そしてそれをPCに接続すると、昔はそのままでは使えませんでした。理由は単純で、「OS側がデバイスをどのようにコントロールすれば良いのかわからない」からです。当然OSがわからないとなると、その上で動作するソフトウェアにだってわかるはずもありません。つまり、「プリンタを接続してもOSから認識できず、メモ帳からも印刷できない」のは全くもって普通の話なのです。
で、こうなるとデバイスのコントロール方法をソフトウェアが把握していなければならなくなってしまうわけです。これは盛大な無駄であり、ソフトウェアごとにコントロールの仕組みを備えていては開発に時間もかかりますし、ソフトウェアそのもののサイズも大きくなってしまいます。
そこでデバイスドライバというものが登場します。その働きは、「ソフトウェアの代わりにOSがデバイスのコントロールを代行する」ことにあります。メモ帳で「印刷」メニューを表示させた場合と、Chromeなどで「印刷」メニューを表示させた場合に画面がほぼ共通しているのはこれが理由です。そのような、デバイスをコントロールしなければならないユーザ命令についてはOSに丸投げする。ソフトウェア側はOSに「これやっといて」とざっくり依頼する程度なイメージになる。これが抽象化を意味します。

デバイスドライバの存在意義

デバイスドライバは、デバイス(ハードウェア)を抽象化させる立役者です。これが存在しないデバイスの場合、ソフトウェアはコントロールの仕組みを独自に保持しなくてはなりません。そのようなデバイスは今の時代、ほとんど存在しません。しかし無くてはならない存在です。
Linuxにもデバイスドライバは存在します。ただ、そのインストールやロードはWindowsほど単純には行きません。Linuxカーネルにデバイスドライバを組み込んであげる必要があります。この「組み込む部品」のことをモジュールと呼ぶのです。

(編集中)