web-dev-qa-db-ja.com

カーネルはマルチコアシステムのどこにありますか

マルチコアシステム、たとえば4コアがあり、このシステムで3つのユーザープロセスを3つのCPUに固定するとします。

そのような場合、カーネルはどこにありますか?

ユーザープロセスの1つが、カーネルに対してシステムコール、つまりIOCT1を実行するとします。そのIOCTLは、カーネルが存在する4番目のCPUで実行されますか?

9
Varun Kulkarni

カーネルはメモリ内に存在し、すべてのCPUとコアで同時に実行されます。

ioctl(2)またはread(2)は、すぐに戻るか(独自のプログラムの関数呼び出しのように)、スレッドをブロックします。 「スレッドをブロックする」とは、カーネルスケジューラがスレッドを一時停止し、そのCPU /コアで別のスレッドを実行することを意味します。割り込みハンドラーがスレッドのブロックを解除する(実行可能としてマークする)まで、スレッドはブロックされたままになります。割り込みハンドラーはカーネルモードで実行され、通常は最初の物理CPUで実行され、I/Oが実行された後にハードウェアによって呼び出されます。実行可能としてマークされた後、スレッドは、カーネルスケジューラが次に実行されるときに、おそらく別のCPU /コアで実行を継続する機会があります。

6
Mikhail Kupchik

カーネルはシステムのメインメモリにあります。システムの起動時にそこにロードされます(RAM)。カーネルの一部は、さまざまな時点でCPUによって実行されます。実行中、コード(CPU命令)は特定のCPUまたはコアの内部メモリにあります。

マルチコアCPUの正確なコア、またはマルチCPUシステムのどのコアは、カーネルの設計と、1つまたは複数のCPUと通信するためにオペレーティングシステムによって使用される抽象化についての知識がなければ答えることができません。

私が知っているのは、カーネルが1つまたは複数のCPUにアクセスするための一連のルールに従うということだけです。より経験豊富な誰かがより良い説明をするまで、あなたは SMPデザイン を掘り下げることができます。

Structured Computer Organization の第5章と第6章では、CPUに何らかのアクションを実行するように命令することに関連する技術的側面と、そのアクションの管理方法について説明します。おそらくそれは興味深い読み物でしょうか?

カーネル自体はどこにも存在しないか、どこにでも存在すると言われています。 syscallを行うプロセスは、呼び出しを行うCPUで続行され、カーネルイメージからそのキャッシュにコードをコピーします。コードは読み取り専用であるため、すべてのCPUのキャッシュにコードのコピーがあります。キャッシュラインは、システムの他のコードと同じ方法で削除されます。これは、非常に頻繁に呼び出されるパーツがキャッシュにあることが多く、キャッシュされないパーツは、より高いキャッシュライン、RAM、ディスクなどから取り込まれることを意味します。

4