Jump to content 日本-日本語
≫ お問い合わせ

HP OpenVMS Alpha: パーティショニングおよび Galaxy ガイド

第19章 OpenVMS Galaxy デバイス・ドライバ

≫ 

OpenVMSドキュメント・ライブラリ

目次
まえがき
第1章:パーティションによる負荷の管理
第2章:OpenVMS Galaxyの概念
第3章:OpenVMSアプリケーションに対するNUMAの影響
第4章:GS140/GS60/GS60Eでの構築
第5章:AlphaServer 8400での構築
第6章:AlphaServer 8200での構築
第7章:AlphaServer 4100での構築
第8章:ES40での構築
第9章:GS80/160/320での構築
第10章:ES47/ES80/GS1280での構築
第11章:AlphaシステムでのシングルインスタンスGalaxyの使用
第12章:Galaxyに関するヒントと手法
第13章:Galaxy Configurationユーティリティ
第14章:Graphical Configuration Manager
第15章:DCL CLIを使ったCPUの最割り当て
第16章:GalaxyとNUMAのコマンドとレキシカル関数
第17章:共用メモリを使った通信
第18章:共用メモリ・プログラミング・インタフェース
第19章:Galaxyデバイス・ドライバ
付録A:Galaxy CPU Load Balancerプログラム
付録B:メモリサイズ設定の共通値
付録C:ライセンスのインストール
用語集
索引
PDF
OpenVMS ホーム
ここから本文が始まります

この章では,OpenVMS Alpha バージョン 7.3 で PCI ドライバに対しての ダイレクト・マップ DMA ウィンドウについて説明します。

19.1 ダイレクト・マップ DMA ウィンドウの変更

この節で説明する変更は OpenVMS Galaxy とメモリ・ホールをサポートするために OpneVMS バージョン 7.2 で変更されたものです。 この変更では,ダイレクト・マップ DMA ウィンドウを物理メモリ 0 から他の場所に移動します。 この章では,まだ OpenVMS バージョン 7.2 またはそれ以降のドライバにアップデートしていない場合にドライバを更新するのに必要な情報とその背景について,詳しく説明します。

この章では,バス・アドレス可能プール (BAP) については説明しません。

19.2 OpenVMS バージョン 7.2 より以前に PCI ダイレクト・マップ DMA がどのように機能していたか

図 19-1 「PCI ベース DMA」 に示すように,すべての PCI ベースのマシンで, ダイレクト・マップ DMA ウィンドウは PCI 空間の (通常は) 1 GB から始まり, 1 GB の場合は 0 から始まる物理メモリを使用します。

図 19-1 PCI ベース DMA

PCI ベース DMA

通常,ドライバはそれぞれのバッファ・アドレスを, IOC$K_DIRECT_DMA_SIZE ファンクション・コードを指定して IOC$NODE_DATA を呼び出すことで返されたウィンドウの長さと比較します。 ここでは,メモリ側のウィンドウが 0 から始まるものと仮定しています。 マップ・レジスタが必要かどうかを判断するためによく使われている別の方法として, MMG$GL_MAXPFN を確認する方法があります。 この方法も OpenVMS バージョン 7.3 では正しく動作しない可能性があります。

もっとわかりやすい図と説明については『Writing OpenVMS Alpha Device Drivers in C』を参照してください。

19.3 現在のバージョンの OpenVMS で PCI ダイレクト・マップ DMA がどのように機能するか

図 19-2 「OpenVMS DMA」 に示すように Galaxy およびメモリ・ホールについて考慮すると, ダイレクト・マップ DMA ウィンドウの位置を変更しなければならなくなります。

図 19-2 OpenVMS DMA

OpenVMS DMA

メモリ内でダイレクト・マップ DMA ウィンドウのベースがどこにあるかをドライバから判断することはできません。 単にバッファ・アドレスをウィンドウの長さと比較しても, バッファがダイレクト・マップ DMA ウィンドウの内部にあるかどうか判断するのに十分ではありません。また,MMG$GL_MAXPFN に対して比較しても, すべてのプールがウィンドウの内部にあるかどうか保証できません。 チェックしなければならない正しいセルは MMG$GL_MAX_NODE_PFN です。 さらに,アライメントについて考慮すると,物理バス・アドレスの計算に少し異なるオフセットを組み込まなければならなくなります。

19.4 0 以外のダイレクト・マップ DMA ウィンドウをサポートするためのIOC$NODE_DATA の変更

この問題に対処するために, 新しいファンクション・コードが IOC$NODE_DATA に追加されました。 ここではダイレクト・マップ DMA に関連するすべてのコードのリストを示し, データがどのような意味を持つかについても説明します。

コード

説明

IOC$K_DIRECT_DMA_BASE

これは PCI 側のベース・アドレスであるか,またはバス・アドレスである。 これは,IOC$K_DDMA_BASE_BA というファンクション・コードの同意語である。 32 ビットの結果が返される。

IOC$DIRECT_DMA_SIZE

Galaxy 以外のマシンでは, これはダイレクト・マップ DMA ウィンドウのサイズ (M バイト数) を返す。 ダイレクト・マップ DMA ウィンドウが 0 から始まらないシステムでは, 返されるデータは 0 であり, ダイレクト・マップ DMA ウィンドウが存在しないことを示す。 32 ビットの結果が返される。

IOC$K_DDMA_WIN_SIZE

すべてのシステムで, これはダイレクト・マップ DMA ウィンドウのサイズを返す (M バイト単位)。 32 ビットの結果が返される。

IOC$K_DIRECT_DMA_BASE_PA

これはダイレクト・マップ DMA ウィンドウのメモリ内でのベース物理アドレスである。32 ビットの結果が返される。

IOC$K_DIRECT_DMA_BASE_PA コードを使用して返されるアドレスは, オフセットを計算するのに必要です (これは通常,メモリ PA とバス・アドレスの間の 1 GB の差として使用されます)。 オフセットは,ベース・バス・アドレスとベース・メモリ・アドレスの間の符号付きの差として定義されます。これは必ずしも 1 GB ではありません。

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 2009 Hewlett-Packard Development Company, L.P.