ファイルの分類
- 1 ファイルの分類
-
NECのマニュアルを引用すると次のようにファイルを分類できるようです。
ファイルの種類を大別すると次のようになる。 - ファイルの参照範囲
- ファイルの保存形式
- ファイルの世代
- ファイルの種類とVTOCファイルタイプの組み合わせ
「データ管理説明書(2009年11月版)」−「3.2 ファイルの種類」より - 2 ファイルの参照範囲
-
ファイルを参照範囲という観点で見ると、次の3種類に分けられます。
種 類 参照範囲 グローバルファイル
(Global File)どのジョブからも制限なくアクセスできる。 ローカルファイル
(Loal File6)同じカンパニIDを持つジョブのみアクセスできる。グローバルオペレータはカンパニIDを指定することによりどのローカルファイルもアクセスできる。OCFでカンパニありシステムのみローカルファイル機能を使用できる。 一時ファイル
(Temporary File)同一スレッド内でのみアクセスできる。他のスレッドの一時ファイルはアクセスできない。ファイルのオープン時にアロケートされ、デアロケート要求のクローズ時かジョブの流れの終了時に自動的にデアロケートされる。 上の表はハードディスクの場合で、フロッピーディスクのファイルは全てグローバルファイルになります。
ローカルファイルについては、OCF機能のところで説明しています。
- 2 ファイルの保存形式
-
ファイルの保存形式で分類することもできます。
種 類 保存形式 永久ファイル
(Resident File)利用者がユーティリティでアロケートしたりでアロケートしたりする、通常使用するファイル。勝手に理由なく消えたり現れたりはしない。 永久常駐ファイル
(Permanent File)システムファイルに使用する。利用者がユーティリティでアロケートしたりでアロケートしたりできないことが多い。SYS@xxxxという名前であることが多い。 一時ファイル
(Temporary File)同一スレッド内でのみアクセスできる。SYS@FDF上にファイルラベルが登録されず、ハードディスク上では単に一時ファイルとして使用中の領域として管理される。 - 3 ファイルの世代
-
ファイルを無世代ファイルか世代ファイルかとして分類することができます。
種 類 世 代 無世代ファイル 一世代のみのファイルである。A−VXにおいては普通のファイル。 世代ファイル 数世代からなるファイル。磁気ディスクのみに作ることができる。 世代ファイルはファイルサイズの動的追加ができなかったり、大容量ファイルが作成できなかったり、と制限の多いファイルです。(A−VXでは過去に何度かファイルの機能強化/機能拡張が行われていますが、世代ファイルだけは対象外となって取り残されてしまっているイメージです。)
このように世代ファイルは使い方が特殊なので、私の経験上ではA−VXではあまり使用されていない様子です。以前世代ファイルについて説明したことがあるので、下にそのリンクを示します。
- 4 ファイルの種類とVTOCファイルタイプの組み合わせ
-
VTOCファイルタイプと難しく書いていますが、簡単に言うとハードディスクとフロッピーディスクでは作ることのできるファイルの種類に差異がありますよ、ファイルの種類の組み合わせには制限がありますよ、ということです。
ファイルの参照範囲で書いたように、ローカルファイルと一時ファイルはフロッピーディスクには作れない、世代ファイルはフロッピーディスクには作れない。
グローバルファイルやローカルファイルは常駐ファイルしか作れない。グローバルファイルやローカルファイルは一時ファイルにはできない。
一時ファイルは世代ファイルは作れない。 - 5 一時ファイル
-
保存形式の一時ファイルは、参照範囲の一時ファイルと同じです。
つまり同一スレッド内のジョブのみでアクセスでき、他のスレッドのジョブはアクセスできない。同じ名前のファイルでも、スレッドが異なれば違うファイルとして扱われます。
作業用に一時的に使用するファイルで、ジョブの実行時、動的にファイルスペースが割り当てられ、ファイルクローズ時にプログラム指定によりスペース解放を行えるが、原則としてジョブの終了時に自動的に解放されます。
大量のデータを使用する場合の一時的な作業用のファイルとして使われたり、ジョブの中で前後のプログラム間でのデータの受け渡しに使われたりします。
ハードディスク上では単に一時ファイルとして使用中の領域として管理されます。システムがハードディスク上の空きスペースを探してアロケートし、もし空きがないときはボリュームスペース不足として処理されます。
下はハードディスクで一時ファイルが使われている様子です。赤丸の2行の下側が「*** FREE SPACE *** TMP ***」となっていますが、このTMPが一時ファイルとして使用中の領域です。
- 6 常駐ファイル
-
ユーティリティなどでアロケートされるファイルであり、デアロケートされるまでボリューム上に存在します。
アロケート方法は次の3つの方法があります。
- ユーティリティのアロケータを使用し、ファイルを静的にアロケートする
- ユーティリティのシステムユーティリティ支援を使用して、ファイル仕様のみをFDFに登録し、ジョブ実行時に動的にファイルをアロケートする
- アプリケーションプログラムにて動的アロケート指定を行い、ジョブ実行時に動的にファイルをアロケートする
一番上はジョブ実行前に静的にスペースを割り当てる方法で、下2つはジョブ実行時に動的にスペースを割り当てる方法です。
動的にスペースを割り当てるということは必要時にだけスペースを割り当てるということなので、ディスクの容量を効率的に使用することができます。
FDFに登録だけして割り当てないということは、いわば「こういうファイルを作る予定です」と予約だけしておいて、実際にファイルを作るのはファイルが必要になってから、ということです。
例えば、上の画面はあるボリュームのファイルの一覧を表示したものです。
例えばDATA06を見ると(FROM)が5920、(TO)が6219、(SCNT)が300となっています。これはDATA06が5920セクタの位置から6219セクタの位置までの300セクタ分のファイルサイズで割り当てられていることを示しています。DATA04やDATA05、DATA07、DATA10、DATA11といった名前のファイルも。(FROM)(TO)に数字が書いてあるので、それぞれの位置に割り当てられていることがわかります。(DATA04やDATA05は複数の位置に割り当てられています。)一方、DATA08やSYS@LMLといった名前のファイルは(FROM)と(TO)が********となっています。これは割り当てられていないことを示します。DATA08の(SCNT)が200になっているので、場所は割り当てられていないが、300セクタでFDFに登録されていることを表します。
DATA06やDATA04、DATA05・・といったファイルは静的にアロケートされたファイルです。一方、DATA08やSYS@LMLはFDFにファイル仕様のみを登録されたファイルです。ファイル仕様だけ登録されたファイルでファイルの実態がないので、このままではデータを書き込んだり読み込んだりすることはできません。動的にファイルをアロケートすることでファイルに読み書きができるようになります。
アプリケーションプログラムで動的アロケート指定する方法は、プログラムの実行順序などによりファイルスペースが割り当てられたり割り当てられなかったりする可能性があり、プログラムの実行結果が不定になる可能性があるため、推奨されていません。しかし、今はハードディスクの容量も大きくなっているので、そういうこともあまり起きないのではないかな、とは私個人的には思います。