NetBSD ドキュメンテーション: UVM、新しい仮想メモリーシステム
- なぜ伝統的な vfork() を実装したのか
- Charles D. Cranor の論文、“UVM の設計と実装” (270 ページ、gzip された PostScript, pdf)
- UVM 仮想メモリーシステム - Charles D. Cranor と Gurudatta M. Parulkar の論文
UVM FAQ
- UVMとは何ですか?
- 誰がUVMを書いたのですか?
- UVM はメモリー不足をどのようにあつかうか?
- どのポートが UVM を使っているのですか?
- UVM の U って何ですか?
- 私のマシンの仮想メモリーのサイズはいくらですか?
- ``top down'' メモリー割り当てって何ですか?
- どのポートが ``top down'' メモリー割り当てを使っているのですか?
UVM FAQ
UVMとは何ですか? (トップ)
UVM は NetBSD の仮想メモリーシステムの完全な書き換えで、 その性能はMach VM システムよりも遥かに優れていることが実証されました。 UVM はまたページ貸付けのような進んだ機能を提供し、これは NetBSD のための統合化バッファー・ページキャッシュの開発に用いられています。
誰がUVMを書いたのですか? (トップ)
Chuck Cranor が UVM を設計して実装しました。 Matthew Green は統合化作業を担当し、swap サブシステムを書きました。 Chuck Silvers は匿名メモリーオブジェクトページャー(これにより共有メモリー がサポートされます)を書きました。他にもたくさんの開発者がそれぞれのポート に関わる部分を書き直しました。 Andrew Brown は UVM に変更を加え、 top downメモリー管理を 可能にしました。
UVM はメモリー不足をどのようにあつかうか? (トップ)
UVM は、遅延割り当て(lazy allocation)をおこないます。この事は、プログラム が仮想メモリーの過剰割り当てが可能である事を意味します。UVM が、完全に VM が不足している状況と、遅延割り当てされたメモリーの断片へのアクセスを 検知した時、そのプロセスは kill され、システムはそのまま動作し続けます。 ページングシステムで使用するために予約されたわずかなバッファーが存在します。 これにより、フリーメモリーが存在しない時に pagedaemon が動作することが できます。Chuck Silvers が、これに関するほとんどの作業をおこないました。
どのポートが UVM を使っているのですか? (トップ)
UVM は 1.3.X のディストリビューションでは使えませんが、 1.4 以降では全てのポートで使われるようになります。
UVM の U って何ですか? (トップ)
UVMは Chuck Cranor が作業していた "U" の文字 ("universal" でした)で始まる別のプロジェクトの一部分でした。 しかし、そのプロジェクトはただの UVM に生まれ変わりました。 ですから、"U"はもはや他の何かを意味するものではありません: "UVM"とは 単に"vm"とは異なった(しかしよく似た)名前です。
私のマシンの仮想メモリーのサイズはいくらですか? (トップ)
UVM では、仮想メモリーのサイズは、物理メモリー(カーネルのオーバーヘッド をひいた)とすべてのスワップパーティションの合計と等しくなります。つまり、 物理メモリーはページングデバイスによる裏打ちを持つ必要はありません。
``top down'' メモリー割り当てって何ですか? (トップ)
これは、特にアドレスを指定しない mmap(2) されたメモリー割り当てを、 中間から上方にではなく、スタック直下から割り当て始め、下方へ向かって (top down) 割り当ててゆくように再編するものです。 こうすることで、ヒープの成長分用に確保される領域と、 mmap(2) されたメモリー割り当て用に確保される領域が統合されます。 つまり、ヒープが従来より大きく成長するか、または、プロセスが従来より多数 もしくは大きなオブジェクトを mmap することが可能になったということです。 カーネルは依然として、内部のメモリー割り当てに、従来の ``bottom up'' な仕組みを使うことができます。
どのポートが ``top down'' メモリー割り当てを使っているのですか? (トップ)
top down メモリー割り当ての仕組みは、現在、 i386 ポートと PowerPC のポート群でカーネルオプションとして提供されています: bebox、 macppc、 mvmeppc、 ofppc、 pmppc、 prep と sandpoint です。 いずれ、ほとんどのポートは、無条件に top down を使うよう 移行することになるものと思われます。 さらなる情報は、 options(4) マニュアルページを参照してください。