1

Linuxカーネルはマルチスレッドであり、各コアで複数のスレッドが同時に実行される可能性があることを読みました。単一の OS がすべてのプロセッサ/コアを管理する SMP (対称型マルチプロセッシング) 環境では、マルチスレッドはどのように実装されますか?

カーネル スレッドが生成され、それぞれがコアの管理専用であるということです。もしそうなら、これらのカーネルスレッドはいつ作成されますか? ブートストラップが完了し、アプリケーション プロセッサがブートストラップ プロセッサによって有効にされた直後の kern_init() での起動中ですか。

各コアには、すべてのカーネル スレッドによって共有される共通プールからのタスクを管理する独自のスケジューラ (コアのカーネル スレッドによって実装される) がありますか?

別のカーネルスレッドが関心を持つ可能性のあるイベントを通知する必要がある場合、異なるコアに存在するカーネルスレッド間の (ダイレクト) メッセージングは​​どのように行われますか?

また、システムタイマー割り込みごとに大きなカーネルロックを取得し、各コアで何を実行するかを決定/スケジュールする1つのカーネルスケジューラを持つ特定の選択されたコアがあるかどうかも考えました。

したがって、実装の詳細を明確にしていただければ幸いです。よろしくお願いします。

4

1 に答える 1