質問: こんにちは。linux 起動動作の所で質問です。 こんにちは。linux 起動動作の所で質問です。 自分でも分かる範囲で調べてみたんですが、、どうしても分からないので 質問させて下さい。m(__)m (前提) ・起動ディスクはscsiデバイス ・カーネルにscsiモジュールが組み込まれていない ・initrdにscsiモジュールが入っている 1. bios が起動ディスクを決定、mbrのブートローダ起動 2. ブートローダ(grub)が、カーネルと初期ramディスク(initrd)を読み込み 3. そのままではカーネルは rootfsにマウントできないので、 いったんinitrdにマウント、scsiモジュールを入れてからrootfsをマウントする ここで、疑問なんです。 biosはscsiデバイスを認識できるのに、なぜカーネルはscsiデバイスを認識できないのでしょうか...? biosからscsiデバイスのmbrをメモリにロードできているのに、 カーネルからはscsiデバイスをマウントできないのは...なぜでしょう...? 今まで見えてたんだから、そのまま認識しちゃえば...と思うんですが(爆) ドシロウト質問ですみません。 どうかよろしくお願いします。(_ _*)
回答: 今となってはほとんどのosでそうですが、biosで提供される機能も 改めて、適切なデバイスドライバーを介してアクセスし... biosを経由したアクセスを行なわないようになっています。 たとえば、ms-dosの時代には、bios経由のアクセスも使われていましたが それでは、性能面での限界がありますし... たとえばncqはibm pc/atのbiosに存在しませんし sataカードにncqのためのbiosを搭載することはコスト面と biosというlegacyの運用性の面で、優れた方法では無いと思います。 そして性能以上に、マルチタスクosからの利用において biosの提供する機能では、安全なストレージ操作ができません。 これはbiosがms-dosのようなシングルタスクosのみを想定して作られているためです。 (という話は聞いていますが、具体的にどういう形で不整合事故が生じるのかは知りません) ファイルシステムドライバーとストレージハードウェアの間に デバイスドライバーが無ければ、原始的なbiosに合わせるために ファイルシステムドライバーが複雑化せざるを得ず... 結果的に、開発効率や安定性を阻害する可能性もあるかもしれません。 実勢としてはntfsはibm pc/at互換機の上でしか動きませんが irixとlinuxで動くxfsのように あるいは、aixとos/2やlinuxで動くjfsのように... まったく違うハードウェアで動くファイルシステムを実装する上で それぞれが、特定のハードウェア/ファームウェア/biosのために 別々のコードを書くなんて、すごく効率の悪い話じゃ無いですか? (厳密にはntfsにもmips用実装はあったはずだし) 言い換えれば、すべてのデバイスドライバーは 「デバイスを動かすためにある」のと同時に 「デバイス活用の分担のためにある」と言えます。 ハードウェアやファームウェアでは融通が効かないところを ソフトウェアで解決するというのは、ごく自然な流れです。 強いて言えば、biosアクセスの上に、マルチタスクのためのラッパーを実装すれば 汎用のデバイスドライバーが実現できる可能性はありますが... たぶん、それはまともな速度が期待できるようなものにはならないと思います。