[Mona] Machのメッセージング機能
Machはメッセージング機能が強力なようだ。ちょっとまとめてみた。
- メッセージはヘッダと、可変長メッセージ本文に分かれる。
- ヘッダの情報は本文の長さ・型・送り先。
- 本文はポインタ・実体どちらもある
- メッセージによってスレッドの中断・再開をコントロールできる
- inline/out-of-line2種類のメッセージがある。
- copy on write⇒out-of-lineデータの場合、受信後はデータのポインターだけが渡され、参照だけを行っている場合は相手タスクのデータが参照され続けます。そして書き込みの要求が出た時に初めて実際のコピーが起こります。これはMachの特徴の一つで、copy-on-writeと呼ばれるメモリの扱い方のポリシーです。システムの中で参照だけされるデータというのは実に多く、通常のオペレーションの多くはこのcopy-on-writeポリシーによって効率向上の利点を受けています。
Monaのメッセージングと大きく違うのは
- 参照だけならコピーが1回分(?)お得
- 可変長データに対応している
の2点かな。
- メッセージによってスレッドの中断・再開をコントロールできる
この機能も面白いが、ちょっとレイヤの違う話かも。対応するのは面白いかもしれない。
大量のデータをメッセージングでやり取りする際に、効率を高める工夫をMonaにも入れたいと思った。
- メッセージングも視野に入れた。きめ細かなカーネル内メモリ管理機能の実現
- メッセージング拡張
という順番がよいかな。
さらに細かく目標設定すると
- Machのメモリ管理API(インタフェース)を調べる
- 現在の共有メモリに何が足りないか分析する
- まず動く実装で共有メモリを拡張する
- きれいにまとめる
- メッセージングをまず動くように拡張する
- きれいにまとめる
こんな感じ。
やるかどうかはともかく。今日はこんな感じで考えました。
OSマニアの方。コメント歓迎です。
分散OS Machがわかる本 (LUNAの本シリーズ)