カーネル、シェルについて

カーネル、シェルってなーに? 基本なことを知らなかった、、、


ソフトで最終的に落ち着く先(基本命令)は何かというとアセンブリであり、CPUの命令セットになる。さらにその先にはそれらを実現するマイクロアーキテクチャ(ハード)が存在します。

まずハードについて考えます。当たり前ですが、自然界には同一点、同一時間に異なるものが存在しないという「絶対ルール」があります。したがって、用意したものには必ず物理的な制約が同時に存在します。しかし、既にハードの構成要素(=制約条件)が決まっていても、上記の制約を隠蔽する方法があります。要は、位置や時間軸をソフトでずらせばいいのです。

たとえば、A地点からB地点まで運ぶための二つのかご(ハード)があります。赤、緑、黄色のボールを運ぶ命令(ソフト)を受けます。ハードには資源の制約が存在する(3つ同時に運ぶことは出来ない)わけで、何も考えずに命令を実行しようとするとシステムがおかしくなる可能性があります。赤と緑だけ運ばれて黄色がどこかに消えてなくなっているかもしれないし、無限に運び続けるかもしれません。

命令を初めから制限違反のないようなにすればいいのですが、「3つ以上を2つと1つに分けて1周期ずらして複数回に分けて運ぶ」っという実行に自動的に変換してくれれば、上位の命令(ユーザー)において個数制限から開放されます。なお、数周期遅れるので次にくる命令も、その分すべて一時的に保持&遅らせてなければいけません。これら命令「群」も含めてハードの処理を滞りなく(支障なく)進める取り決めを自動的にやってくれるのがカーネルです。

余談になりますが、「一度に」という命令セットを用意することは、ノイマン型コンピューティングの世界ではナンセンスです。ノイマン型コンピューティングのように命令も記憶して動作させるシステムは、時間軸で順次処理を施す「時間軸に対する自由度」を利用出来ることで機能を飛躍的に拡張させています。3Dと4Dの違いです。したがってその偉大な恩恵を捨てるような、「一度に」という命令を基本命令で規定することは、用途が決まった(例えばGPU)以外にはありえないわけです。

また、カーネルはハードからの(個数)制限の取れた「〜を運ぶ」という命令を待っています。命令は、声で叫ばれるかもしれないし、ボードで表示されるかもしれないです(例えば、CUIGUI)。これらを最終的にカーネルにわかる「文章(文字)に書いて手渡し」してくれるの入出力インターフェースがシェルです。


最後にシンプルにまとめると、

ハードで入出力形式が決まり、時系列で、単一入力、単一出力となるシステムなら当たり前ですがカーネル・シェルはいらないです。おれは、かごを3つもってるよ、いや、1つしかもっていないよっていうハードの制約を「隠蔽」して、どのハードも「赤、緑、黄色のボールを運ぶ命令」を出来るようにしているのがOS(カーネル&シェル)です。

      • -

最近、書きながら知らなかったことを理解するようにしている。上記も、すでに知っていて書いたわけではなく、調べながら考えながら書いたので間違っている可能性も低くないです。(専門家の方には恐縮ですが間違っていたら、ご指導、ご鞭撻を何卒よろしくお願いいたします)。