ユーザーモードでできること。

http://d.hatena.ne.jp/shinichiro_h/20060325#1143232211 dwarf2fs
こういうのを見てると、なんか、ファイルシステムなんか、カーネルがやらずにユーザーモードで動いてたほうがなんだか面白いことができそうな気がしなくもない。
(いっそのこと、カーネルはディスクをメモリ4Gにまるごとマップするだけ、つまり、フラットな領域を提供するだけでいいんじゃないか、と、思ったりするのだけど、まだそれは検討中。)

あと、libusbを見たときも、なんかそういうことを考えたような。カーネルによって隠蔽されてる場合と、ライブラリによって隠蔽されてる場合と、どのくらい変わってくるのだろうか。
SANEなんかは具体的な処理はユーザー空間でやってたはず。そんで、そのおかげで柔軟性があったような気がしないでもない。

でも、だからといって、何から何までユーザー空間でできればいい、というのもやっぱりおかしい。IDEやらSCSIやらが阿呆なプログラムから保護されないのは間違ってるような気がする。
そんで、USBストレージなんかは、IDEドライバやらSCSIドライバと同じぐらいのレベルになるのでUSBストレージは、カーネル空間にいっちゃうはず。
USBだからといって、全部ユーザー空間にあったらいいというわけでもないような。いや、わからんけど。


というわけで、少しレガシーな気分から解き放たれて、ユーザー空間とカーネル空間の境界について考えるのは楽しいかもしれない。

これは、マイクロカーネルについて考えるのとは違う。マイクロカーネルは、確かに、カーネルをユーザー空間に追い出してるかもしれない。
けど、カーネルを支えるプロセスは、ただのユーザープロセスと違って、間違った動きをしたら、カーネルごと死ぬ。
そうじゃなくて、まあ、ここでは、ユーザー空間っていうのは「何をやってもシステムは停止しない空間」のこと、と、しておく。いや、べつにしなくてもいいけど。なぜならこの話は続かないから。

  • USBに繋がってる物に直接転送できるのは嬉しいような気がするけど、PCIに繋がってる物に直接転送できるのは気持ち悪い
  • ネットワークはユーザー空間でいいような。イーサネットカードまでカーネルで抽象化、TCPはライブラリ。で、できそうな気が。
  • あー、いや、ネットワークは複数のプロセスでアレだから、アレ。無理だわ。


あー、いや、効率があるのか。けど、なんか、X Window Systemの存在が許されてる時点でコンテキストスイッチのコストは、なんか、まあ。ここで、「最近のコンピュータは速いから…」とか考えてしまった僕は死ぬべきである。