第3回 仕様と実際の処理を考える(後編)



この文章は、OS-9000/80386(OS-9/x86)およびOS-9/PowerPCに対応しています。



前回「後で考える」としたGetstatとSetstatについて考えます。

Getstat

Getstatはデバイスからいろいろなステータス情報を取得するための機能をサポートします。デバイスに密着した機能は勿論デバイスドライバでサポートしなければなりませんが、デバイスに依存しない特定のオプションはファイルマネージャでサポートします。
ユーザ独自のファイルマネージャがサポートをした方が好ましいと思われる機能を、標準のファイルマネージャ(RBF、SCF、SBFなど)でサポートしている機能を基に考えると、以下のようになります。

ニモニック機能概要
SS_DEVNAMEデバイス名を取得する。
SS_PATHOPTパスディスクリプタオプションを取得する。
SS_LUOPT論理ユニットオプションを取得する。
論理ユニットをサポートしない場合は不要。
SS_DEVOPTデバイスオプションを取得する。
SS_READYデータレディステータスを取得する。
SS_EOFエンドオブファイルステータスを取得する。
SS_COPYPDパスディスクリプタのコピーを取得する。
SS_FMSTATファイルマネージャのスタティックストレージのコピーを取得する。
デバッグの為に有った方が良い。
SS_DRSTATデバイスドライバのスタティックストレージのコピーを取得する。
デバッグの為に有った方が良い。

今回作成する超低機能ファイルマネージャは、なるべく簡単になるように論理ユニットをサポートしない事にします。従ってSS_LUOPTはサポートしません。また、データレディステータスやエンドオブファイルについては、デバイスドライバが管理する事にし、ファイルマネージャではサポートしない事にします。
結果、残った次の機能をサポートする事にします。
  • SS_DEVNAME
  • SS_PATHOPT
  • SS_DEVOPT
  • SS_COPYPD
  • SS_FMSTAT(今回作成するファイルマネージャ固有の機能)
  • SS_DRSTAT(今回作成するファイルマネージャ固有の機能) これらの機能のうち、今回作成するファイルマネージャに固有の機能であるSS_FMSTATとSS_DRSTATについては、パラメタの内容も独自のものとなります。両者ともスタティックストレージのコピーを取得する機能なので、パラメタとしてはコピー先のバッファの大きさとアドレスを渡せばよさそうです。
    各機能毎のパラメタは次のようになります。パラメタ構造体はsrvcb.hで宣言されています。

  • ニモニックパラメタ内容
    SS_DEVNAMEgs_devname_pb *
    SS_PATHOPTgs_popt_pb *
    SS_DEVOPTgs_dopt_pb *
    SS_COPYPDgs_cpypd_pb *
    SS_FMSTAT固有パラメタ
    SS_DRSTAT固有パラメタ
    なお、デバイスドライバで固有の処理を行えるように、デバイスドライバがE_UNKSVCを返した場合だけファイルマネージャで処理する事にします。

    Setstat

    Setstatはデバイスに対して特別な操作を行うための機能をサポートします。デバイスに密着した機能は勿論デバイスドライバでサポートしなければなりませんが、デバイスに依存しない特定のオプションはファイルマネージャでサポートします。
    ユーザ独自のファイルマネージャがサポートをした方が好ましいと思われる機能を、標準のファイルマネージャ(RBF、SCF、SBFなど)でサポートしている機能を基に考えると、以下のようになります。

    ニモニック機能概要
    SS_PATHOPTパスディスクリプタオプションを更新する。
    SS_LUOPT論理ユニットオプションを更新する。
    論理ユニットをサポートしない場合は不要。
    SS_DEVOPTデバイスオプションを更新する。
    SS_SENDSIGデータレディ検出シグナルを設定する。
    SS_RELEASESS_SENDSIGで設定したデータレディ検出シグナルを解除する。

    今回作成する超低機能ファイルマネージャは、なるべく簡単になるように論理ユニットをサポートしない事にします。従ってSS_LUOPTはサポートしません。また、データレディシグナルに関する処理はSCFデバイスがファイルマネージャでサポートしていますが、デバイスドライバで行った方が融通がきくので、ファイルマネージャではサポートしない事にします。
    結果、残った次の機能をサポートする事にします。
    各機能毎のパラメタは次のようになります。パラメタ構造体はsrvcb.hで宣言されています。

    ニモニックパラメタ内容
    SS_PATHOPTss_popt_pb *
    SS_DEVOPTss_dopt_pb *
    なお、デバイスドライバで固有の処理を行えるように、デバイスドライバがE_UNKSVCを返した場合だけファイルマネージャで処理する事とします。
    前へ 次へ 戻る