私はunix/linuxシステムの基礎を勉強してきました。特に、現代のコンピュータシステムでどのようにタスクやプロセスのリストが扱われるかを研究してきました。Linuxプロセススケジューラ - 彼ら自身がCPUを消費しますか?
- プロセスが設定量のために実行されます。
私はカーネルが行い、信号(SIGXXX)がどのように扱われるかcontext switchingの標準説明と思われるものを与える多くの資源を見つけました が受信されたとき
- カーネルは、実行中のメモリからプロセスをアンロードし、そのコンテキストに関するデータを他の場所のメモリに保存して、CPU時間を必要とする次のプロセスをロードします( )。
- シグナル(SIGXXX)が プロセスを待っている場合、カーネルはプロセス で適切なハンドラを呼び出しようとします。存在しない場合、プロセスは再度ロードされません (死亡)。
- 新しいプロセスがメモリにロードされ、実行されます。サイクル が、これはすべてのシングルコア、シングルスレッドのCPUで発生している場合、私は苦しんできたものが、ある
(このような理解が間違っている場合は私に知らせてください)
を継続します、スケジューラを物理的に実行しているのは何ですか?私は本当にシンプルなものを紛失していますが、私はこのチキン・アンド・ザ・アイドルのような考え方にこだわっています。
さらに、複数のコア、スレッド、および多数のCPUリソースを使用できる最新のシステムでは、スケジューラはコアを単独で消費して実行しますか?
私は、さまざまなプロセススケジューラ、元のO(n)、2.6以降で導入された新しいO(1)、そして(私が思う?)で使用されているCFSスケジューラに関する多くの記事を読んだ今日はほとんどのLinuxです。彼らはすべてプロセスの優先順位付けとキューイング方法について話していますが、スケジューラが実際にどのようにすべてのタスクを実行するためにいつ、どのように実行されているかについて詳しくは説明していません。
スケジューラはCPU時間を共有していますか? 自身をと入れ替えるとCPUに何とか入りますか?もしそうなら、CPUはプロセスをいつ止めるべきかを知っていて、スケジューラを実行させてそのことを実行させますか?
にパートを約最も単純なケースではありません。あなたは、CPUが特定のタスクに費やす時間と、割り込みが最大で発生し、CPUがスケジューラをロードするという、ハードコーディングされた制限が常にあると言っていますか? 12コアの場合、どのCPUがスケジューラをロードしますか?それを決めるのは何ですか? – Locane
スケジューラはすべてのコアで実行する必要があり、1つのコアは別のコアのレジスタを変更できません。そしてそのハードコーディングされた限界はスケジューリングアルゴリズムに依存します。それらのうちのいくつかは各プロセスに最大のタイムスライスを与え、プロセスがCPU上で自発的に「放棄」しないと、その割り込みがコンテキスト切り替えを起こします –