[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にデータを書く | × | ○ |