2012-02-22 10 views
5

Linuxカーネルはユーザーアドレス空間のpthreadsを認識していますか(それは私が思うものではありませんが、私は情報を見つけられませんでした)。スレッドの切り替え時に命令ポインタがどのように変化するのですか?プロセス内のpthreadsにタイムスライスを分割する方法はありますか?

+0

スレッドとプロセスの間にはスケジューリング差はありませんが、あなたはそれがために全体のコントロール群を充電します。すなわち、「会計上の実体」として、スケジューラによって処理されるそれぞれの対照群にグループのスレッド/プロセス、することができますCPU時間ですので、グループ化する場合は(スレッドをたくさん作成する)maven呼び出しでは、残りの制御グループはCPU時間をより公平に分担します。 – ninjalj

答えて

1

1)カーネルはユーザレベルのスレッドについて知らない。しかし、NPTLは、ユーザレベル

2)これは本当に幅広い問題ではありません。あなたはOSの本を見るべきです。それは、その問題とコンテキストスイッチに関係するすべてのものに深く入ります。

+0

ねえ、ありがとう!! AFAIK、OSの書籍は、プロセスコンテキストの切り替えをカバーしています。しかし、不思議に思っていた、どのようにスレッドの中でタイムスライスの管理が行われます..カーネルがスレッドを認識していない場合、それは部分的に、スケジューラの起動のようなものですか?どのようにプロセスがない場合、スレッドを管理し、予約することができます。私はこれ以上ユーザーレベルのプログラミングに関連していると感じています。そこで、ここで質問しました。 – SpinLocked

+0

Linuxがこれらのことをどのようにしているか知りたい場合は、Robert LoveのLinuxカーネル開発を参照してください。それは多くのことをカバーしていますが、かなりアクセス可能です。楽しい。 – Avi

2

まあLinuxカーネルは、ユーザスレッド(pthreadのはユーザ空間で行い、しかもそれだけでスケジュールするかを知る必要がある以外、カーネルは実際にそれらを気にしない)を知っていません。

命令ポインタは、コンテキスト・スイッチと呼ばれるものの間に、カーネルに変更されます。このスイッチ中、カーネルは基本的にスケジューラに次に何を要求しますか?スケジューラはそれをスレッドに関するすべての情報を含むtask_structに渡し、コンテキストスイッチの割り込みハンドラはそれに応じてCPUの値(ページテーブル、命令ポインタなど)を設定し、そのコードCPUは単にそこから実行を開始するだけです。 Linuxでの使用

+0

あなたは本質的なことを言うことを意味する.. 1つのスレッドは1つのフルタイムスライスを取得し、プロセスはallotedとなった?プロセス内でスレッド間でタイムスライスを分割する必要はありませんか? – SpinLocked

+0

@SpinLockedカーネルはプロセスやスレッド(実際には区別がない)に気を付けません。優先度(スレッドを与える時間)とスケジューリング可能かどうか(I/Oか何かを待っているかどうか)。おかげさまで、 –

+0

ありがとうございました。私はおそらく質問を誤解している。謝罪。私はスレッドレベルのスケジューリング作業を知っているつもりです。これは、スレッドマッピングへのプレーンタイムスライスか、プロセスレベルでのインテリジェンスがあり、各スレッドに時間のシェアを与えます。 – SpinLocked

5

ネイティブNPTL(ネイティブPOSIXスレッドライブラリ)は、カーネル内の「そのためのリソースを共有するプロセスとスレッドのように見える」ためにpthreadsをマッピングします。このようにして、カーネルのスケジューラはpthreadのスケジューリングを直接制御します。

「pthreadのスイッチが」プロセス・スイッチを処理(カーネルで)正確に同じコードによって行われます。簡略化して、これは、 "前のプロセス状態を保存する;次のプロセスが別の仮想アドレス空間を使用して仮想アドレス空間を切り替え、次のプロセス状態をロードする" (ここで、「プロセス状態」にはプロセス/スレッドのための命令ポインタが含まれる)。

+0

ありがとうございました。あなたはさらなる情報のために何らかの情報源を挙げることができますか? – SpinLocked

+0

これは、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

関連する問題