OpenVMS AXP
オペレーティング・システム
OpenVMS AXP オペレーティング・システムへの移行:システム移行の手引き


前へ 次へ 目次 索引


4.2.3.1.1 データ・アラインメント

データ・アドレスがデータ・サイズ(バイト数)の整数倍である場合には,データは 自然なアラインメントになります。たとえば,ロングワードは4の倍数であるアドレスに自然なアラインメントになり,クォドワードは8の倍数であるアドレスに自然なアラインメントになります。構造体の場合も,すべてのメンバが自然なアラインメントになっているときは,その構造体も自然なアラインメントになります。

メモリ内で自然なアラインメントでないデータをアクセスすると,VAXシステムでもAXPシステムでも性能が大幅に低下します。VAXシステムでは,大部分の言語は省略時の設定により,データを次の使用可能なバイト境界にアラインするため,VAXアーキテクチャでは,アラインされていないデータを参照したときに,性能の低下を最低限に抑えるためのハードウェア・サポートが準備されています。

しかし,AXPシステムでは,各データを自然なアラインメントにすることが省略時の設定であるため,Alpha AXPは他の典型的なRISCアーキテクチャと同様に,アラインされていないデータを使用することによって発生する性能の低下を最低限に抑えるためのハードウェア・サポートを準備していません。この結果,AXPシステムで自然なアラインメントになっているデータを参照する操作は,アラインされていないデータを参照する操作より10〜100倍も速くなります。

AXPコンパイラは,アラインメントに関する大部分の問題を自動的に修正し,修正できない問題には警告を発します。

問題の検出

アラインされていないデータを検出するには,次の方法が有効です。

問題への対処方法

アラインされていないデータに対処するには,次に示す方法を用います。

注意

自然なアラインメントに変換されたソフトウェアは,同じVMSクラスタ環境内の VAXシステム,またはネットワークによって接続された VAXシステムでトランスレートされた他のソフトウェアと互換性がなくなる可能性があります。次の例を参照してください。

  • 既存のファイル・フォーマットは,アラインされていないデータを含むレコードを指定する可能性があります。

  • トランスレートされたイメージは,アラインされていないデータをネイティブ・イメージに渡したり,ネイティブ・イメージからそのようなデータを渡されることを要求する可能性があります。

このような場合には,アプリケーションのすべての部分が同じデータ型,つまり,アラインされたデータ型またはアラインされていないデータ型を要求するように変更しなければなりません。

データのアラインメントについての詳しい説明は,『 OpenVMS AXP オペレーティング・システムへの移行:再コンパイルと再リンク』を参照してください。

4.2.3.1.2 データ型

AXPプロセッサは性能の向上のために,パック10進数(packed decimal)データ型,H浮動小数点データ型,および完全な精度のD浮動小数点データ型をソフトウェアによって実現します。

問題への対処方法

データ型に関する問題に対処するには,次の方法を用います。

Alpha AXPのデータ型についての詳しい説明は,『 OpenVMS AXP オペレーティング・システムへの移行:再コンパイルと再リンク』を参照してください。

4.2.3.2 共有データの保護

VAXアーキテクチャとAlpha AXPアーキテクチャの間にはいくつかの相違点があり,これらの相違点は共有データ(shared data)の整合性に影響を与える可能性があります。

4.2.3.2.1 メモリ内のデータの変更

不可分な操作とは,次のような操作です。

OpenVMS AXPでは,データをメモリから読み込む操作,メモリ内のデータを変更する操作,およびデータをメモリに格納する操作は,複数の命令に分割され,これらの命令の間で割り込みをかけることができます。この結果,アプリケーションで共有メモリ内のデータを不可分な操作によって変更したい場合には,操作の不可分性(atomicity)を保証するための作業が必要になります。

次の条件が満足される場合,アプリケーションは操作が不可分に実行されることに依存している可能性があります。

問題の検出

不可分性への依存を検出するには,共有変数の使用を再確認し,不可分性を暗黙にまたは明示的に仮定している部分がないかどうかを調べなければなりません。

問題への対処方法

命令の不可分性に関する一般的な問題を解決するには,次の方法を用います。

同期についての詳しい説明は,『 OpenVMS AXP オペレーティング・システムへの移行:再コンパイルと再リンク』を参照してください。

4.2.3.2.2 クォドワードより小さいデータの読み込みまたは書き込み

粒度という用語は,隣接するメモリ位置に格納されているデータを妨害せずに,不可分な操作として,メモリとの間で読み込みまたは書き込みを実行できるデータ・サイズを示します。VAXのようにバイト・レベルの粒度を提供するマシンをバイト粒度マシンと呼びます。AXPシステムはクォドワード粒度のシステムです。1

注意

1 Alpha AXPアーキテクチャはロングワード粒度もサポートしますが,ロングワード粒度を仮定することは望ましくありません。省略時の設定で,コンパイラはソース・コードがクォドワード未満の粒度に依存しないものと仮定しています。

OpenVMS AXPはクォドワード粒度のシステムであるため,共有されるバイト,ワード,またはロングワードに書き込むと,共有データと同じクォドワードに格納されている他のデータを破壊する可能性があります。このような状況は次の場合に発生します。

注意

不可分性に関する説明(第 4.2.3.2.1 項)で説明したデータ共有の種類はすべて,共有データを格納しているクォドワードの残りの部分で,粒度に関する問題を発生させる可能性があります。

さらに,結果をプロセス空間に戻すような,非同期的に終了するライブラリ関数,または非同期システム・サービスをプロセスが起動した場合には,戻されたデータを格納するクォドワードで,粒度に関する問題が発生する可能性があります。たとえば,次の操作では,粒度に関する問題が発生する可能性があります。

  • 状態ブロックに書き込む非同期システム・サービス

  • プロセス・バッファに書き込む入出力操作

  • ダイレクト・メモリ・アクセス(DMA)・コントローラがプロセス・バッファに書き込みを実行する入出力操作

問題の検出

バイト粒度,ワード粒度,またはロングワード粒度の使用を検出するには,次の方法を用います。

問題への対処方法

クォドワード未満の粒度の使用に対処するには,次の方法を用います。

AXPコンパイラは,省略時の設定ではバイト粒度,ワード粒度,またはロングワード粒度をサポートしませんが,現在のコードとの互換性を維持するために,バイト粒度,ワード粒度,アラインされていないロングワード粒度,およびアラインされていないクォドワード粒度を指定できます。詳しくは,各コンパイラの解説書を参照してください。

読み込み/書き込みの粒度についての詳しい説明は,『 OpenVMS AXP オペレーティング・システムへの移行:再コンパイルと再リンク』を参照してください。

4.2.3.2.3 ページ・サイズに関する検討

ページ・サイズは,メモリ管理ルーチンとシステム・サービスが割り当てる仮想メモリのサイズを管理します。また,メモリ内のコードとデータに保護を割り当てる基礎にもなります。

OpenVMS VAXオペレーティング・システムは512バイトの倍数でメモリを割り当てます。しかし,全体的なシステム性能を向上するために,AXPシステムでは,各ハードウェア・プラットフォームに応じて,8KB〜64KBの大きなページ・サイズを採用しています。

ページ・サイズは,ワーキング・セット・クォータなど,システム資源を管理するときの基礎的な要素です。さらに,VAXシステムでのメモリ保護は,512バイトの各メモリ領域ごとに設定できます。AXP システムでは,メモリ保護の最小単位はシステムのページ・サイズに応じて,VAXシステムの場合よりはるかに大きくなります。

注意

ページ・サイズを大きく変更した結果,影響を受けるのは,512バイトのページ・サイズに明示的に依存しているアプリケーションだけです。たとえば,次のアプリケーションが考えられます。

  • 次の目的で"512"を使用しているアプリケーション

    • メモリの使用状況を計算するため

    • 必要なページ・テーブルのサイズを計算するため

  • 512バイト単位で保護を変更するアプリケーション

  • システム・サービスCreate and Map Section($CRMPSC)を使用して,ファイルをプロセス空間内の特定の位置にマッピングするアプリケーション(たとえば,使用可能なメモリが制限されているときにメモリを再利用するため)

問題の検出

VAXページ・サイズを使用している箇所を検出するには,512バイトひとかたまりで仮想メモリを操作するコードを識別するか,またはメモリ保護の最小単位として512バイトを使用しているコードを識別します。コードから10進数の511,512,または513,16進数の 1FF,200,または201などの数値を検索してください。

問題への対処方法

VAXとAXPのページ・サイズの相違によって発生する問題に対処するには,次のような方法を使用できます。

ページ・サイズについての詳しい説明は,『 OpenVMS AXP オペレーティング・システムへの移行:再コンパイルと再リンク』を参照してください。


前へ 次へ 目次 索引