Linuxはプロセスとスレッドを区別しませんか?

Linuxはプロセスとスレッドを区別しませんか?

私が知る限り、Linuxカーネルでは

  • この構造は、task_structプロセスではなく軽量プロセスであるスレッドを表します。

  • プロセスはどの構造でも表現されず、同じスレッドグループIDを共有するスレッドグループとして表されます。

次も同じだ。オペレーティングシステムの概念正しいですか?

Linuxは、システムコールを使用してスレッドを生成する機能も提供しますclone()。しかし、Linuxはプロセスとスレッドを区別しません。。実際、プログラム内の制御フローについて言及すると、Linuxは「プロセス」または「スレッド」の代わりに「作業」という用語を使用します。

どういう意味ですか?

ありがとうございます。

関連Linuxはスレッドとサブプロセスをどのように区別しますか?

答え1

Linuxはまた、clone()システムコールを使用してスレッドを生成する機能も提供します。しかし、Linuxはプロセスとスレッドを区別しません。実際、Linuxでは、プログラム内の制御フローに言及するときに、「プロセス」または「スレッド」の代わりに「作業」という用語を使用します。

実際の実装と見える表面を区別する必要があります。

ユーザー(システムソフトウェア開発者)の観点から見ると、1つの大きな違いがあります。スレッドは多くの共通リソース(たとえば、メモリマップ(もちろんスタックに加えてファイル記述子))を共有します。

Linux内部(警告:不正確な手振り引数)コア1)現在持っているものを使っています。つまり、プロセスとスレッドに同じ構造を使用します。ここで、単一プロセスのスレッドについては、何かを複製せずに単一インスタンス(メモリマッピングの説明)を参照します。

そのため、スレッドやプロセスを直接的に表現するレベルでは基本構造は大きく変わらず、情報をどのように処理するかが問題だ。

また、読書に興味がある可能性がありますLinuxのスレッドはプロセスとして実装されていますか?


1)最近「Linux」はほとんどのオペレーティングシステムを意味しますが、実際にはカーネル自体にすぎないことを覚えておいてください。

答え2

Linuxスレッドは別々のプロセスとして実装されますが、他のスレッドと同じアドレス空間を共有します。デフォルトでは、コマンドは非表示になっていますが、psフラグで見ることができます-L

たとえば、

% ps -fp 2642
UID        PID  PPID  C STIME TTY          TIME CMD
polkitd   2642     1  0 Dec09 ?        00:00:48 /usr/lib/polkit-1/polkitd --no-d

% ps -fLp 2642
UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
polkitd   2642     1  2642  0    7 Dec09 ?        00:00:18 /usr/lib/polkit-1/pol
polkitd   2642     1  2680  0    7 Dec09 ?        00:00:00 /usr/lib/polkit-1/pol
polkitd   2642     1  2683  0    7 Dec09 ?        00:00:30 /usr/lib/polkit-1/pol
polkitd   2642     1  2685  0    7 Dec09 ?        00:00:00 /usr/lib/polkit-1/pol
polkitd   2642     1  2687  0    7 Dec09 ?        00:00:00 /usr/lib/polkit-1/pol
polkitd   2642     1  2688  0    7 Dec09 ?        00:00:00 /usr/lib/polkit-1/pol
polkitd   2642     1  2692  0    7 Dec09 ?        00:00:00 /usr/lib/polkit-1/pol

polkitd実際には7つのスレッドで構成されていることがわかります。どちらもプロセスIDは同じですが、スレッドID(LWP)は異なりますが、カーネルでは異なるプロセスであるため、リストには異なるプロセスとして表示されますps

これは制約などに影響を与える可能性がありますulimit。 RedHatとその派生製品の一般的な問題は、基本的なPAM構成がプロセスを制限することです。

% cat /etc/security/limits.d/20-nproc.conf 
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     4096
root       soft    nproc     unlimited

大規模なJava Webアプリケーションでは、プロセス数がこの制限を超えてアプリケーションが失敗する可能性があります。

関連情報