tail head cat sleep
QR code linking to this page

manページ  — VOP_GETPAGES

名称

VOP_GETPAGES, VOP_PUTPAGES – ファイルから VM ページへの読み込みまたは書き込み

内容

書式

#include <sys/param.h>
#include <sys/vnode.h>
#include <vm/vm.h>

int
VOP_GETPAGES(struct vnode *vp, vm_page_t *m, int count, int reqpage, vm_ooffset_t offset);

int
VOP_PUTPAGES(struct vnode *vp, vm_page_t *m, int count, int sync, int *rtvals, vm_ooffset_t offset);

解説

VOP_GETPAGES() メソッドは、通常のファイルが背後にある仮想メモリのページの読み込み のために、呼び出されます。 他の隣接したページの背後に同じファイルの隣接した領域がある場合には、 VOP_GETPAGES() は同様にそれらのページを読み込ませるために要求されますが、そうすることが 必須なわけではありません。 VOP_PUTPAGES() メソッドは反対のことを行います。 すなわち、仮想メモリの隣接したダーティなページを書き出させます。

入る時に、vnode のロックは保持されますが、ページキューと VM オブジェクトの ロックはどちらも保持されません。 両方のメソッドは、成功して戻る時とエラーで戻る時と両方とも、 そのままの状態で戻ります。

引数は以下の通りです。
vp
  アクセスするファイル。
m
  読み込まれるまたは書き込まれるべきファイルの連続した領域を表現する 連続したページの配列の最初の要素へのポインタです。
count
  その配列の中のページ数です。
sync
  書き込みが同期されるべき場合には VM_PAGER_PUT_SYNC です。
rtvals
  VOP_PUTPAGES() によって書き込まれたそれぞれのページの状態を示している VM システムの 結果コードの配列です。
reqpage
  ページ配列の中の要求されたページのインデックスです。 すなわち、このメソッドの実装が取り扱わなければならない、1 ページです。
offset
  ファイルの中のそのマップされたページが始まる場所へのオフセットです。

VOP_PUTPAGES() メソッドの状態は、配列 rtvals[] の中に、個々のページごとに返されます。 起こり得る状態値は以下の通りです。
VM_PAGER_OK そのページは成功して書き込まれました。 実装はそのページがクリーンであることを記録するために vm_pager_undirty(9) を呼び出さなければなりません。
VM_PAGER_PEND そのページは非同期に書き込まれるようにスケジュールされました。 書き込みが完了した時には、完了コールバックはビジーフラグをクリアし、 このページをウェイトしている他のスレッドを起こすために、 vm_object_pip_wakeup(9) および vm_page_io_finish(9) を呼び出すべきです。 さらに vm_page_undirty(9) [英語] を呼び出します。
VM_PAGER_BAD このページは完全に背後にあるファイルの終端を越えていました。 その vnode のファイルシステムが正しく実装されている場合には、 この状態は起こり得るべきではありません。
VM_PAGER_ERROR
  下位の保存メディアまたはプロトコルのエラーのため、 このページは書き込まれることが出来ませんでした。
VM_PAGER_FAIL VM_PAGER_ERROR と同様に取り扱われました。 VM_PAGER_ERROR
VM_PAGER_AGAIN
  そのページはこの要求によって取り扱われませんでした。

戻り値

成功して m[reqpage] を読み込んだ場合には VOP_GETPAGES() VM_PAGER_OK を返し、そうでない場合には VM_PAGER_ERROR を返します。 慣習で、 VOP_PUTPAGES() の戻り値は rtvals[0] です。

関連項目

vm_object_pip_wakeup(9), vm_page_free(9) [英語], vm_page_io_finish(9), vm_page_undirty(9) [英語], vm_page_wakeup(9), vnode(9)

作者

このマニュアルページは Doug Rabson が書き、その後実質上 Garrett Wollman が書き直しました。

VOP_GETPAGES (9) September 27, 2003

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

Not only is UNIX dead, it's starting to smell really bad.
— Rob Pike