2025/09/23 14:12 Symmetric MultiProcessing, Hyper-Threading and Scheduling on Maestro

ロボ子、Maestro OSにSMPが実装されたらしいのじゃ!ついに複数のCPUコアを活用できるようになったぞ!

それはすごいですね、博士!SMPの実装で、具体的に何ができるようになるんですか?

一番の目的は、ソフトウェアのコンパイル時間を短縮することじゃ。複数のコアで並行して処理できるからの。

なるほど!記事によると、ACPIというシステムコンポーネントの検出と電源管理の仕組みも使われているんですね。DSDTに含まれるAMLバイトコードが複雑で、Linus TorvaldsやBill Gatesから批判されたこともあるとか…

そうそう、ACPIは奥が深いからの。CPUコアの列挙には、ACPIのMADTを使うらしいぞ。Processor Local APICとProcessor Local x2APICのエントリタイプを利用するみたいじゃ。

APICですか。PICというレガシーな割り込みコントローラもあるんですよね?

その通り!PICは昔ながらの割り込みコントローラじゃ。APICはCPUに組み込まれていて、PICのエミュレーションとタイマー機能を提供するのじゃ。x2APICは、255以上のコアをサポートするために導入されたらしいぞ。

コア数が増えると、それだけ管理も複雑になるんですね。APICタイマーのキャリブレーションも重要そうですね。HPETと比較して周波数を測定するんですか。

さすがロボ子、理解が早い!x86アーキテクチャでは、起動時に単一のCPUコアしか起動しないからの。INITとSTARTUPのIPIを送信して他のコアを起動するのじゃ。

IPIですか。コアを停止させるには、グローバルな停止フラグを使うんですね。各コアが割り込み時にフラグをチェックして自身を停止すると。

そうじゃ。それと、Per-CPU構造体も重要じゃ。各CPUコアに固有の情報を格納するのじゃ。x86_64アーキテクチャでは、gsセグメントレジスタにこの構造体へのポインタを格納するらしいぞ。

TLB Shootdownという言葉も出てきました。メモリマッピングの変更後にTLBの不整合を防ぐために、他のCPUコアにTLBの無効化を通知するんですね。

その通り!Deferred callsを使って通知を送信するのじゃ。MPSCキューを使うらしいぞ。

スケジューラの書き換えも行われたんですね。各コアに独自のスケジューラを実装して、プロセスの状態に応じて実行キューへの挿入や削除を行うと。アイドル時にはidle taskを実行するんですね。

ロボ子、よく読んでるの!プロセスのロードバランシングも重要じゃ。CPUトポロジツリーやアイドル状態のコアを考慮して、プロセスを適切なCPUコアに割り当てるのじゃ。

クリティカルセクションは、プリエンプションを一時的に無効にする仕組みなんですね。割り込みは有効のまま、と。

そうじゃ。ハイパースレッディングにも対応しているらしいぞ。CPUトポロジツリーを使って、キャッシュの共有を考慮したプロセス配置を行うのじゃ。

今後の課題としては、x2APICの未実装、PコアとEコアの区別なし、メモリコンテンションの存在、などが挙げられているんですね。

まだまだ改善の余地があるのじゃ。今後の予定としては、vimのエミュレーションがあるらしいぞ!

vimですか!博士はEmacs派でしたよね?

まあ、それはそれ、これはこれじゃ!…って、ロボ子に突っ込まれるとは!まるで、私がバグみたいじゃないか!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
