組み込み Linux について学んでいます。以下の質問に対する適切な答えが見つからないようです。
私の理解では、ユーザー空間アプリケーションが実行されているとき、たとえばIOを実行したい場合、システムコールが行われ、SW割り込みが発生し、通常、MCUが非特権モードから特権モードに切り替わり、カーネルがアプリケーションに代わって IO を実行します。
ハードウェア割り込みが発生したときの類似性。これにより、モードが再び切り替わり、カーネル内で割り込みハンドラーが実行されると思います。
よくわからないのは、カーネル コードが CPU を制御できるのはこのときだけですか?
たとえば、コアが 1 つしかない場合、ユーザー アプリケーション コードが実行されている場合、割り込みが発生したかどうかに関係なく、カーネルが時々 CPU を制御して物事をチェックするべきではありません。おそらく、これを可能にする定期的なタイマー割り込みがありますか?
また、複数のコアがある場合、ユーザー アプリケーションが別のコアで実行されている間に、カーネルが常に 1 つのコアで実行されている可能性はありますか?