日本-日本語

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

OpenVMS マニュアル


≫ 

OpenVMS
ライブラリ

タイトルページ
目次
まえがき
第 1 章:VAX, AlphaおよびOpenVMS
第 2 章:移行プロセスの概要
第 3 章:アプリケーションの評価: モジュールの調査
第 4 章:移行方法の選択
第 5 章:移行計画の作成
第 6 章:アプリケーションの移行
付録 A :アプリケーション評価チェックリスト
付録 B :移行計画の例
用語集
索引
PDF
OpenVMS ホーム
OpenVMS AXP オペレーティング・システム | HPE 日本(日本ヒューレット・パッカード株式会社)

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


目次 索引




イメージに対して2つの方法のどちらも使用できる場合には,AXPシステム上でイメージのネイティブ・バージョンとトランスレートされたバージョンを実行した場合の性能を予測し,イメージのトランスレートに必要な作業とネイティブな AXPイメージに変換するのに必要な作業を判断し,性能と作業量のバランスを考えなければなりません。

一般に,アプリケーションを構成する各イメージは異なるモードで実行できます。たとえば,ネイティブなAXPイメージからトランスレートされた共有可能イメージ(translated shareable image)を呼び出したり,その逆に呼び出すことが可能です。2つのアーキテクチャが混在したアプリケーションについての詳しい説明は,第 4.4.2 項 を参照してください。

表 4-1 では,2種類の移行方法を比較しています。

表 4-1 移行方法の比較
要素 再コンパイル/再リンク トランスレート
性能 完全なAXPの機能 通常,ネイティブAXPの25〜40%の性能
必要な作業 容易な場合も困難な場合もある 容易
スケジュールの制約 ネイティブ・コンパイラが提供されるかどうかに応じて異なる なし,ただちに可能
サポートされるプログラム
--バージョン VAX VMSバージョン4.0以前のソースのコンパイラ OpenVMS VAXバージョン4.0またはそれ以降のイメージのみがサポートされる
--制約事項 特権付きコードがサポートされる ユーザ・モードのコードだけがサポートされる
VAXとの互換性 高い。ほとんどのコードは問題なく再コンパイル/再リンクできる エミュレーションによって実現される
今後のサポートと保守 通常のソース・コードの保守 ソースは管理されない

アプリケーションをどのような方法で移行するかを決定するには,次の事項を考慮してください。

  • アプリケーションをソース・コードから完全に再構築しますか,それとも一部の機能に対してはバイナリ・イメージを使用しますか?

    バイナリ・イメージを使用する場合には,それらをトランスレートしなければなりません。

  • アプリケーションを構成する,すべてのイメージのソース・コードを入手できますか?

    ソース・コードを入手できないイメージは,トランスレートしなければなりません。

  • どのイメージがアプリケーションの性能に大きな影響を与えますか?

    AXPシステムの速度を有効に使用したいイメージは,再コンパイルしなければなりません。

    • 性能に大きな影響を与えるイメージを識別するには,Performance and Coverage Analyzer(PCA)を使用します。

    • AXPコンパイラが作成するイメージだけがAXPの処理機能を効率よく使用し,最適な性能を実現できます。トランスレートされたVAXイメージはネイティブAXP コードの1/3程度の速度,またはそれ以下の速度で実行されます。実際の速度は,使用するトランスレーション・オプションに応じて異なります。

  • 2つの方法を使用した場合,各イメージを変換するのに必要な作業量はどの程度ですか?

    • アプリケーションの複雑さによりますが,通常ソフトウェア・トランスレーションのほうが,再コンパイルおよび再リンクよりも少ない作業量と作業時間で済みます。

      ネイティブ・バージョンに移行する場合,OpenVMS AXPで実行するために,アプリケーションの一部だけをトランスレートすることができます。

    • VAXアーキテクチャ固有の機能や,VAX呼び出し規則に依存しているコードは直接再コンパイルできません。このようなコードはトランスレーションして実行するか,またはコードを変更して再コンパイルおよび再リンクしなければなりません。

アーキテクチャ間で互換性が維持されていない部分については,次の方法で対処できます。

  • アーキテクチャに依存するコード・シーケンスは,プラットフォームから独立した方法で,同じ操作をサポートする高級言語のレキシカル要素に置き換えます。

  • プロセッサ・アーキテクチャにとって適切な方法で作業を実行するために,OpenVMSシステム・サービスに対する呼び出しを使用します。

  • ソース・コードの変更箇所をできるだけ少なくし,正しくプログラムが動作するように,高級言語のコンパイラ・スイッチを使用します。

表 4-2 は,各プログラムのアーキテクチャに依存する部分が,プログラムをAXPシステムに移行するための2つの方法に,どのような影響を与えるかを示しています。詳しくは,『 OpenVMS AXP オペレーティング・システムへの移行:再コンパイルと再リンク』を参照してください。

表 4-2 移行方式の選択: アーキテクチャに依存する部分の取り扱い
再コンパイル/再リンクしたVAXソース トランスレートされたVAXイメージ
データ・アラインメント1
省略時の設定では,大部分のコンパイラはデータを自然なアラインメントにする。VAXアラインメントを保存するための修飾子についての説明は,『 OpenVMS AXP オペレーティング・システムへの移行:再コンパイルと再リンク』を参照。 アラインされていないデータもサポートされるが,/OPTIMIZE=ALIGNMENT修飾子を使用すれば,データがロングワードにアラインされていることを仮定することにより,実行速度を向上できる。
データ型
H浮動小数点はG浮動小数点またはIEEE T浮動小数点に変更する。

D浮動小数点の場合,D53フォーマットの15桁の精度で十分なときは,D浮動小数点をG浮動小数点に変更する。アプリケーションで16桁の精度(D56フォーマット)が必要な場合には,トランスレートしなければならない。

COBOLのパック10進数は操作のために自動的にバイナリ形式に変換される。

D浮動小数点の16桁の精度が必要な場合には,/FLOAT=D56_FLOAT修飾子を使用する。この修飾子を使用した場合,性能は,省略時の設定である/FLOAT=D53_FLOATを使用した場合より低下する。
読み込み/変更/書き込み操作の不可分性
サポートは各コンパイラが準備しているオプションに応じて異なる(詳しくは『 OpenVMS AXP オペレーティング・システムへの移行:再コンパイルと再リンク』を参照)。 /PRESERVE=INSTRUCTION_ATOMICITY修飾子を使用する。実行速度は半分に低下する。
バイト書き込み操作とワード書き込み操作の不可分性と粒度
適切にソース・コードを変更し,コンパイラ・オプションを使用することによりサポートされる(詳しくは『 OpenVMS AXP オペレーティング・システムへの移行:再コンパイルと再リンク』を参照)。 /PRESERVE=MEMORY_ATOMICITY修飾子を使用する。実行速度は半分に低下する。
ページ・サイズ
OpenVMS リンカは省略時の設定により,大きいAXPスタイルのページを作成する。 512バイトのページ・イメージの大部分はサポートされる。しかし,VESTはゆるやかな保護を割り当てるため,アクセス違反を検出するために厳しい保護に依存しているイメージを,トランスレートした場合,AXPシステムで正しく実行されない。
読み込み/書き込みの順序
適切な同期命令(MB)をソース・コードに追加することによりサポートされるが,性能は低下する。 /PRESERVE=READ_WRITE_ORDERING修飾子を使用する。
例外報告の即時性
コンパイラ・オプションの使用によって部分的にサポートされる(詳しくは『 OpenVMS AXP オペレーティング・システムへの移行:再コンパイルと再リンク』を参照)。 /PRESERVE=FLOAT_EXCEPTIONS修飾子または/PRESERVE=INTEGER_EXCEPTIONS修飾子を使用する。実行速度は半分に低下する。
VAXアーキテクチャおよび呼び出し規則への明示的な依存2
サポートされない。依存する部分は削除しなければならない。 サポートされる。


1アラインされていないデータは主に性能上の問題となります。アラインされていないデータを参照した場合,VAXシステムでは性能をある程度低下させるだけですが,AXPシステムでアラインされていないデータをメモリからロードしたり,アラインされていないデータをメモリに格納すると,アラインされた操作の場合より最高100倍も時間がかかる可能性があります。
2VAXアーキテクテャ固有の機能や呼び出し規則への依存としては,VAX呼び出し規則,VAX例外処理,VAX ASTパラメータ・リスト,VAX命令の形式と動作,およびVAX命令の実行時作成への明示的な依存などがある。



アプリケーションを再コンパイルできない場合や,VAXアーキテクチャ固有の機能をアプリケーションで使用している場合には,アプリケーションをトランスレートすることができます。アプリケーションの一部だけのトランスレートもでき,移行プロセスの一段階として一時的にアプリケーションの各部分をトランスレートすることができます。

再コンパイルに影響を与える多くの相違点について 第 4.2 節 で説明しましたが,これらの相違点は,トランスレートされたVAXイメージの性能にも影響を与える可能性があります。次の方法を使用すれば,VAXアーキテクチャに依存するイメージの互換性を向上できます(詳しくは『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください)。

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

    VESTのトランスレート時修飾子/OPTIMIZE=NOALIGNMENTを使用すれば,VESTは特別なインラインのAXPコードを生成し,アラインされていないデータの参照に対する例外を生成しないようにします。この修飾子を使用した場合,VESTは,アラインされたデータ参照だけを使用するコードよりも実行速度が約10倍も遅いAXPコードを作成します(省略時のオプションである/OPTIMIZE=ALIGNMENTを使用した場合には, アラインされていないデータは例外を生成しますが,この結果,アラインされたデータを実行する場合より約100倍の時間がかかります)。

  • 命令の不可分性

    トランスレータを起動するときに,トランスレート時修飾子

    /PRESERVE=INSTRUCTION_ATOMICITYを指定すれば,VESTは,指定したVAX命令セットに対してASTが不可分に実行されるようなAlpha AXP命令シーケンスを作成します。ASTは,このような不可分な操作を実行するAlpha AXP命令シーケンスの途中でも受け付けることができますが,ASTルーチンが終了したときに,命令シーケンスは最初から再起動されます。このため,/PRESERVE=INSTRUCTION_ATOMICITY修飾子を指定した場合,特定のコード・シーケンスの実行速度は半分に低下する可能性があります(トランスレータがASTの不可分なコードを生成するVAX命令の一覧と,ソフトウェア・トランスレータについての詳しい情報については,『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください)。

  • 読み込み/書き込みの粒度

    トランスレート時修飾子/PRESERVE=MEMORY_ATOMICITYを使用した場合,VESTは,バイト書き込みまたはワード書き込みの不可分性を保証します。この修飾子を指定すれば,メインライン・ルーチンとASTルーチンはロングワードまたはクォドワードに格納されている隣接するバイトを相互に妨害せずに更新できます。/PRESERVE=MEMORY_ATOMICITY修飾子は,自然にアラインされていないロングワードおよびクォドワード境界と交差するデータの不可分なアクセスを保証します。ただし,これらの修飾子を指定した場合,実行速度は半分に低下する可能性があります。

  • ページ・サイズとゆるやかな保護

    VAXイメージをAXPシステムで実行できるようにするために,VESTとイメージ・アクティベータは,VAXイメージ・セクションを大きいページにマッピングします。8KBページをサポートするAXPプロセッサでは,最大16ページのVAXページを1ページに格納できます。しかし,この大きいページは1つのページ・テーブル・エントリによってのみ記述されるため,そのページには1つの保護と1つのバッキング・ストアだけしか割り当てることができません。したがって,VESTが AXPページに割り当てる保護は,マッピングするAXPイメージ・セクションに関連する保護のうち,もっとも制限のゆるやかな保護です。このため,アクセス違反を検出するために厳しい保護に依存している VAXイメージは,トランスレートされた場合,AXPシステムで正しく実行されません。

    この問題に対処するための方法として,省略時のリンカ・オプション/BPAGEを使用して VAXでプログラムを再リンクし,ページを64KB境界にアラインする方法があります。

  • 正確な算術演算例外

    VESTでは,トランスレート時に/PRESERVE=FLOAT_EXCEPTIONS修飾子または /PRESERVE=INTEGER_EXCEPTIONS修飾子を使用することにより,特定の例外タイプに対して正確な例外報告を設定できます。これらの修飾子を指定した場合には,一部のコード・セグメントの実行速度は半分に低下します。

  • VAX命令の実行時作成

    実行時に作成されるVAX命令は,トランスレーションのもとでエミュレーションによって実行されます。しかし,エミュレートした命令はトランスレートされた命令より大幅に実行速度が遅く,アプリケーションの重要な部分の性能を向上するために実行時にコードを生成する場合,これは問題になります。

アーキテクチャ上のさまざまな相違点がイメージのトランスレートによってどのようにサポートされるかについては,表 4-2 を参照してください。

4.4.2 ネイティブ・イメージとトランスレートされたイメージの混在

一般に,AXPシステムではネイティブなAXPイメージとトランスレートされたイメージを組み合わせて使用できます。たとえば,ネイティブなAXPイメージからトランスレートされた共有可能イメージを呼び出したり,その逆の呼び出しを実行できます。

ネイティブなイメージとトランスレートされたイメージを組み合わせて実行するには,VAX呼び出し規則とAlpha AXP呼び出し規則の間で呼び出しを実行できなければなりません。ネイティブ・イメージとトランスレートされたイメージが次の条件を満たす場合には,特別な処理は必要ありません。

  • ネイティブなAXPイメージのルーチン・インターフェイス・セマンティックとデータ・アラインメント規則がVAXイメージのこれらのセマンティックおよび規則と等しいこと。

  • すべてのエントリ・ポイントがCALLxであること。つまり,外部JSBエントリ・ポイントが存在しないこと。高級言語で作成されたコードの場合には,この条件は満たされます。

一方の呼び出し規則を使用するプロシージャ(呼び出し元)が別の呼び出し規則を使用するプロシージャ(呼び出し先)を呼び出す場合には,ジャケット・ルーチンを使用して間接的に呼び出します。ジャケット・ルーチンはプロシージャのコール・フレームと引数リストを解釈し,呼び出し先プロシージャの対応するコール・フレームと引数リストを作成し,制御を呼び出し先プロシージャに渡します。呼び出し先プロシージャが実行を終了すると,ジャケット・ルーチンを通じて,制御を呼び出し元に戻します。ジャケット・ルーチンは呼び出し先ルーチンのリターン・レジスタの値を呼び出し元ルーチンのレジスタに書き込み,制御を呼び出し元プロシージャに戻します。

OpenVMS AXPオペレーティング・システムは,ほとんどの呼び出しに対してジャケット・ルーチンを自動的に作成します。自動的なジャケット機能を使用するには,アプリケーションの中でネイティブなAXPの部分を作成するときに,コンパイラ修飾子/TIEとリンカ・オプション/NONATIVE_ONLYを使用してします。

特定の場合には,アプリケーション・プログラムは特別に作成したジャケット・ルーチンを使用しなければなりません。たとえば,次のようなライブラリに対する非標準呼び出しの場合には,ジャケット・ルーチンを作成しなければなりません。

  • 外部JSBエントリ・ポイントを含むVAX共有可能ライブラリ

  • 転送ベクタに読み込み/書き込みデータを含むライブラリ

  • VAX固有の関数を登録したライブラリ

  • ライブラリのネイティブ・バージョンとトランスレートされたバージョンの間で共有しなければならない資源を使用するライブラリ

  • VAXイメージが提供していたすべてのシンボルを提供またはエクスポートしないネイティブなAXPライブラリ

    (エクスポートという用語は,ルーチンがイメージのグローバル・シンボル・テーブル(GST)に登録されたことを意味します。)

これらの状況でジャケット・イメージを作成する方法については,『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください。

OpenVMS AXPオペレーティング・システムとともに提供されるトランスレートされた共有可能イメージ(たとえば,ネイティブなAXPコンパイラのない言語のランタイム・ライブラリなど)には,ジャケット・ルーチンが添付されており,これらのジャケット・ルーチンを使用すれば,トランスレートされた共有可能イメージをネイティブなAXPイメージから呼び出すことができます。


目次 索引

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