日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル

OpenVMS マニュアル


≫ 

OpenVMS
ライブラリ

タイトルページ
目次
まえがき
第 1 章:移行プロセスの概要
第 2 章:移行方法の選択
第 3 章:アプリケーションの移行
第 4 章:再コンパイルと再リンクの概要
第 5 章:ページサイズの拡大に対するアプリケーションの対応
第 6 章:共用データの整合性の維持
第 7 章:アプリケーションデータ宣言の移植性の確認
第 8 章:アプリケーション内の条件処理コードの確認
第 9 章:OpenVMS I64コンパイラ
付録 A :アプリケーション評価チェックリスト
用語集
索引
PDF
OpenVMS ホーム

HP OpenVMS
OpenVMS VAX から OpenVMS I64 への
アプリケーションの移行


目次 索引



VAX マルチプロセシング・システムは従来,マルチプロセシング・システム内の 1 つのプロセッサが複数のデータを書き込むときに,これらのデータが書き込まれた順序と同じ順序で,他のすべてのプロセッサから確認できるように設計されていました。たとえば, CPU A がデータ・バッファを書き込み ( 図 6-3 の X),その後でフラグを書き込む場合 ( 図 6-3 の Y), CPU B はフラグの値を確認することにより,データ・バッファが変更されたことを判断できます。

I64 システムでは,メモリ・サブシステム全体の性能を向上させるために,メモリとの間の読み取り操作および書き込み操作の順序が変更される可能性があります。単一プロセッサで実行されるプロセスの場合には,そのプロセッサからの書き込み操作は要求された順に読み取り可能になることを仮定できます。しかし,マルチプロセッサ・アプリケーションの場合には,メモリに対する書き込み操作の結果がシステム全体から確認できるようになる順序に依存することはできません。つまり,CPU A によって実行される書き込み操作は,書き込まれた順序とは異なる順序で CPU B から見える場合もあります。

図 6-3 はこの問題を示しています。 CPU A は X に対する書き込み操作を要求し,その後, Y に対する書き込み操作を要求します。 CPU B は Y からの読み取り操作を要求し,Y の新しい値を確認した後に, X の読み取り操作を開始します。 X の新しい値がまだメモリに書き込まれていない場合には, CPU B は古い値を読み取ります。この結果,CPU A と CPU B で実行されるプロシージャが依存するトークン受け渡しプロトコルは正しく機能しなくなります。 CPU A はデータを書き込み,フラグ・ビットをセットできますが, CPU B は,データが実際に書き込まれる前にフラグ・ビットがセットされていることを検出する可能性があり,その結果,誤って古いメモリの内容を使用してしまいます。

図 6-3 I64 システムでの読み取り/書き込み操作の順序


対処方法

並列に実行され,読み取り/書き込みの順序に依存するプログラムは, I64 システムで正しく実行するために何らかの設計変更が必要です。アプリケーションに応じて,以下の方法を使用してください。

  • 終了の順序が重要な,すべての読み取り命令と書き込み命令の前後では, I64 メモリ・フェンス (MF) 命令を使用してください。たとえば,C for OpenVMS I64 システムコンパイラは, __MB() 組み込み関数でメモリ・フェンス命令をサポートします。

  • コンパイラで提供される組み込みのメモリ・インターロック操作を使用するか, LIB$ ランタイム・ライブラリで提供される VAX インターロック命令ルーチンを使用するように,アプリケーションの設計を変更してください。

  • ロックによってデータを保護するために, $ENQ システム・サービスと $DEQ システム・サービスを使用するように,アプリケーションの設計を変更してください。



6.4 トランスレートされたイメージの不可分性の保証

VEST コマンドの /PRESERVE 修飾子は, VAX システムで提供されるのと同じ不可分性を保証して,トランスレートされた VAX イメージを Alpha システムで実行できるようにするためのキーワードを受け付けます。 /PRESERVE 修飾子のキーワードは複数のタイプの不可分性保護機能を提供します。ただし,これらの /PRESERVE 修飾子のキーワードを指定すると,アプリケーションの性能が低下するおそれがあります (/PRESERVE 修飾子の指定についての詳細は,『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください)。

VAX システムで VAX 命令が不可分な方法で実行できる操作を,トランスレートされたイメージでも不可分な方法で実行できるようにするには, /PRESERVE 修飾子に対して INSTRUCTION_ATOMICITY キーワードを指定します。

ロングワードまたはクォドワードに格納された隣接バイトを同時に更新し,これらの各バイトが相互に干渉しないようにするには, /PRESERVE 修飾子に対して MEMORY_ATOMICITY キーワードを指定します。

読み取り/書き込み操作が実行される順序が要求した順序と同じ順序で実行されるように見えるようにするには, /PRESERVE 修飾子に対して READ_WRITE_ORDERING キーワードを指定します。


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項