第1回 Linuxカーネルの作り出す世界
青木峰郎
2008/9/2
■デバイスとデバイスドライバ
カーネルの重要な役割の1つが、コンピュータのハードウェアをとりまとめることです。例えばどんなハードウェアがあるでしょうか。いくつか挙げてみましょう(全部を知っている必要はありません)。
●CPU
●メモリ
●ハードディスク
●DVDドライブ
●CD-ROMドライブ
●フロッピーディスクドライブ
●グラフィックアダプタ(画像をモニタに送る部品)
●ネットワークアダプタ
●サウンドカード
●時計
@IT自分戦略研究所カンファレンス 上級ITプロフェッショナルのスキルとキャリア 開催 |
日時:2008年9月27日(土) 11:00〜18:00(受付開始 10:30〜) 場所:秋葉原UDX 6F RoomA+B 詳しくは開催概要をご覧ください。 |
このような、比較的単位の大きい物理的な「部品」のことをデバイス(device)と呼んでいます。カーネルは上記に挙げたようなデバイスすべてを統轄しています。
しかし、例えば「ハードディスク」と一口に言っても、現実にはハードディスクにはいろいろな種類があります。そして、種類が異なれば操作方法も異なります。つまり、種類の異なるハードディスクが3つあれば、カーネル側でも3種類のコードが必要になるわけです。
ただし、ハードディスクを操作する以外のコードは共通ですから、図2のようにデバイスを操作する部分だけを独立させて交換可能にしておいたほうが何かと便利そうです。
図2 デバイスドライバ |
このような、特定のデバイスを操作するためのソフトウェア部品のことをデバイスドライバ(device driver)と呼びます。省略して「ドライバ」と言うこともあります。
■システムコール
さまざまな事情から、ハードウェアと直接やりとりできるのはカーネルだけに(つまりデバイスドライバだけに)限定されているので、普通のプログラムがハードウェアを操作したいときはカーネルに仕事を頼んで間接的に操作するしかありません。カーネルはシステムで一番“偉い”プログラムですが、その一方では一番下っ端にいてこき使われるプログラムでもあるのです。
では、カーネルに仕事を頼むにはどうすればよいのでしょうか。そのために使うのがシステムコール(system call)です。システムコールの「システム」は、要するにカーネルのことで、システム(system)を呼び出す(call)から「システムコール」と呼ばれます。具体的に挙げると、Linuxには次のようなシステムコールがあります。
●open
●read
●write
●fork
●exec
●stat
●unlink
ただし、システムコールだからといって特別な呼び出し方をするわけではありません。例えば次のコード片を見てください。これは後の章のサンプルコードから抜き出してきたもので、readというシステムコールを呼び出しています。
n = read(fd, buf, sizeof buf); |
この例からわかるように、システムコールの呼び出しも見た目はごく普通の関数呼び出しにしか見えません。
■Linuxを理解するとは
さて、ここで唐突に最初の話に戻ります。本章は「Linux世界って要するに何だ」という問いから始まりました。そしてそれは、Linuxカーネルの作り出す世界のことであり、そのカーネルに仕事をさせるにはシステムコールを使うしかないことも話しました。
ですから当然、我々がこれから知ろうとしているファイルシステム・プロセス・ストリームについても同じことが言えます。それらはすべてLinuxカーネルが作り出しているのですから、「プロセス」や「ストリーム」というものを理解するためには、それを操作するためのシステムコールを通じて、イメージを作り上げていくしかありません。本書ではいろいろと概念的な説明も行いますが、それはすべて理解を助けるための補助線でしかないのです。
本連載は、ソフトバンククリエイティブ刊行の『ふつうのLinuxプログラミング』のうち第1部「Linuxの仕組み」の中から「第2章 Linuxカーネルの正解」と「第3章 Linuxを描き出す3つの概念」を、同社の許可を得て転載するものです。 本書は、LinuxにおけるC言語プログラミングの入門書です。「Linuxの世界が何でできているのか」に着目し、「ファイルシステム」「プロセス」「ストリーム」という3つの概念を紹介しています。 なお、本連載は転載を行っているため@IT自分戦略研究所の表記とは一部異なる点があります。ただし、Webで掲載するに当たり、(例えば「本書は」としている部分は「本連載は」としていること、図版などの省略など)、表現を若干変更している点がありますが、その点ご了承ください。 |
関連記事 |
Linuxに触れよう |
LPICに見るLinuxを学ぶ意味とは |
実践でも役立つLPICドリル インデックス |
Linuxをいまから学ぶコツ教えます |
第1回 Linux認定資格・試験の世界 |
@IT自分戦略研究所は2014年2月、@ITのフォーラムになりました。
現在ご覧いただいている記事は、既掲載記事をアーカイブ化したものです。新着記事は、 新しくなったトップページよりご覧ください。
これからも、@IT自分戦略研究所をよろしくお願いいたします。