web-dev-qa-db-ja.com

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

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

  • 構造体_task_struct_はスレッド、つまり軽量プロセスを表しますが、プロセスは表しません。

  • プロセスは構造によって表されるのではなく、同じスレッドグループIDを共有するスレッドのグループによって表されます。

それで、オペレーティングシステムの概念からの次は正しいですか?

Linuxには、clone()システムコールを使用してスレッドを作成する機能もあります。ただし、Linuxはプロセスとスレッドを区別しません。実際、Linuxは、プログラム内の制御の流れを指すときに、プロセスやスレッドではなく、タスクという用語を使用します。

どういう意味ですか?

ありがとう。

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

2
Tim

Linuxには、clone()システムコールを使用してスレッドを作成する機能もあります。ただし、Linuxはプロセスとスレッドを区別しません。実際、Linuxは、プログラム内の制御の流れを指すときに、プロセスやスレッドではなく、タスクという用語を使用します。

実際の実装と表示される表面を区別する必要があります。

ユーザー(システムソフトウェア開発者)の観点からは、大きな違いがあります。スレッドは多くの共通リソースを共有します(たとえば、メモリマッピング-スタックは別として-ファイル記述子)。

内部的に(警告:不正確な手振りの引数)Linuxカーネル1) 手元にあるもの、つまりプロセスとスレッドに同じ構造を使用しています。単一のプロセスのスレッドの場合、一部のものを複製するのではなく、その単一のインスタンスを参照します(メモリマップの説明)。

したがって、スレッドまたはプロセスを直接表すレベルでは、基本構造に大きな違いはありません。悪魔は、情報の処理方法にあります。

読むことに興味があるかもしれません スレッドはLinux上でプロセスとして実装されていますか?


1) 最近の「Linux」は主にOS全体を表していますが、実際にはカーネル自体にすぎないことを忘れないでください。

2
peterph

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アプリでは、プロセスの数がこれを超え、アプリケーションの失敗を引き起こす可能性があります。

1
Stephen Harris