Integrated Drive Electronics は、ディスク固有の制御ロジックをドライブ上に移し、 ホスト側のレジスターとコマンドを標準化しました。その結果生まれた ATA ファミリーは、 Serial ATA が登場するまで PC ストレージの主流でしたが、関連するいくつかの名称は、 その歴史の異なる部分を表しています。
用語 #
次の 4 つの用語を完全な同義語として扱うべきではありません。
- IDE は Integrated Drive Electronics の略であり、コントローラーロジックを 機構側に配置したアーキテクチャ上の変化を意味します。Enhanced IDE(EIDE)は、 後に登場した拡張機能の集合および製品用語です。
- ATA は AT Attachment インターフェイスとして始まり、現在ではコマンド、 レジスター、プロトコル、デバイスの動作を含む標準規格群の名称です。
- PATA は、Serial ATA の登場によって区別が必要になった後に付けられた、 ATA のパラレル電気インターフェイスを指す名称です。
- ATAPI は、ATA トランスポート上のパケットコマンドプロトコルを定義します。 光学ドライブなどのデバイスは、ATA ディスクを装うのではなく、SCSI コマンドセットから 派生したコマンドを伝送するために ATAPI を使用します。
SATA は、ATA コマンドモデルの大部分を維持しながら、ケーブル、信号方式、トポロジーを 変更します。したがって、現代の ATA コマンドの説明は、40 ピン IDE リボンケーブル 以外にも適用できます。
ホスト、チャネル、デバイスのトポロジー #
ホストアダプターは、1 つ以上の ATA チャネルを公開します。パラレルチャネルは、 コマンド信号、制御信号、16 ビットデータ信号を共有し、最大 2 台のデバイスを接続できます。 デバイスは慣例的にマスターとスレーブ、またはデバイス 0 とデバイス 1 と呼ばれます。 これらの名称はバス上の識別子を選択するものであり、一方のドライブがすべてのコマンドを もう一方へ中継するという意味ではありません。
ジャンパーを使って識別子を明示的に割り当てられます。一方、ケーブルセレクトモードでは、
CSEL 導線とコネクターの配線によって識別子を決定します。ホストは Device/Head
レジスターのデバイスビットを書き込み、規格で要求される選択安定時間だけ待ってから、
選択したデバイスのレジスターセットにアクセスします。従来の動作では、共有チャネルを
一度に占有できるコマンドプロトコルは 1 つだけです。
初期のケーブルは 40 本の導線を使用していました。より高速な Ultra DMA モードには、 同じ 40 ピンコネクターを備えた 80 芯ケーブルが必要です。追加された接地導線によって クロストークを低減します。共有信号方式、短いケーブル長の制限、タイミングマージンによって パラレル方式のさらなる高速化が制約され、SATA のポイントツーポイントリンクが開発される 一因となりました。
タスクファイルとデバイス識別 #
ソフトウェアは、タスクファイルと呼ばれることが多いコマンドブロックレジスター群と、 制御ブロックレジスターを介して従来の ATA デバイスを制御します。各レジスターの役割は 次のとおりです。
| レジスター | 役割 |
|---|---|
| Data | 16 ビット PIO データ転送と IDENTIFY ワード |
| Features / Error | 書き込み時はコマンドパラメーター、読み出し時はエラー詳細 |
| Sector Count | 転送数またはコマンドパラメーター |
| LBA Low, Mid, High | アドレスバイトまたはコマンド固有の値 |
| Device/Head | デバイス選択と従来方式の上位アドレスビット |
| Command / Status | 書き込み時はコマンドを開始し、読み出し時は状態を報告 |
| Device Control / Alternate Status | リセット、割り込み制御、および確認応答の副作用を伴わないステータス |
ホストはパラメーターをロードし、最後にコマンドレジスターへ書き込みます。その後、
BSY、DRQ、ERR、DRDY などのステータスビットを解釈しながら、コマンドで
規定された PIO または DMA プロトコルに従います。BSY がセットされている間に
任意のレジスターをポーリングすると、プロトコルに違反する可能性があります。その段階では、
規定されたステータスアクセスだけが有効だからです。
IDENTIFY DEVICE は、ATA ディスクを記述する 256 個の 16 ビットワードを返します。
定義済みのワードは、モデル名とシリアル番号の文字列、サポートされるコマンドセット、
有効な転送モード、論理セクターの特性、キューイング機能、アドレス指定可能な容量を
報告します。ATAPI デバイスは代わりに IDENTIFY PACKET DEVICE に応答します。
予約済みのビットとワードから意味を推測してはならず、サポートを示すビットと有効化を示す
ビットは異なります。機能が実装されていても、現在は有効でない場合があります。
CHS、LBA28、LBA48 #
初期のコマンドは、BIOS および DOS との互換性のために、シリンダー、ヘッド、 セクターのフィールドを公開していました。報告されるジオメトリが物理媒体と一致しなく なったため、デバイスファームウェアがそれらの値を変換していました。一方、論理ブロック アドレッシングでは、セクターに線形の番号を付けます。
初期の ATA LBA 形式は、28 ビットのアドレスを伝送します。そのうち 24 ビットは 3 つの LBA レジスターに、4 ビットは Device/Head に格納されます。512 バイトの セクターを使用する場合、そのアドレス空間は次のとおりです。
2^28 sectors × 512 bytes = 128 GiB = 137,438,953,472 bytesLBA48 コマンドは、アドレスを 48 ビット、セクター数を 16 ビットに拡張します。
従来のタスクファイルでは、ソフトウェアは対応する下位バイトより先に上位バイトを書き込み、
その後 READ SECTORS EXT などの EXT コマンドを発行します。1 セクターが
512 バイトの場合、48 ビットで 128 PiB をアドレス指定できます。実際のデバイスや
オペレーティングシステムでは、より小さい上限が課される場合があります。また、論理
セクターが大きいドライブでは、LBA 数を変えずにバイト単位の容量が変わります。
セクター数フィールドの値 0 には、コマンド固有の最大転送数を表す意味があります。 多くの 28 ビットコマンドでは 256 セクター、対応する 48 ビットコマンドでは 65,536 セクターです。ドライバーは 0 を空の要求として解釈するのではなく、選択した コマンドの定義に従う必要があります。
PIO、DMA、Ultra DMA #
ATA 転送モードは、セクターデータがホストインターフェイスを通過する方法を規定します。
- **プログラム I/O(PIO)**では、プロセッサーがすべてのワードについて Data
レジスターを読み書きします。デバイスは
DRQを使ってデータフェーズを区切ります。 - シングルワード DMA とマルチワード DMAでは、ドライバーがメモリーディスクリプターを 設定して ATA DMA コマンドを発行した後、ホストの DMA エンジンがデータを転送します。
- **Ultra DMA(UDMA)**は、ソース同期ストローブを使用し、ストローブの両エッジで 転送し、各バーストに CRC を追加します。高速なモードほどタイミング要件が厳しくなり、 PATA では 80 芯ケーブルが必要です。
DMA はプロセッサーが管理するデータ移動を減らしますが、ATA コマンドのセットアップ、 完了処理、エラー処理、キャッシュフラッシュ、DMA マッピングは引き続きドライバーの 責任です。CRC エラーはケーブル上の転送を保護しますが、媒体内容のエンドツーエンドの 検証は提供しません。
ホストとデバイスは、IDENTIFY データと SET FEATURES に基づいてモードを
ネゴシエートします。ケーブル、コントローラー、またはデバイスがサポートしていない
モードを選択すると転送データが破損する可能性があるため、ドライバーはデバイスが通知した
最大の番号を選ぶのではなく、プラットフォームの制限を適用します。
永続的なブロックデバイス境界 #
統合された制御と LBA によって、オペレーティングシステムは安定したセクター配列の 抽象化を得ました。ファイルシステムとパーティションテーブルは、ヘッドの移動を スケジューリングしたり、ドライブの物理ジオメトリをエンコードしたりせずに、 論理ブロック上で動作できるようになりました。ATA は現在も媒体エラーと性能の詳細を 公開しますが、LBA をトラック、フラッシュページ、予備セクター、内部変換層のいずれに マッピングするかはデバイス自身が決定します。
コメント
GitHub で閲覧・コメントする(投稿にはログインが必要です)