回答受付が終了しました

ID非公開

2020/6/27 14:17

11回答

Linuxにおいて最初のユーザーモードタスクはどのように生成されるんですか?

Linuxにおいて最初のユーザーモードタスクはどのように生成されるんですか? どんなタスクも大抵fork⇒execの流れですよね。 一番最初に生成されるのは カーネルスレッドだと思いますが カーネルスレッドでforkを使いクローンを作っても カーネルモードのタスクが生成されてしまうから ユーザーモードのタスクを作ることができませんよね?

補足

カーネルスレッドは カーネルスレッド関数を呼び出すことにより execのようにカレントタスクの中身が再初期化 されることなく生成できる。

Linux系21閲覧

回答(1件)

0

最初に生成されるプロセスは init です。これはカーネルが直接生成します。 どのようにというか、カーネルは fork で出来ることは当然出来るので、必要なリソースを割り当てて initプロセスを作ります。 init 以降のすべてのプロセスは、init またはその子プロセスから fork で作られます。 カーネルスレッドは、この話とは関係ないです。

ID非公開

質問者

2020/6/27 16:12

回答ありがとうございます。 initタスクはkernel_thread関数で生成されるようです。 Linuxにおけるswapper(?),initタスクは カーネルスレッドではないのでしょうか? まぁとりあえずinitが生成されたとして。。。 initというのはカーネルモードで動いているタスクですよね。 (wikiではLinuxのinitタスクはページングを担当しているとか書かれていた) そこからユーザーモードのタスクを生成する方法はないんじゃないでしょうか? forkというのはforkを読んだタスクのコピーを作るシステムコールですよね。 もちろん、特権も親から引き継ぐものだと思いますが カーネルモードで動いているタスクからforkで ユーザーモードで動くタスクを生成するって無理なんじゃないでしょうか?