ブロック (データ)

コンピューティング、特に記憶装置とデータ転送において、ブロック（）とは、ある一定の長さ（ブロックサイズ）のバイトまたはビットの並びである。そのようなデータは「ブロック化」されていると言われる。ブロック化は、そのデータを受け取るプログラムにとって装置の物理的特性を抽象化し、データストリームを扱いやすくするために行われる。

たとえば、
 オペレーティングシステム (OS) あるいはファイルシステムがハードディスクドライブ (HDD) などの外部デバイスとのデータ読み書きを行うインタフェースにおけるデータの最小単位
 データベース管理システム (DBMS) が記憶装置とのデータのやり取りを行うインターフェースにおけるデータの最小単位
 フラッシュメモリにおいて、消去操作を行うデータの最小単位
といったものがある。

ブロックによる抽象化
コンピュータに接続される外部記憶装置には、バイトやビットごとにデータの読み書き（アクセス）を行うことができない、あるいはそのようなアクセスでは極端に性能が落ちるものがある。そこで、これらの外部記憶装置ではある程度まとまった固定長のデータ塊ごとにアクセスを行う。この固定長はディスクセクタ、あるいはブロックなどと呼ばれる。
9インチ磁気テープ、フロッピーディスク、HDD、光ディスク、NAND型フラッシュメモリなどは固定長単位でデータを格納する。
これらの装置を抽象化し同じように扱うため、一部のオペレーティングシステムやデータベース管理システム (DBMS)では、ブロックと呼ぶ固定長のデータ構造体を用意し、ブロック単位で各記憶装置にアクセスを行う。ブロックサイズは一般的に、各記憶装置のアクセス単位よりは大きめに設定される。

OSにおけるブロックデバイス
ほとんどのファイルシステムはブロックデバイス上に構築される。ブロックデバイスはデータをブロック単位で操作できるハードウェアを抽象化したものである。ただし、ファイルシステムにおけるブロックサイズは、各デバイスにおけるアクセス最小単位の整数倍になっていることが多い。古いファイルシステムでは、1つのブロックには1つのファイルの一部だけが格納されている。ファイルの大きさは必ずしもブロックサイズの整数倍にはなっていないため、ファイルの最後尾を格納するブロックには必ず未使用の領域 (slack space) が存在する。slack space は、ファイルサイズが均等に分布すると仮定すると、平均して合計すると、ファイルの個数×0.5×ブロックサイズが未使用になる。ブロックの分割割り当てや末尾マージ (tail merging) といった技法でこの問題に対処している。

DBMSとブロック
データベースはファイルシステム上に構築することもできるが、DBMS が直接ブロック型記憶装置を操作する方が性能がよく、問題発生時のリカバリも容易になる。
DBMSが記憶装置とデータのやり取りを行う最小単位をまた、ブロックあるいはページと呼ぶ。

フラッシュ・メモリにおけるブロック
フラッシュ・メモリは、高性能化や小面積実装のため、ある一定数のメモリ素子の消去ゲートを共有する構造を特徴とする。この最小消去単位がブロックと呼ばれる。

NAND型フラッシュメモリではさらに、書き込み操作も固定長で行われる。この書き込みアクセス単位はページと呼ばれ、ブロックよりも小さい。

たとえば2008年に発表された東芝の1GbitのNAND型フラッシュメモリでは、ページサイズは512+16B、ブロックサイズは32KBとなっている。

関連項目 
ディスクセクタ
クラスタ (記憶媒体)

脚注

外部リンク 
Block device PHWiki

記憶装置
OSのファイルシステム