マイクロカーネル vs モノリシックカーネル
一度本気で語ってみたい題目。リーナスvsタネンバウムで いろいろネタは出てるが、時代は変わっている。もう一度 語ってみようじゃないか。 ・性能の違い ・実装の違い ・リーナスとタネンバウム 何でもいいので語ろう。 でも不思議だな。 linuxなどでは、GUIサブシステムはユーザー空間のさらにユーザーのプロセスで動くのに対し、 windowsでは少なくともユーザープロセスじゃないよね?新しいのは知らないけど、カーネルスペースで動いていたはず。 この辺の混沌を考えると、一概にカーネルの種類って語れないんだな/。 もっと完全性の高い原理主義的なもので比較してみたいなー。 >>228 昔と違うからねー状況が。比較自体無意味っつーか。 対立自体ナンセンスっつーか。 マイクロよりモノシリックの方が安定する WindowsとLinuxを見れば明らか 別に1枚カーネルでも内部のスレッドはあるんだし… 具体的にはどの辺が? いやだからおまいら、この考察自体時代遅れなんだってば・・・ マイクロカーネルとか念仏唱えてればご飯食えた時代があったんだね・・・ >windowsでは少なくともユーザープロセスじゃないよね?新しいのは知らないけど、カーネルスペースで動いていたはず。 NT系でグラフィックサブシステムをシステム空間で動作させていたのは、 NT4.0、2000、XPだけだよ。 NT自体は本来的な意味でれっきとしたマイクロカーネルだし、 実際のところこれまでに商用OSとして最も成功したマイクロカーネルOSだろう。 こんなイビツなものはもはやマイクロカーネルの体をなしていない、 目先のパフォーマンスのためにマイクロカーネルの理念を曲げたものは もはやマイクロカーネルを名乗るべきではない、みたいな事をほざく 原理主義者にクソミソに貶されたりもした訳だけど、 そいつらは不思議なことにパフォーマンスを確保するためにネットワークスタックや ファイルシステムやサーバをカーネルモードで動作させるUNIX系の実装には なぜか全く反応しない、というダブルスタンダードを決め込んでいたりしたから面白い。 >>237 そんな原理主義者、おまえの近所にたまたまいただけじゃねw 達成目標の定義もなしに「失敗」とか決めつける奴って笑える 特定のOSを名指ししたわけでもないのに別に怒らなくても。 でもAtomとかの省電力CPUが出てきてWindowsがシリコンディスクで普通に動くようになると BeOSとかネットサーフィン用のお手軽端末目的のOSは ほんとにもー失敗に終わったと言わざるを得ない。 モノリシックの方が良い。 なんたって物識りックカーネルって位だから、頭よさそうだし。単結晶シリコンっぽい。 (モノじゃなくでシングルって突っ込みはナシね) 結局今はハイブリッド式? カーネルプロセス内にモジュールの代わりにスレッドがあるかんじ。 >>248 Dragonfly BSDはもっと評価されてもいいと思う。 あとQNXも Dragonfly BSDを指して「(たぶん理想的なBSD on )Machだ」と言った人がいるとかいないとか CISCとRISCが融合して外部CISC内部RISCになったように モノリシックカーネルとマイクロカーネルも融合して外部モノリシック内部マイクロなハイブリッドカーネル化したのかな? カーネルは1プロセスだけどカーネル内スレッドがいっぱい走ってるみたいな >>254 今はお互いいいところをうまく合わせているよ。 沢山のPEを持った並列計算機や、マルチコア、メニ−コアのマシン、 ネットワークに分散した計算機などを透明に制御するOS、 アーキテクチャーの異なるマシンをネットで繋ぎ合わせたシステムなどは、 多分モノリシックカーネルではダメ(上手く扱えない)だろう。 >>257 Roadrunner のOSはRHELとfedoraですが。 今は1つのカーネルがマルチコアを制御してるけど 小型のカーネルが個々のコア毎に実行されるような実装ってありえないかな? 4コア位ならいいけど100コアとかになったらキャッシュ問題等で一括スケジューリングは難しいと思うし むしろ100個の小さいカーネルを走らせたほうがよかったりとか・・・ CPUがマルチコアになるとカーネルってどうなるっていくんですか? モノリシックカーネルの場合、ジャイアントロック(あるスレッドがカーネルの 一部を実行中だと、他のスレッドは止められる)をなくして、並列性を高める ことが求められる。 マイクロカーネルは、最初からそういう風に設計しやすい、というのが うたい文句のひとつ。 マイクロカーネルはカーネルをジャイアントロックしても カーネル機能自体が小さい(モノリシックOSでも排他制御が必要な要素)で ファイルシステム等の大きな機能はアプリと同じレベルで並列動作するから問題が少ないけど モノリシックだとカーネルを再入可能にして必要部分だけロックとかしないとロック時間が長くなるだっけ? でもその辺りはモノリシックでも結構こなれてきていて むしろCPUキャッシュとかを意識して複数コアにどうやってスケジューリングするかとかが重要になってるっぽいよね、最近は。 個人的にはそれ以前の所(CPU間の同期周りや割り込み処理等)がよくわからんけど、 今はマルチコアが当たり前だから「使える」OSを作るためのハードルがめちゃ高くなったよね。 昔と違って、今はお互いのいいところを双方が取り入れているから、 宗教的に争う意味もなくなってきているんだよねえ。 LinuxやFreeBSDってファイルシステム等の機能がカーネル内部スレッド化されてたっけ? マイクロカーネルのマの字も無い気がするのだけど WindowsとMacOSはマイクロカーネルベースのハイブリッドだよね確か Macは完全なマイクロ いつの時代も最先端 Windoseがマイクロだったのは最初だけで今はモノシリ いつもMacをパクって失敗ばかり(W Mach3とMINIX3…とちらが正統マイクロカーネルの王者だろう? モノリシックUNIXの正統王者はNetBSDです、これはゆずれません。 俺もOSを開発したい。 まずは、8ビットマシン(OSというより、DOSになるが)から始めるか……。 7年間で300レスか・・・定番ネタだったけど思いのほか白熱しなかったんだな・・・ 安いもの使ってサービス提供するっていうのが最近の風潮だもんな 中身なんてどうでもいいっていうか それで高品質なものが手に入るし googleのデータセンタとか見ても 分散システムの個々のPCがプロセスでそれらを統括するPCがカーネルとは言えないだろうか >>197 この手の馬鹿ソフト屋は精度と確度の違いを全く理解していないから 歯抜けの出力だしても平然としてるんだよな。 1時間に1回動けば精度はどうでもいいって話だと、 例えば59分59秒に動作してログを記録した後1時間00分01秒にもう一度動いて、 さらに次は119分59秒先…なんていうデタラメな動作でもokってことなのか 1時間おきに1回、誤差10ナノ秒以下で動作、みたいな場合の制御はどーすんだw 俺RTOS系の人は固定プライオリティの割り込み可能スケジューラーを作ればRTOSって勘違いしてるよね なんかこう、タネンバウムもマイクロカーネルも批判されがちだけど、amiga系(aros.morphosとか)を見る限り実装によりけりなんじゃないかと思うのだが。 AmigaOSってマイクロカーネル系なの? ちなみにマイクロカーネル考にはこんなのも有ってなるほどなと思ってたりする ttp://d.hatena.ne.jp/oraccha/20100601/1275366559 うん。ただ、マイクロカーネルのくせに、x86向けに作ってないところが残念で仕方ない(arosを除く)。 あと、超漢字も軽いことで有名だよね。だから、実装次第なんじゃないかなと思うわけで。 マイクロカーネルはCPUの性能が上がってようやく使えるものになったみたいな意見もあるけど(それが事実かどうかはともかく)、ハードに合ったソフトを使うのは、悪いことじゃないよね。と思うのは僕だけですか。 今の定義だと ・マイクロカーネル → プロセス毎にアドレス空間が分離して保護される だけど本質的に「基本機能+大きなサービス」と捉えれば保護は不要なわけで B-TRONやAmigaOSは保護にかかる大きなオーバーヘッドと無縁だったんじゃなかろうか? メッセージやコンテクストスイッチによるオーバーヘッドばかり注目されてるけど 実はその陰で動く仮想アドレス関連もバカにならないとか・・・ リーナスとタネンバウムのも「マイクロvsモノリシック」じゃなくて「linux vs minix」みたいだし(2006年のは、まだ読んでないけど) リーナスもマイクロじゃなくてmachの批判をしてる感じだから なんだかんだでまともな議論はされてないんじゃないかと思う処はある 超漢字(B-right/V)はソース公開されてないから、中身がメッセージパッシングで作られてるかどうか 正直わからん。 外殻はメモリ共有して直接データをやりとりしちゃってそうな気がするんだが。 共有メモリーもIPCの一つの手法だし 「保護」さえ無視すればメモリ上にメッセージを編集してポインタを渡すのが一番速い? ITRONは最近までメモリー保護は無かったはずだからBTRONもそんな感じじゃないかな? MINIX1だってMMU無しの8086で動作する「マイクロカーネル(ちとアレだが)」だしね メールボックスはポインタ渡しだけど...そういうインタフェースもなしでやっちゃってないかなとw 有名にしたのはMachとMINIXだけど AmigaOSとかOS/9とか結構昔から実用化されてたんだね>マイクロカーネル よく判らないんだが、GNU Hurdてのは、Mach+BSDのマイクロなんだろ。 ということは、ハイブリッドじゃないdarwinとほとんど同じなわけだ。 だったらGNUはdarwinをマイクロにして公開しちゃえば良いと思うんだが駄目なのか? HurdがBSDというのは初耳なんだが。 ていうかGNUプロジェクトがGPLでないものは取り込まんだろ。 一時期はフリーUNIXの大本命だったのにね>Hurd 蛇足だけどUNIXとしてはNetBSD マイクロカーネルとしてはMINIX3が好き 他にはInfernoとかELATEとかQNXとか…主流になれない俺…orz morphosのカーネルのquarkはQNXを参考にするつもりだったがL4を真似することにした。 みたいな事がwikiにあると思うんですが、L4やQNXなど(mach以外)を採用したり 参考にしてるOSってなにかありますか。ご存知でしたら教えて戴けますか。 なんだか、マイクロカーネルの人気が低いのはmachが原因な気がして、ならないのです。 たとえば分散OSで検索して出てくるのはmach以外も多くない? ちょっとスレチだけどInfernoみたいなVM型カーネルも面白いな。 マシンパワーが有り余っている今、主にセキュリティ面のアドバンテージから流行ったりして。 >>302 > 一時期はフリーUNIXの大本命だったのにね>Hurd 一年前のレスにレスだが、そんな時代はない。 Mach/マイクロカーネルが充分な速度を得ることは不可能、 それがはっきりした頃に開発が始まった。 > Mach/マイクロカーネルが充分な速度を得ることは不可能、 > それがはっきりした へぇー。 ということは BeOS も Mac OS X も充分な速度を得てないんですね。 勉強になりました(棒) 今はLinux使ってるけどHurdが出たらそっちへ行く…って人が結構居たがな もうはるか昔の話しではあるが >>312 Mac OS XのBSD部分はカーネル内にある。 Mach/BSDはマイクロカーネルじゃない。 使ったことあればバカでも知っているはず。 taskリストに出てこないので。 wikipediaより > Mach 3.0は、Mac OS Xのカーネルにも用いられているが、 > 実装はマイクロカーネルではない。 結局Machカーネルの外にBSDサーバーを出すことが出来なかった。 これはOSF/1もNEXTSTEPもそう。 そもそもMachは3になるまでBSDを機能拡張する形の実装だった Machの外部サーバとして実装され、今も維持されてるのはHurdだけ。 MAC OS-Xはそうだね で、BeOSは? あと組込み系ならQNXとかも有るんだけど Machだけ持ち出してマイクロカーネルは遅くて使いものにならないと言われてもねぇ BeOSはほぼ死亡状態だからなあ。 Hurdの方がまだちゃんと維持されてるんじゃない? ユーザ環境はDebianに出来るし。 ああ「マイクロカーネルは遅くて使い物にならないからHurdは全く期待されていなかった」 みたいなレスからの流れで実用的な速度のマイクロカーネルとして上げただけだから>BeOS 具体的には>>311 からの流れ Machベースで完全に外部サーバー形式にしてるのはHurdだけかね? 初期のBSD on MachもNext StepもMacOS XもOSF-1もパーソナリティ−を内包してたよね? ある意味Machの遺伝子を受け継いでパーソナリティを入れたり出したりしているのがWindowsNT系ってのが皮肉かな 初期はBSD on Machじゃなくて、Mach on BSDとして実装された。 version 2まで。 NTカーネルはモジューラカーネルで、Mach 3とはちょっと仕組みが違うね。 COM/OLEの枠組みで提供されているところはMachのサービスサーバに似てるけど、 コアな部分はカーネル内に動的リンクされてる。 そういやHurdはL4ベースのもあるみたいだけどどんなだろ? あとタンバネウム先生の総決算MINIX3.xも悪くないと思う MachもMINIXも3.0で初めて本当のマイクロカーネルになったんだな それいぜんはマイクロカーネルじゃないし…いや、なんとなく 現役のメジャーどころでまともなマイクロカーネルってWindows(Vita以降?)だけ!? MacOSはmachベースでもマイクロカーネル的には作られてないらしいし MINIX3やDragonflyBSDはマイナーだし… いまや純粋なマイクロカーネルは組み込み系商用製品の一部(QNXとか)とMINIX3だけか Mach3〜とかも聞かなくなったし当時マイクロカーネルすげーって興奮していた身としては寂しい でも個人で細々と作るにはマイクロカーネルのほうが手軽だよね! …と間違ってLinux板に書いてしまった…orz MkLinuxってあったよな。 Machがカーネルの奴。 「僕にはそれが面白かったから」の邦訳にはモノシリックと書いて在ったが read.cgi ver 07.5.0 2024/04/24 Walang Kapalit ★ | Donguri System Team 5ちゃんねる