2017-02-10 12 views
0

私はunix/linuxシステムの基礎を勉強してきました。特に、現代のコンピュータシステムでどのようにタスクやプロセスのリストが扱われるかを研究してきました。Linuxプロセススケジューラ - 彼ら自身がCPUを消費しますか?

  • プロセスが設定量のために実行されます。

    私はカーネルが行い、信号(SIGXXX)がどのように扱われるかcontext switchingの標準説明と思われるものを与える多くの資源を見つけました が受信されたとき

  • カーネルは、実行中のメモリからプロセスをアンロードし、そのコンテキストに関するデータを他の場所のメモリに保存して、CPU時間を必要とする次のプロセスをロードします( )。
  • シグナル(SIGXXX)が プロセスを待っている場合、カーネルはプロセス で適切なハンドラを呼び出しようとします。存在しない場合、プロセスは再度ロードされません (死亡)。
  • 新しいプロセスがメモリにロードされ、実行されます。サイクル が、これはすべてのシングルコア、シングルスレッドのCPUで発生している場合、私は苦しんできたものが、ある

    (このような理解が間違っている場合は私に知らせてください)

を継続します、スケジューラを物理的に実行しているのは何ですか?私は本当にシンプルなものを紛失していますが、私はこのチキン・アンド・ザ・アイドルのような考え方にこだわっています。

さらに、複数のコア、スレッド、および多数のCPUリソースを使用できる最新のシステムでは、スケジューラはコアを単独で消費して実行しますか?

私は、さまざまなプロセススケジューラ、元のO(n)、2.6以降で導入された新しいO(1)、そして(私が思う?)で使用されているCFSスケジューラに関する多くの記事を読んだ今日はほとんどのLinuxです。彼らはすべてプロセスの優先順位付けとキューイング方法について話していますが、スケジューラが実際にどのようにすべてのタスクを実行するためにいつ、どのように実行されているかについて詳しくは説明していません。

スケジューラはCPU時間を共有していますか? 自身をと入れ替えるとCPUに何とか入りますか?もしそうなら、CPUはプロセスをいつ止めるべきかを知っていて、スケジューラを実行させてそのことを実行させますか?

答えて

2

これがすべてシングルコアのシングルスレッドCPU上で発生している場合、物理的にスケジューラを実行しているのは何ですか?

現在のスレッドが処理してシステムコールを発行しているので、カーネルの外にある必要があると思っています。重要なアイデアは、カーネルがCPUカーネルにクロック割り込みを登録したことです。デバイスごとに実装が異なりますが、CPUカーネル自体は、タイマ間隔が終了するかカーネル信号が発生するたびに登録されたinterrupt handler (aka ISR)を呼び出します。 ISRは実際にカーネルに与える割り込み関数へのメモリポインタです。割り込み機能がユーザ空間(すなわち現在動作中のスレッド)に戻る前に、スケジューラが呼び出される(details here

スケジューリングの頻度はclock speed of the cpuに依存する。

スケジューラは実行するためにコアを単独で消費しますか?

いいえ、スケジューラはすべてのコアで動作し、別のコアにスレッドをスケジュールする可能性もあります。

さらにいくつかの読書: - マルチコアプロセッサの場合、または複数のプロセッサ私の質問の

1

スケジューラはカーネルの一部であり、もちろんもちろん、CPUを消費します。最も単純なケースでは、タイマがCPUに接続されていると考えることができます。すべてのティックで、CPUは「中断」します。つまり、スケジューラが配置されているあらかじめ定義されたアドレスにジャンプします。スケジューラはいくつかのプロセス関連のデータをいくつかの内部構造に保存し、別のプロセスを選択し、そのデータをロードし、そのプロセスが実行していたアドレスにジャンプします。

これらのO(n)およびO(1)は、スケジューラの正確な時間複雑度であり、スケジューラが次にスケジュールするタスクをどれだけ決定する必要があるかを意味します。

+0

にパートを約最も単純なケースではありません。あなたは、CPUが特定のタスクに費やす時間と、割り込みが最大で発生し、CPUがスケジューラをロードするという、ハードコーディングされた制限が常にあると言っていますか? 12コアの場合、どのCPUがスケジューラをロードしますか?それを決めるのは何ですか? – Locane

+0

スケジューラはすべてのコアで実行する必要があり、1つのコアは別のコアのレジスタを変更できません。そしてそのハードコーディングされた限界はスケジューリングアルゴリズムに依存します。それらのうちのいくつかは各プロセスに最大のタイムスライスを与え、プロセスがCPU上で自発的に「放棄」しないと、その割り込みがコンテキスト切り替えを起こします –

関連する問題