「Solaris Internals」という本では、次のように述べています。
Solaris はカーネルスレッドを実行し、割り込み処理、メモリページ管理、デバイスドライバなどのカーネル関連タスクを実行します。ユーザープロセスを実行するために、カーネルスレッドには対応するLWPがあります。これらのカーネルスレッドは、ユーザープロセスの代わりにカーネルによって実行されるように予約されています。
これらの言葉は少し混乱しています。私が理解したことは次のとおりです。
ソラリスでは、本物のスレッド「ある」カーネルスレッドカーネルスレッドはカーネル関連タスクとユーザー関連タスクを実行できます。ユーザー関連タスクを実行するとき、カーネルスレッドは環境を提供するためにLWPというデータ構造が必要です。ユーザースレッドそして軽量作業計画実行単位やスレッドがまったくありません。それらはシステムのデータ構造にすぎません。これユーザースレッドユーザーデータとコードを含む、実行する必要があるユーザー操作のみ。 LWP はカーネル情報を提供するカーネルデータ構造です。実際の実行単位またはプロセスは次のとおりです。カーネルスレッド。
私の理解が正確であれば、2段階のスレッドモデルがあった初期のSolarisでは、多くのユーザースレッドが1つのlwpにバインドされていました。多くのユーザースレッドカーネルまたはCPUには実際には1つのスレッド(カーネルスレッド)があり、唯一のカーネルスレッドは各ユーザースレッドで順番にタスクを実行します。ユーザースレッドがバインドされていないと実行できません。
私は正しいですか?
答え1
カーネルスレッドはシステムCPUに予約されている基本エンティティで、非常に軽量です。
カーネルスレッドはLWPへの1対1のマッピングを持ちます。スレッドライブラリは、ユーザースレッドをLWPとして予約します。源泉: