Linuxカーネルはユーザーアドレス空間のpthreadsを認識していますか(それは私が思うものではありませんが、私は情報を見つけられませんでした)。スレッドの切り替え時に命令ポインタがどのように変化するのですか?プロセス内のpthreadsにタイムスライスを分割する方法はありますか?
答えて
1)カーネルはユーザレベルのスレッドについて知らない。しかし、NPTLは、ユーザレベル
2)これは本当に幅広い問題ではありません。あなたはOSの本を見るべきです。それは、その問題とコンテキストスイッチに関係するすべてのものに深く入ります。
ねえ、ありがとう!! AFAIK、OSの書籍は、プロセスコンテキストの切り替えをカバーしています。しかし、不思議に思っていた、どのようにスレッドの中でタイムスライスの管理が行われます..カーネルがスレッドを認識していない場合、それは部分的に、スケジューラの起動のようなものですか?どのようにプロセスがない場合、スレッドを管理し、予約することができます。私はこれ以上ユーザーレベルのプログラミングに関連していると感じています。そこで、ここで質問しました。 – SpinLocked
Linuxがこれらのことをどのようにしているか知りたい場合は、Robert LoveのLinuxカーネル開発を参照してください。それは多くのことをカバーしていますが、かなりアクセス可能です。楽しい。 – Avi
まあLinuxカーネルは、ユーザスレッド(pthreadのはユーザ空間で行い、しかもそれだけでスケジュールするかを知る必要がある以外、カーネルは実際にそれらを気にしない)を知っていません。
命令ポインタは、コンテキスト・スイッチと呼ばれるものの間に、カーネルに変更されます。このスイッチ中、カーネルは基本的にスケジューラに次に何を要求しますか?スケジューラはそれをスレッドに関するすべての情報を含むtask_structに渡し、コンテキストスイッチの割り込みハンドラはそれに応じてCPUの値(ページテーブル、命令ポインタなど)を設定し、そのコードCPUは単にそこから実行を開始するだけです。 Linuxでの使用
あなたは本質的なことを言うことを意味する.. 1つのスレッドは1つのフルタイムスライスを取得し、プロセスはallotedとなった?プロセス内でスレッド間でタイムスライスを分割する必要はありませんか? – SpinLocked
@SpinLockedカーネルはプロセスやスレッド(実際には区別がない)に気を付けません。優先度(スレッドを与える時間)とスケジューリング可能かどうか(I/Oか何かを待っているかどうか)。おかげさまで、 –
ありがとうございました。私はおそらく質問を誤解している。謝罪。私はスレッドレベルのスケジューリング作業を知っているつもりです。これは、スレッドマッピングへのプレーンタイムスライスか、プロセスレベルでのインテリジェンスがあり、各スレッドに時間のシェアを与えます。 – SpinLocked
ネイティブNPTL(ネイティブPOSIXスレッドライブラリ)は、カーネル内の「そのためのリソースを共有するプロセスとスレッドのように見える」ためにpthreadsをマッピングします。このようにして、カーネルのスケジューラはpthreadのスケジューリングを直接制御します。
「pthreadのスイッチが」プロセス・スイッチを処理(カーネルで)正確に同じコードによって行われます。簡略化して、これは、 "前のプロセス状態を保存する;次のプロセスが別の仮想アドレス空間を使用して仮想アドレス空間を切り替え、次のプロセス状態をロードする" (ここで、「プロセス状態」にはプロセス/スレッドのための命令ポインタが含まれる)。
ありがとうございました。あなたはさらなる情報のために何らかの情報源を挙げることができますか? – SpinLocked
これは、Linuxが常にスレッドをどのように行っているかです。私はいくつかの参考文献を見つけた。 1)http://www.icir.org/gregor/tools/pthread-scheduling.htmlで「5 Linux」までスクロールダウンします。 2)http://linux.die.net/man/7/pthreadsにある "Linux Implementations of POSIX Threads"までスクロールダウンします。 – Brendan
- 1. Windowsでアプリケーションのタイムスライスを最大化する方法はありますか?
- 2. getlineを分割する方法はありますか?
- 3. InputStreamを分割する方法はありますか?
- 4. コンボボックスのアイテムを視覚的に分割する方法はありますか?
- 5. HTML内の<option>タグ内の値を分割する方法はありますか?
- 6. テキストファイルに複数回線を分割する方法はありますか?
- 7. Pythonプロセスの出力をRustプロセスにリダイレクトする方法はありますか?
- 8. Android上のJavaプロセスのサンドボックス部分には方法がありますか?
- 9. VB.Netアプリケーションを分割するかどうかを決定する方法と、分割する方法を決定する方法はありますか?
- 10. オブジェクト内の文字列を分割し、配列にプッシュする方法はありますか? Javascriptを
- 11. フラグ引数を持つメソッドを分割する方法はありますか?
- 12. メディアクエリを使用してテーブルを分割する方法はありますか?
- 13. VB.NETでテキストを分割する簡単な方法はありますか?
- 14. Javascriptで多くの値を分割して割り当てるより良い方法はありますか?
- 15. ブロック内に割当ててブレークする方法はありますか?
- 16. shared_ptrに割り当てる方法はありますか?
- 17. oracle10gの複数の列にある列のデータを分割する方法はありますか?
- 18. プロセス名でプロセスidを取得する方法はありますか?
- 19. 大きなデータをタイムスライスに分割して別のjsonファイルに保存する
- 20. Linuxプロセスのデータセグメントを壊す方法はありますか?
- 21. あるプロセスのstdoutを別のプロセスのstdinにリダイレクトする方法はありますか?
- 22. タイマー割り込みを待機プロセスにする方法は?
- 23. Javaプロセスに割り込みキーシーケンスを送信する方法は?
- 24. イーサネットパッケージを1ピースあたり32ビットに分割する方法
- 25. PHPの別のプロセスで何かを5分ごとに出力する方法はありますか?
- 26. データセットの特定の実行タイムスライスを一時停止する方法はありますか?
- 27. Rでボックスプロットを分割または分割する方法は?
- 28. カーネル。 CPUタイムスライスを持つプロセス名とPIDを取得する方法
- 29. Elm内で反応成分を使用する方法はありますか?
- 30. アプリ内でFabric分散アプリを更新する方法はありますか?
スレッドとプロセスの間にはスケジューリング差はありませんが、あなたはそれがために全体のコントロール群を充電します。すなわち、「会計上の実体」として、スケジューラによって処理されるそれぞれの対照群にグループのスレッド/プロセス、することができますCPU時間ですので、グループ化する場合は(スレッドをたくさん作成する)maven呼び出しでは、残りの制御グループはCPU時間をより公平に分担します。 – ninjalj