ランダムアクセス

ランダムアクセス: Random Access)とは、記憶装置などのデータへのアクセス方式のひとつで、端から順番にアクセスするというシーケンシャルアクセスに対して、何らかのアドレス付けによる番号などにより、目的のデータがある場所がわかっていれば、それを直接アクセスできる、というような方式である。Direct access storage device(DASD)など、「直接アクセス」という語もある。なお「ランダムアクセスメモリ」についてはRandom Access Memoryの記事を参照。

おおまかな説明になるが、例えばファイルシステムに利用しているディスクであれば、目的のファイルのパス文字列からinodeを得て、inodeからブロック番号を得る。ブロック番号は容易にディスクの実際のアドレス(Logical Block Addressing)に変換できるので、あとはディスクコントローラにそのLBAにアクセスするコマンドを投げる。ディスクコントローラにより、ディスクメディアであればヘッドが目的のセクタがあるシリンダに移動され(シーク)、目的のセクタが現れるまでディスクの回転を待ち、最終的に目的のセクタにアクセスが行われる。

シーケンシャルアクセスでは通常、端から全部のデータにアクセスしつつ、目的の場所まで待たなければならないので、レイテンシが膨大になる。それに対しランダムアクセスではどの場所のデータにアクセスするのでも、一般に同じ待ち時間でアクセスできる。(スループットの点では、シーケンシャルアクセス機器の存在意義を示すためもあって、近年のテープ機器などでは高性能化が進んでいる)

ファイルへのランダムアクセス[編集]

大抵のオペレーティングシステムは、ハードディスクフロッピーディスク光ディスクなどの記憶媒体にファイルシステムを提供し、データをファイルごとに格納できるようになっている。(以上の記述は「シーケンシャルアクセス」とは特に関係ないただの一般論である)

そして、以下の説明は、以上で説明したような「大抵のオペレーティングシステム」の話ではなく、メインフレームの専用オペレーティングシステムにおける「ランダムアクセス・ファイル」に関しての話であり、WindowsやUnixその他の大抵のOSとは無関係である。

ファイルシステム上に存在するファイルに対して、複数バイトをひとまとまりとしたブロックごとにデータを読み取りまたは書き込みすることをランダムアクセスという。また、ランダムアクセスをする目的で作られたファイルをランダムアクセス・ファイルという。

典型的な例では、ランダムアクセス・ファイルは、固定長のひとまとまり、たとえば 100 バイトを 1 つのデータの固まりとして扱う。このデータの固まりのことをレコードという。プログラムはファイル中を 1 レコード(ここでは 100 バイト)単位でシークし、先頭から任意の位置にあるレコードに対して、レコード単位で読み込みや書き込みを行う。