Go to main content
Oracle® Solaris 11.3 デバイスドライバの記述

印刷ビューの終了

更新: 2016 年 11 月
 
 

ディスク装置ドライバ

ディスク装置は、ブロックデバイスドライバの重要なクラスを表します。

ディスクの ioctl

Oracle Solaris ディスクドライバは、Oracle Solaris ディスクドライバに固有の ioctl コマンドの最小限のセットをサポートする必要があります。これらの入出力制御は、dkio(7I) のマニュアルページで指定されています。ディスク入出力制御は、デバイスドライバとの間でディスク情報を転送します。Oracle Solaris ディスク装置は、format(1M)newfs(1M) などのディスクユーティリティーコマンドでサポートされています。必須の Sun ディスク入出力制御は次のとおりです。

DKIOCINFO

ディスク制御装置を記述した情報を返します。

DKIOCGAPART

ディスクのパーティションマップを返します。

DKIOCSAPART

ディスクのパーティションマップを設定します。

DKIOCGGEOM

ディスクのジオメトリを返します。

DKIOCSGEOM

ディスクのジオメトリを設定します。

DKIOCGVTOC

ディスクのボリューム構成テーブルを返します。

DKIOCSVTOC

ディスクのボリューム構成テーブルを設定します。

ディスクパフォーマンス

Oracle Solaris DDI/DKI は、ファイルシステムのパフォーマンスを向上させるために入出力転送を最適化する機能を提供します。このメカニズムでは、ファイルシステムのディスクアクセスが最適化されるように入出力要求のリストが管理されます。入出力要求のキューへの登録の説明については、非同期データ転送 (ブロックドライバ)を参照してください。

diskhd 構造体は、入出力要求のリンクリストを管理するために使用されます。

struct diskhd {
    long     b_flags;         /* not used, needed for consistency*/
    struct   buf *b_forw,     *b_back;     /* queue of unit queues */
    struct   buf *av_forw,    *av_back;    /* queue of bufs for this unit */
    long     b_bcount;        /* active flag */
};

diskhd データ構造体には、ドライバが操作できる 2 つの buf ポインタがあります。av_forw ポインタは、最初のアクティブな入出力要求を指しています。2 番目のポインタである av_back は、リスト上の最後のアクティブな要求を指しています。

disksort(9F) には、この構造体へのポインタが、処理されている現在の buf 構造体へのポインタとともに引数として渡されます。disksort() ルーチンは、ディスクのシークを最適化するために buf 要求をソートします。このルーチンは次に、buf ポインタを diskhd リストに挿入します。disksort() プログラムは、buf 構造体の b_resid 内にある値をソートキーとして使用します。ドライバは、この値の設定を担当します。ほとんどの Sun ディスクドライバは、シリンダグループをソートキーとして使用します。このアプローチによって、ファイルシステムの先読みアクセスが最適化されます。

diskhd リストにデータが追加されたら、デバイスはそのデータを転送する必要があります。デバイスが要求の処理によってビジー状態でない場合、xxstart() ルーチンは最初の buf 構造体を diskhd リストから取得し、転送を開始します。

デバイスがビジー状態の場合、ドライバは xxstrategy() エントリポイントから復帰します。ハードウェアでのデータ転送が完了すると、割り込みが生成されます。次に、デバイスに対する処理を行うために、ドライバの割り込みルーチンが呼び出されます。割り込みに対する処理を行ったあと、ドライバは、diskhd リスト内の次の buf 構造体を処理するために start() ルーチンを呼び出すことができます。