Comments
Description
Transcript
徹底 解説
徹底 解説 第15回 内藤 竜治 DMAの実装とWindowsにおけるメモリ管理 前回の連載で,アドイン・カード上のデータをCPUのソフトウェアから普通に読み出したところ,その転送速度は 約8Mバイト/秒と遅く惨憺たる結果だった.この速度を改善するにはDMAを実装するほかない.そこで今回は, FPGAにDMA機能を実装し,前回作成した汎用PCI Expressデバイス・ドライバをDMAに対応させる. (筆者) ものです.DMA コントローラはアドイン・カードの設計 者が設計するもので,その仕様はカードごとに異なります. 1.DMA についての基礎知識 本連載ではこちらの DMA を扱います. ● DMA とは何か ● DMA のやり方 DMA(Direct Memory Access)とは,周辺装置がメモ PCI Express における DMA は,ハードウェア的には難 リ・バスを操作してメイン・メモリに直接アクセスするこ しいものではありません.エンドポイントの側からメモ とをいいます(図 1).DMA には大量のデータを転送する リ・リード・リクエストやメモリ・ライト・リクエストを 高速なものと,非同期の低速データを扱うものがありま 発行して,パソコンのメイン・メモリ上のデータを読み出 す.ここでの目的はアドイン・カード上のデータを高速に したり,データを書き込んだりするだけのことです.した 読み出すことなので,高速な方の DMA を扱います. がって,メイン・メモリ上の物理アドレスと長さを正しく また,PCI Express のルート・コンプレックス(チップ・ セットに内蔵されている)は,メイン・メモリへのアクセ 指定した TLP を発行すれば,自由にパソコンの中のメモ リを読み書きできてしまうはずです. スも担うので,厳密に言えば DMA を行うのはアドイン・ それでは,ここで使う物理アドレスと長さはどうやって カードではなくルート・コンプレックスになります.PCI 調べればよいのでしょうか? ここが,DMA を行うためのデ Express の エ ン ド ポ イ ン ト は TLP( Transaction Layer バイス・ドライバのややこしいところであり,Windows の Packet)を発行しているだけであって,CPU に対して 提供するしくみの素晴らしいところでもあります. DMA を実行しているわけではありません. 本章ではこのしくみについて詳しく見ていくことにします. しかし,一般的には,アドイン・カード上に置かれた DMA コントローラから要求を発行してメイン・メモリと 2.ハードウェアの実装 アドイン・カードとの間で直接データ転送を行うことを DMA と呼んでいます.PCI のカードでは,バス・マスタ がバースト転送を発生させてメイン・メモリにアクセスす ● TLP 送信ステートマシンの改良 DMA のハードウェアは驚くほど簡単です.連載第 10 回 ることを DMA と呼んでいましたが,それの PCI Express 版と考えればよいでしょう. CPU ● バス・マスタ DMA とシステム DMA Windows には,バス・マスタ DMA とシステム DMA と メイン・メモリ バス いう概念があります.システム DMA というのは,マザー ボード上に搭載されている共有の DMA コントローラを 使って行うものです.これは本連載では扱いません. バス・マスタ DMA というのは,アドイン・カード上に 置かれた DMA コントローラがメイン・メモリと通信する June 2010 周辺装置1 周辺装置2 周辺装置3 図 1 DMA とは DMA は周辺装置がバスを操作してメイン・メモリに直接アクセスすることをいう. DMA の実行中は,CPU がバスを開放する.この図は簡略化しているが,実際のパ ソコンのバスはもっと複雑である. KEYWORD ――デバイス・ドライバ,DMA,ページング,仮想メモリ,キャッシュ,コントロール・レジスタ, 論理アドレス,物理アドレス,スキャッタ・ギャザ 171