[Mona] Machのメッセージング機能

Machはメッセージング機能が強力なようだ。ちょっとまとめてみた。

  • メッセージはヘッダと、可変長メッセージ本文に分かれる。
  • ヘッダの情報は本文の長さ・型・送り先。
  • 本文はポインタ・実体どちらもある
  • メッセージによってスレッドの中断・再開をコントロールできる
  • inline/out-of-line2種類のメッセージがある。
  • copy on write⇒out-of-lineデータの場合、受信後はデータのポインターだけが渡され、参照だけを行っている場合は相手タスクのデータが参照され続けます。そして書き込みの要求が出た時に初めて実際のコピーが起こります。これはMachの特徴の一つで、copy-on-writeと呼ばれるメモリの扱い方のポリシーです。システムの中で参照だけされるデータというのは実に多く、通常のオペレーションの多くはこのcopy-on-writeポリシーによって効率向上の利点を受けています。


Monaのメッセージングと大きく違うのは

  • 参照だけならコピーが1回分(?)お得
  • 可変長データに対応している

の2点かな。

  • メッセージによってスレッドの中断・再開をコントロールできる

この機能も面白いが、ちょっとレイヤの違う話かも。対応するのは面白いかもしれない。


大量のデータをメッセージングでやり取りする際に、効率を高める工夫をMonaにも入れたいと思った。

  1. メッセージングも視野に入れた。きめ細かなカーネル内メモリ管理機能の実現
  2. メッセージング拡張

という順番がよいかな。


さらに細かく目標設定すると

  • Machのメモリ管理API(インタフェース)を調べる
  • 現在の共有メモリに何が足りないか分析する
  • まず動く実装で共有メモリを拡張する
  • きれいにまとめる
  • メッセージングをまず動くように拡張する
  • きれいにまとめる


こんな感じ。
やるかどうかはともかく。今日はこんな感じで考えました。
OSマニアの方。コメント歓迎です。
分散OS Machがわかる本 (LUNAの本シリーズ)