DMAディスクリプタ
1回の転送の転送元、転送先、長さ、次のディスクリプタの場所を記したメモリ上の小さな構造体。これでDMAコントローラは連鎖全体を自力で処理できる。
単純なDMAチャネルはレジスタ(アドレス、カウント、開始)で設定する。バッファが1つならそれで足りる。複数のバッファや、メモリ上に散らばったデータには、RAM上にディスクリプタを並べて先頭アドレスだけをコントローラに渡す。コントローラはそれを読んで転送し、次のポインタをたどって先へ進む。スキャッタギャザは実際にはこうして動く。ディスクリプタをリング状につなげば、好きな数のバッファを持つサーキュラDMAと同じ効果が得られる。
この方式を最も突き詰めたのがネットワークカードである。ディスクリプタリングの各エントリには、ドライバとハードウェアのどちらのものかを示すオーナーシップビットがある。古典的なバグはキャッシュに潜む。CPUが書いたディスクリプタがL1に残ったままで、コントローラは古いRAMを読む。ハードウェア故障のように見えるが、まずそうではない。原因はキャッシュメンテナンスだ。