Linuxがプロセススケジューリングとスレッドスケジューリングを処理する方法を理解しようとしています。 Linuxはプロセスとスレッドの両方をスケジュールできると私は読んだ。
Linuxにはスレッドスケジューラとプロセススケジューラがありますか?はいの場合、どのように協力しますか?
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 。
Linuxのカーネルスレッドは、リソースを共有するプロセスとして実装されます。スケジューラはスレッドとプロセスを区別しません
詳細については、こちらをご覧ください: http://www.linuxquestions.org/linux/articles/Technical/Linux_Kernel_Thread