[Mona] Mach研究 VM系

とりあえず仮想メモリ系のAPIを調べました。これがメッセージングの基礎となっているようですね。
インタフェースもよく考えられていて、なるほど!と思うところがありました。
明日以降は、MemoryObject周りを研究します。
というか、Mach好きの人集まれ!

インターフェース名 機能 Monaに同様のI/Fがあるか? Monaに追加する
vm_allocate タスクのアドレス空間にVirtual Memoryをaddress, size指定で割り当てる。zerofill。指定されたアドレスが予約領域であるエラー。リニアアドレスがあまっていないエラーをきちんと返す ×
vm_behavior_set カーネルにそのメモリ領域のアクセスのパターンを知らせる。引数はタスク,address,size × ×
vm_copy 同一空間でdest to srcでaddress, size指定でコピーする。src,destが重なっていてもよい vm_read, vm_writeしている感じ ×
vm_deallocate タスク内の空間からアドレス、サイズ指定でdeallocateする。ほかのタスク内から参照されているものには影響がない。out-lineメッセージの消去に使われている ×
vm_inherit 親タスクのregionを、子タスクから同一参照・コピー参照できるかをセットする。引数はアドレス、サイズ。Monaカーネルにはタスクに親子関係がないので不必要? × ×
vm_machine_attribute vm領域の属性をset/getできる。マシン依存。pmapモジュール依存 × ×
vm_map memory objectをvmにマップする。MonaでいうところのSharedMemoryObject
vm_msync バッキングストアとVMの同期を取る。動機が取れていない場合というのはどういう場合?⇒00:08 (Yas0) 要はメモリが余ってるとスワップファイル(バッキングストア)にタスクのメモリイメージを書き出す必要がないので。00:09 (Yas0) まぁ、大体の場合そうですね>物理ディスク00:09 (higepon) なるほど。00:09 (higepon) それをsyncしたい場合ってのはどういう場合なんですかね?00:09 (Yas0) ん〜00:10 (Yas0) 物理メモリをこれから大量に確保する可能性があって00:10 (Yas0) その時になって急激な速度低下を起こされると困る場合とかかな ×
vm_protect 特定タスクのaddress,sizeにread/write/executeの属性をつける
vm_read 特定のタスクのvmを特定のタスクから読む。自分のアドレスに強制的に読み込んだり。カーネルに割り当てを任せることも出来る。 ×
vm_region vmの情報を返す ×
vm_remap vmをtask同士でコピー ×
vm_wire 特定範囲のvmに物理ページを割り当てて固定する。⇒フォルトの心配がなくなる ×
vm_write taskのvmにデータを書く ×