5

私の理解では、ユーザー スレッドはユーザーによってライブラリから作成され、ユーザー空間で管理されます。プロセスには 1 つ以上のユーザー スレッドを含めることができますが、カーネルはそれらを認識しません。

では、カーネルスレッドとは何ですか? それらはプロセスに似ていますか、それともユーザースレッドに似たプロセスに含まれていますか?

また、ユーザー スレッドがカーネル スレッドにマッピングされている図も見ました。実行の観点から、それはどのように正確に機能しますか? カーネルはカーネル スレッドをスケジュールし、そのスレッドにマップされたユーザー スレッドを実行しますか?

4

2 に答える 2

3

はい、カーネルスレッドはプロセスに非常に似ています。実際、最近のオペレーティング システムでは、スレッドとプロセスの区別があいまいになっています。Linux では、cloneシステム コールを使用して、スレッド (同じ PID、同じアドレス空間、同じファイル記述子テーブルなど) またはプロセス (個別の PID など)、またはその間のものを作成できます。

(FreeBSD には と呼ばれる同様のシステム コールがrforkあり、これは を一般化しforkます。スレッドとプロセスを統合するという考えは、Plan 9 に端を発していると思います。)

于 2013-05-01T16:49:56.093 に答える