現在位置: ホーム / みらくるブログ / Linuxカーネル、アプリケーション、ライブラリについて比喩的に説明してみた

Linuxカーネル、アプリケーション、ライブラリについて比喩的に説明してみた

プロセスやLinuxカーネルという言葉をしばしば聞くと思います。Linuxカーネルは、いまや非常に大規模で高性能です。ひとことで正確に説明することは困難です。本稿では、営業・マーケティングなど非技術者の方や、Web技術者、文系からIT業界に入られた方など、OSや基盤レイヤから少し遠いけど、それらについて少しでも知りたいという方を対象として、比喩を交えつつ解説します。正確性よりイメージを優先していきます。

アプリケーション、ライブラリ、カーネルという言葉をよく聞くと思います。これらは、次のように例えることができます。

アプリケーション: 主人公をリーダーとするチーム

ライブラリ: チームメイト

カーネル: 神様

 

アプリケーションはチームだ

アプリケーションとは、例えば、Firefoxとか、Chrome、Apacheとか、MySQL、Zabbix、Eclipse、GIMPなどです。WindowsやMacでも概念としては同様で、ExcelやPowerPoint、Photoshop、X-Codeなどがアプリケーションです。単にソフトとかプログラムとか呼ばれたりすることもあります。ユーザーには、馴染みのある存在ではないでしょうか。これらのソフトウェアを使うためにコンピュータを使用している方も多いでしょう。

実は、これらのアプリケーションは、それ単独(ひとり)で行動しているわけではなく、それをサポートするメンバーとチームを組んでいます。ライブラリという言葉を聞いたことがあるかもしれません。ライブラリは、それぞれに得意分野や役割をもつチームの構成員です。例えば、画像やUI関連を担当するGTK、メモリ確保や文字処理を行うGLIBC、フォントを描画するfontconfigやfreetype、音声入出力を担当するlibasoundなどです。つまり、例えば、WebブラウザであるChromeは、それ単独で全ての画面描画を行っているいるわけではありません。細かい仕事は、上記に挙げたようなライブラリ(チームメイト)に処理を依頼しています。

チームメイト同士は仲が良すぎる?

このアプリケーション内のチームメイト同士は、実は、互いに過干渉と言えるほどな密な関係にあります。それぞれのメモリの内容(人間でいうと考えていること)を互いに覗くことができます。あるいは、相手のメモリの内容(思考や行動)を変えてしまうこともできます。バグとか不具合と呼ばれる現象は、誤って、チームメイトの思考を変えてしまうことでも発生します。

悪意のあるプログラム、ウィルス、マルウェアは、このようなアプリケーションの性質を悪用しているものもあります。チーム内の一人でもマインドコントロールすることに成功すれば、次々にメンバーを操り、攻撃者の思うようにアプリケーションを動作させることができます。

カーネルとは神様だ

ベルセルクという漫画で、次のセリフが登場します。

「神はたやすくその奇跡をこの地上にお示しにはならない」

まさにカーネルとはそのような存在です。アプリーション内のチームメイトは互いに顔もよく知っていて、いやというほど会話できます。一方で、カーネルとは、口を聞くことはもちろん、その姿(メモリの内容)を見ることも出来ません。

そもそもカーネルはなぜ必要なのでしょうか。多くの理由がありますが、ひとつには、アプリケーションはハードウェアを直接操作できないということが挙げられます。ハードウェアの操作とは、画面への描画であったり、ネットワークを通じたデータの入出力やディスクへのデータの書き込みなどです。なぜ操作できないのか?それは神様が、そもそもそれらを操作するためのボタンをアプリケーションの世界から隠しているためです。操作はカーネルという神様だけに与えられた神聖な行為なのです。 

システムコールとはお祈りだ

では、アプリケーションが画面に何かを表示したり、ネットワークを通じて、データを取得したりするにはどうすればいいのでしょうか。その唯一の方法はカーネルという神様にお願いをすることです。この儀式を専門用語ではシステムコールと呼びます。神様の前にお供え物をしてあとは祈るのみです。現実世界では、お祈りをしても叶わないこともしばしばありますが、Linuxカーネルは、たいていの場合、願いことを実現してくれます。もちろん、要求が度をすぎる場合にはエラーという形で拒絶されることもあります。

アプリケーションは、それぞれに別の世界に住んでいる

ユーザーとして使っていると、アプリケーション、例えばChromeとExcelは、互いに近くに居そうに見えます。ところが、実際には、アプリケーション同士は、まったく異なる世界、いわばパラレルワールドに住んでいます。お互いの存在も基本的に知らず、もちろん、互いの思考(メモリの内容)を知ることもできません。

アプリケーションのクラッシュ(異常終了)を経験した方もいらっしゃると思います。このような場合、あるアプリケーションがクラッシュしても、他のアプリケーションには影響がなかったのではないでしょうか(例外もありますが)。これは、それぞれが別世界で、お互い関連がないために、ひとつのアプリケーションの問題が、他のアプリケーションに影響しないためです。

少し専門的になりますが、MMUという用語を聞いたことがあるかもしれません。これは、CPUに搭載される機構なのですが、この機構がこの並行世界を作り出しています。MMUは、パソコンやサーバ、スマートフォンなどの比較的高性能なCPUには搭載されていますが、非常に単純なCPUには搭載されていないこともあります。そのようなCPUでは、互いに影響しあう可能性があります。

SEGVや例外は天罰だ

コンピュータを使用していると、Segmentation faultあるいはSEGV、例外などと表示されてプログラムが異常終了することがあります。アプリケーションは、神様が作り出したひとつの世界に住んでいます。どこにでも行けるわけではありません。行動してもよい範囲が決まっています。バグなどで、主人公であるアプリケーションが行ってはならないところに行ったり、やってはならないことを行うと、天罰が下ります。これがSEGVや例外です。基本的にはアプリケーションの設計の問題でユーザーには為す術がありません。

まとめ

IT業界でしばしば登場する用語を非技術者向けに例えを用いて説明しました。トンデモ話と言えなくはないですが、コンピュータについて興味をもっていただくきっかけになれば幸いです。