スポンサーリンク

PHYSIO(9) FreeBSD カーネル開発者マニュアル PHYSIO(9)

名称

physio − ロウデバイスの入出力の開始

書式

#include <sys/param.h>
#include <sys/systm.h>
#include <sys/bio.h>
#include <sys/buf.h>

int

physio(dev_t dev, struct uio *uio, int ioflag);

解説

physio() は通常、文字型デバイスの read() および write() ルーチンから呼び 出されるヘルパー関数で、ユーザプロセスのバッファへの入出力を開始させま す。呼び出しごとの最大のデータ転送量は dev->si_iosize_max によって決定さ れます。 physio() の呼び出しは入出力要求を strategy() 要求に変換し、その 処理のため新しい要求をドライバの strategy() ルーチンに渡します。

uio 構造体は通常ユーザ空間のアドレスを示すので、 physio() はこれらのペー ジをメモリ中にロックする必要があります。これは適切なページに対する vmapbuf() を呼び出すことで行われます。以前にエラー状態が検出された時を除 いて、 physio() は常にリターンする前に全ての要求された転送が完了するまで 待ちます。

引数の詳細を下記に示します。

       dev

デバイスを識別するために関連付けられたデバイス番号。

uio
ユーザプロセスから要求された転送全体の記述。現在は、 uio 構造体の uio_segflg フラグに UIO_USERSPACE 以外の値をセットして渡した場合 の結果は未定義です。

ioflag
physio
() を呼び出している read() または write() 関数からの ioflag 引数。

戻り値

成功すれば physio() は 0 を返します。 uio 構造体に示されているアドレス範 囲が要求したプロセスからアクセスできない場合には EFAULT を返します。 physio() はデバイスの strategy ルーチンを呼んだ結果として発生するあらゆる エラーを B_ERROR バッファフラグおよび b_error フィールドを調査して返しま す。デバイスが ‘‘end of file’’ の状態を示している時には、実際の転送サイズ は uio 構造体で要求しているサイズよりも小さくなる事に注意してください。

関連項目

read(2), write(2)

歴史

physio のマニュアルページは元々は NetBSD のもので、 FreeBSD に適応させる ために少しの変更があります。

physio の呼び出しは、より高い入出力およびページングのパフォーマンスのため に、完全に書き直されています。

FreeBSD 10.0 July 8, 2004 FreeBSD 10.0

スポンサーリンク