• ベストアンサー

メインフレームのブロックについて

メインフレームのブロックの単位はなんでしょうか? 開発者が決める一塊のデータのサイズ(バイト数)でしょうか? たとえば下記のデータがあるとして AAAAABBBCC ブロックを5とすれば ブロック1=AAAAA、ブロック2=BBBCC のように扱われるということですか? それともなにか基準値があるのでしょうか? 固定長データの一行に相当するイメージですか? 可変長の場合はどうなりますか? プログラミングやJCLで意識することはありますか? 検討違いかもしれないのですが、イメージがわかないので 教えてください。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

ブロックとは、ハードディスク装置と制御装置がデータをやりとりする単位です。プログラムであつかう論理的な処理(レコード)とは関係ありません。 >それともなにか基準値があるのでしょうか? ファイルの先頭から順番に読んで処理する場合は出来るだけ大きい方が効率が良くなります。ただ、約32KB以上に出来ません。可変長ブロックを使うなら最大値を約32KB(正確な数値は忘れました)にしておけばいいでしょう。固定長を使うなら、ディスクの無駄が出ないような最適な値が装置ごとに決まっています。今のディスクはRAIDで、PC用ディスクの高精度版を使って昔のディスク装置をエミュレートしているのであまり意味がないのですが。 固定長レコードの場合は、ブロックサイズはレコードサイズの整数倍にして、レコードがブロックをまたがないようにするのが普通です。 検索すると、こういうページがありました。http://www.arteceed.net/?p=443 RAIDは普通は3390互換にしてあるはずです。 DBのようにランダムにアクセスする場合は、あまり大きなブロックサイズだと、とある200バイトを読むためにも20KBのブロックを読まないといけなかったりする訳で、やや小さめにしたほうがいいです。あまり小さすぎると、シーケンシャルに読む場合に遅くなりますし、また、ディスクの容量も小さくなります(ブロックごとに制御エリアが必要なので)。 >プログラミングやJCLで意識することはありますか? 上に書いたように物理的な話なので、プログラミングで意識することは無いです。実際にファイル(メインフレームだとデータセット)を作成するときにだけ上記のような考えで意識します。作成はJCLで行うので、作成をするのならJCLで指定が必要です。作成しないなら意識しなくていいです(使うだけの場合でも、JCLでブロックサイズを指定することも出来ますが、作成時に指定した値と違う値を指定すると遅くなったりエラーになったりしますので普通は指定しません)。 COBOLやアセンブラだとプログラムでブロックサイズを指定する機能もありますが、メインフレームの場合は普通はそこはゼロを指定しておきます。 実際に入出力で使われるブロックサイズは以下の順番で決まります。 1.プログラムで指定していればそのサイズ 2.プログラムで指定していない(=ゼロを指定している)場合に、JCLで指定していればそのサイズ 3.プログラムでもJCLでも指定していない既存ファイルの場合は、そのファイル属性として持っているサイズ 4.新規作成ファイルで、プログラムでもJCLでも指定していなければブロックサイズが不明なので実行時エラー PCで使うディスクのブロックは512バイト固定長で、メインフレームの感覚から見るととても短いです。

goouser20
質問者

補足

ありがとうございます。 レコードの塊がブロックなのですね。 レコードはDBのレコードと同じイメージでしょうか? 一行としてサイズがきまりますよね。 その塊ということは、ブロックはテーブルを分割しているような 感じでしょうか? 固定長の場合は最適な値が装置ごとに決まっているので、レコードのサイズを整数倍した値の中で、最適な値内でもっとも最適な値に近い数字を設定するということでよいでしょうか? 可変長はたぶん、最大値を一行として扱うってことなんですよね。 あと、メインフレームにもDBがあるのですか? DB2とかですか? オープン系のDBでブロックサイズを意識したことがないのですが メインフレーム特有なのでしょうか? それとも、カラム数を多くしないとかそういうことでしょうか? メインフレームは磁気ディスクのデータを使用するイメージがありましたが、メインフレームからDBにアクセスしてデータ操作をおこなうようなこともあるのでしょうか? でも、ブロックについてわかったことは、データの塊で、磁気ディスクの容量に無駄がでないように、また、大きすぎ、小さすぎもやめて設定すること。 ファイル(データセット)作成時に考慮が必要ですが、プログラムやJCLでは意識しなくていいこと。 ありがとうございました。 できれば今回の質問にも答えていただけるとうれしいです。 よろしくお願い致します。

その他の回答 (1)

  • kt1965
  • ベストアンサー率34% (116/339)
回答No.1

回答します。 メインフレームでのブロックは、ワード(=オクテット)という単位になります。基本的には、データは固定長で扱います。可変長の場合には、一番長いデータを基準にして空欄を埋める形で行いますが、一応最初に使用するブロック長を指定しておきます。 例えば、COBOLでもそうなのですが、データ長を先に宣言しておいて、その値で全てのレコード及びブロック長を定めます。 JCL(ジョブ制御言語)の場合には、起動するプログラムを制御することが目的のため、余り意識する必要はありません。 では。

goouser20
質問者

補足

ありがとうございます。 もうちょっと質問させてください。 ひとつのトラックに何種類かのファイル(データセット)を記憶させることってあるますよね? トラックやシリンダをファイルがまたぐようなことってあるのでしょうか? よろしくお願い致します。

関連するQ&A

専門家に質問してみよう