7

すべての本が言うように、タスク/プロセス間の切り替えは、同じプロセス/タスクのスレッド間の切り替えよりもコストがかかります。その場合、スレッド対応 OS のスケジューラは、同じプロセス/タスクのスレッドが互いに隣り合って (グループ化され) 実行され、他のプロセス/タスクのスレッドとインターリーブされないように、スレッドをスケジュールする必要があります。

私は OS に関する本を読んでいるので、すべての本は、スレッドの切り替えはプロセスの切り替えよりも安価であると述べているだけです。以上です。異なるタスクのスレッド間の切り替えを回避するという問題をスケジューラがどのように正確に解決しているかを示す本はありません。そのような問題が存在しないか、すべての読者にとって些細なことであるかのように。

問題に対する私の理解は正しくありませんか? または、何か不足していますか?「スケジューリング」の章のすべてのOSブックで、パフォーマンス低下の可能性に関するこのような大きなトピックが取り上げられていないのはなぜですか? 私は間違った本を読んでいますか?

4

1 に答える 1

1

In my opinion this would be a dangerous optimization, because if the scheduler favored threads based on whether or not the process memory pages are already loaded two things would happen:

  1. Newer processes would be starved.
  2. It would allow a process to keep spawning threads in order to stay on the CPU.

The scheduler's main priorities are:

  1. I/O responsiveness - i.e. I/O bound threads preempt CPU-bound threads.
  2. Fairness - try to ensure that starvation is limited.
  3. Low latency - make sure each process can finish in a reasonable amount of time.

It's pretty easy to see that these 3 conditions conflict with the mentioned optimization.

于 2012-06-01T10:40:33.200 に答える