メッセージング方針は正しいか?

復帰しました。休みボケ|‘∀‘)ノ

Monaマイクロカーネルというものを目指している。
マイクロカーネルについてはいろいろ議論があるので興味がある人はhttp://community.osdev.info/index.php?microkernelを見ると良いだろう。


そんなこんなでMonaは実験的に、OSがユーザーアプリケーションに提供するサービスの多くをサーバという独立したユーザープロセスたちが提供している。
たとえばマウスサーバ・キーボードサーバ・GUIサーバ・プロセスサーバなどである。
各種サーバは独立したプロセス空間で実行されるので、各種サーバ間の連携等はすべてメッセージングを介して行われる。
メッセージングの仕組みはMonaカーネルによってシステムコールとして提供されている。


メッセージはsendによって相手先のメッセージボックスに格納され、receiveによって受信される。
メッセージ受信待ちしているプロセスは実行がブロックされ、メッセージ到着しだい優先度が上がり実行対象となる。
ここで問題にしたいのは、メッセージがsendされreceiveされるまでにプロセス空間の切り替えが発生するという点だ。



つい先日、某CPUとかに詳しいと思われる人に「インテル系CPU(AMDはちがう)はCR3レジスタの切り替えのコストが半端じゃないので、プロセス空間切り替え(=CR3の切り替え)を伴うメッセージングを
多用すると非常にパフォーマンスが悪い」と脅された。
キーボードやマウス等の人による入力程度で発生するメッセージング程度であれば問題ないが、ドライバや中枢サーバー間でそれらが頻発するようであればまずいとの事。
Monaの仕組みを根底から覆すような事実であればまずいので、このへんのコストの計測しなければいけないと思ってきた。
でも気づいた、うちにはAMDのCPUを積んだマシンしかないよ・・・orz