[これ]からコピーして貼り付けてください(https://www.tutorialspoint.com/operating_system/os_multi_threading)協会:
- スレッド切り替えにはカーネルモード権限は必要ありません。
- ユーザーレベルのスレッドは作成と管理が高速です。
- カーネルスレッドは通常、ユーザースレッドよりも生成と管理が遅くなります。
- 同じプロセスであるスレッドから別のスレッドに制御を転送するには、カーネルモードに切り替える必要があります。
私は標準のオペレーティングシステムの参考書を読んでいる間、これらの点を見たことがありません。これは論理的に聞こえますが、Linuxではどのように反映されているのか疑問に思います。正確に言えば:
誰かがユーザースレッドとカーネルスレッド間のコンテキスト切り替えに関連する詳細なステップを提供することで、2つのステップの違いを見つけることができますか?
実際のコンテキスト切り替えの例やコードとの違いを説明できる人はいますか?システムコール(カーネルスレッド間のコンテキスト切り替えの場合)とスレッドライブラリ呼び出し(ユーザースレッド間のコンテキスト切り替えの場合)を含めることができます。
誰かが私をコンテキスト切り替えを処理するLinuxソースコード行(たとえばgithubで)に接続できますか?
カーネルスレッド間のコンテキスト切り替えをカーネルモードに変更する理由も疑問に思います。最初のスレッドに対してすでにカーネルモードになっていませんか?
答え1
使用された用語を誤って理解しているようです。
リンクされたチュートリアルと多くのOS講義/本の文脈で(はい)ユーザースレッドとカーネルスレッドの典型的な違いは次のとおりです。
- カーネルスレッド - カーネルによって管理されますが、ユーザー空間プログラムを実行するスレッド
- ユーザー(レベル)スレッド(別名)「繊維」) - カーネルが何も知らず、完全にアプリケーション(またはアプリケーションで使用されるライブラリ)によって管理されるスレッドです。pthのような) ユーザー空間で
ユーザースレッドを調べる目的は、一般的に協力的なマルチタスクを説明し、真のカーネルスタイルのコンテキスト切り替えを維持する利点を示し、学生にコンテキスト切り替えを紹介することです。
対照的に、Linuxカーネルの文脈では、これらの用語は異なって定義されています。
- カーネルスレッド - カーネル空間で実行されるカーネル操作用にカーネルが作成した軽量スレッド。
- ユーザースレッド - カーネルによって管理され、ユーザースペースで実行されるアプリケーションスレッド、つまり
pthread_create()
同様のライブラリ関数または下位レベルのシステムコールによってclone()
生成されたスレッド。