web-dev-qa-db-ja.com

Linuxがスレッドとプロセススケジューリングを処理する方法

Linuxがプロセススケジューリングとスレッドスケジューリングを処理する方法を理解しようとしています。 Linuxはプロセスとスレッドの両方をスケジュールできると私は読んだ。

Linuxにはスレッドスケジューラとプロセススケジューラがありますか?はいの場合、どのように協力しますか?

28
whitefox

Linuxカーネルスケジューラ は実際にはタスクをスケジュールしており、これらはスレッドまたは(シングルスレッド)プロセスのいずれかです。

したがって、task(a task_structカーネル内で)、スケジューラのコンテキストでは、スケジュールされているものであり、kworkerまたはkswapdなどの一部カーネルスレッド、一部 )マルチスレッドプロセスのユーザースレッドfirefoxなど)、またはシングルスレッドプロセスのシングルスレッドbashなど)シングルスレッドプロセス。

プロセススレッド の空でない有限セット(シングルトンの場合もあります)であり、同じ 仮想アドレススペース (および- ファイル記述子作業ディレクトリ など...)。 credentials(7)capabilities(7) なども参照してください...

Linux上のスレッドはカーネルスレッド(カーネルによって管理されるという意味で、独自のスレッドも作成する)であり、Linux固有によって作成されます- clone syscall(Linuxでプロセスを作成するためにも使用できます) pthread_create 関数は、おそらく [〜#〜] nptl [〜#〜] および Gnu Libc (内部のcloneの上に(Linuxで)構築されますLinuxに統合されたNPTL)および musl-libc

38

Linuxのカーネルスレッドは、リソースを共有するプロセスとして実装されます。スケジューラはスレッドとプロセスを区別しません

詳細については、こちらをご覧ください: http://www.linuxquestions.org/linux/articles/Technical/Linux_Kernel_Thread

22
nurio