アカウント名:
パスワード:
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds
NetBSDって…移植できるのか? (スコア:4, 興味深い)
メモリ保護(プロテクトモード)のないCPUで動くようなものなんでしょうか。
# というか、多分動かない(W
# H8マイコンでも動かせるLinuxはあるが、NetBSDは無いでしょ。
# SH-2 以下で動くNetBSDも聞いた事がない。
μCLinuxってのは基本的にfork()(プロセス)じゃなくて、clone()(スレッド)だけで
プログラムを並列動作させています。
(だからサーバとかのプログラムは多くの場合、書き換え必須)
プロセスを廃し、全部スレッドで扱うから、MMUがなくても大丈夫、
全て共有メモ
Re:NetBSDって…移植できるのか? (スコア:5, 参考になる)
なんか誤解がある様なので。
>μCLinuxってのは基本的にfork()(プロセス)じゃなくて、clone()(スレッド)だけで
>プログラムを並列動作させています。
>(だからサーバとかのプログラムは多くの場合、書き換え必須)
>
>プロセスを廃し、全部スレッドで扱うから、MMUがなくても大丈夫、
>全て共有メモリ空間で動くから問題ないというシロモノだったはず。
>要するに、アドレス変換&メモリ保護の機能がないので…。
プロセスもちゃんとあります。
親子が同じメモリ空間を共有する事は出来ないのでvforkしか実装されていま
Re:NetBSDって…移植できるのか? (スコア:1)
fork は MMU が無いと きちんと実現できない、
vfork は fork が無くても、 clone を使って実現できる。
だから
> 「μCLinuxは本家のLinuxともかなり動作が違っていて特殊である」
> forkして複数の要求を処理する事は不可能なので、そういったプログラムを動かそうと
> 思ったら、修正が必要になります。
という話になると思うのです。間違っていますか?
# kernel/fork.c あたりを読めば解るんでしょうけど、時間が…
Re:NetBSDって…移植できるのか? (スコア:2, 興味深い)
このへんの理解はマニュアルでもかなり得られますよ。
man vfork してみて下さい。
>vfork は fork が無くても、 clone を使って実現できる。
vfork()ってのは、実行した親プロセスが子プロセスの終了まで
停止するんです…。
clone()の特殊な場合だと書かれていますが、要するに
シングルタスクのMSDOSで、子プロセスを作ってるみたいな感じ。
これは本来、fork()してすぐexec()するプログラムの
パフォーマンスを上げるために用いていた手法です。
Linuxのマニュアルを引けばわかりますが、
この関数は「過去の亡霊」とまで言われています…。
Re:NetBSDって…移植できるのか? (スコア:1)
vforkにしても、メモリを共有している間親が止められる以外は、普通のforkと同じですし。
(実装はほとんど共通だし)
この違いだけで「かなり動作が違っていて特殊」と言うのはちょっと大げさでは…と思います。
Re:NetBSDって…移植できるのか? (スコア:1, 参考になる)
戻ったと考えるのが適当ですな。
# NetBSD の vfork もパフォーマンス上の理由で先祖返りしてますけど。
Re:NetBSDって…移植できるのか? (スコア:1, 参考になる)
しかしながら、MMU がないマシンで fork しようと思うと、
すべてのアドレスをリロケート可能な形で保持する必要があるので、
コンパイラのサポートが必要になります。
# データポインタが動的にリロケートされるので、
# PIC 程度では足りません。
# デマンドページングなんて贅沢なことは言わないので、
# 原始的な MMU でもあれば違うんですけどね。
# (セグメントレジスタ程度でよい)
vfork の場合、子が execve するまでは親の動作がブロックするので、
その隙に子がすぐに execve してしまえば、そこで新しいメモリマップが
生成されるため、静的なリロケーションか PIC で十分です。
ただ、vfork を用意するくらいなら、最初から spawn システムコールを
用意したほうがよい、という話もあります。