日本-日本語

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

OpenVMS マニュアル


≫ 

OpenVMS V8.3
ライブラリ

タイトルページ
目次
まえがき
第 1 章:移行プロセスの概要
第 2 章:移行方法の選択
第 3 章:アプリケーションの移行
第 4 章:再コンパイルと再リンクの概要
第 5 章:ページ・サイズの拡大に対するアプリケーションの対応
第 6 章:共有データの整合性の維持
第 7 章:アプリケーション・データ宣言の移植性の確認
第 8 章:アプリケーション内の条件処理コードの確認
第 9 章:アプリケーションのトランスレート
第 10 章: ネイティブなイメージとトランスレートされたイメージの間の相互操作性の確認
第 11 章:OpenVMS Alpha コンパイラ
付録 A :アプリケーション評価チェックリスト
用語集
索引
PDF
OpenVMS ホーム
OpenVMS Alpha オペレーティング・システム | HPE 日本

OpenVMS Alpha
オペレーティング・システム
OpenVMS VAX から OpenVMS Alpha へのアプリケーションの移行


目次 索引

第 9 章
アプリケーションのトランスレート

この章では,Alpha システムで実行するために,VAX アプリケーションをトランスレートするときに使用するリソースについて説明します。

9.1 DECmigrate for OpenVMS Alpha

DECmigrate for OpenVMS Alpha は,ソース・コードを入手できないイメージをトランスレートするときに使用します。DECmigrate の VAX Environment Software Translator (VEST) コンポーネントは,VAX のバイナリ・イメージ・ファイルをネイティブな Alpha イメージにトランスレートします。トランスレートされたイメージは, Alpha コンピュータの Translated Image Environment (TIE) のもとで動作します (TIE は OpenVMS Alpha オペレーティング・システムで提供される共用可能イメージです)。トランスレーションでは,エミュレーションやインタプリテーションのもとで OpenVMS VAX イメージを実行することは行われません (ただし,特定の例外があります)。その代わり,新しい OpenVMS Alpha イメージには,元の OpenVMS VAX イメージの命令が実行していた操作と同じ操作を実行する Alpha 命令が含まれます。

トランスレートされたイメージは一般に,VAX コンピュータでオリジナル・イメージを実行するときと同じ速度で,Alpha コンピュータでも動作します。しかし,トランスレートされたイメージは,Alpha アーキテクチャのすべての利点を活用する最適化コンパイラを利用できません。したがって,トランスレートされたイメージは一般に,ネイティブな OpenVMS Alpha イメージの約 25〜40 パーセントの速度で動作します。このように性能が低下する主な理由は,アラインされないデータと複雑な VAX 命令を広範囲にわたって使用しているためです。

DECmigrate によるトランスレーション・サポートは, OpenVMS VAX バージョン 5.5-2 に存在する言語機能,システム・サービス,実行時ライブラリ・エントリ・ポイントに制限されています。

DECmigrate のもう 1 つの機能は,イメージを分析して,Alpha コンピュータで互換性が維持されない部分を識別することです。このように互換性が維持されない部分は,その種類に応じて,問題を修正するためにコンパイラ修飾子を指定したり,コードを変更することができます。

イメージ・トランスレーションと VEST の詳細については,『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください。

9.2 DECmigrate: トランスレートされたイメージのサポート

DECmigrate バージョン 1.1A は,OpenVMS バージョン 6.1 以降を実行する Alpha システムで動作します。トランスレートされたイメージを実行するには,このバージョンまたはそれ以降のバージョンが必要です。トランスレートされたイメージは一般に,それ以降のバージョンと互換性を維持しますが,以前のバージョンとの互換性は維持しません。つまり,DECmigrate バージョン 1.1A を使用してトランスレートされたイメージは,OpenVMS バージョン 6.1 以降を稼動している Alpha システムのみで動作できますが, DECmigrate バージョン 1.0 を使用してトランスレートされたイメージは, OpenVMS Alpha バージョン 1.0 以降で動作できます。 表 9-1 は,OpenVMS Alpha システムの各バージョンと,それをサポートする DECmigrate のバージョンを示しています。

表 9-1 OpenVMS Alpha の各バージョンでのトランスレートされたイメージのサポート
イメージをトランスレートするために使用した DECmigrate のバージョン トランスレートされたイメージに対する OpenVMS Alpha のサポート
  バージョン 1.0 バージョン 1.5 バージョン 6.1 以降
バージョン 1.0 サポートされる サポートされる サポートされる
バージョン 1.1 サポートされない サポートされる サポートされる
バージョン 1.1A サポートされない サポートされない サポートされる



9.3 Translated Image Environment (TIE)

イメージのトランスレーションは,VAX アプリケーションの一部または全部を OpenVMS Alpha に移行するための 1 つの手段です。 DECmigrate for OpenVMS AXP の VAX Environment Software Translator ユーティリティ (VEST) は, VAX 実行可能イメージまたは共用可能イメージを,同等の機能の Alpha イメージに変換することにより,トランスレートされたイメージを作成します。 VEST は,オプションとして提供されるレイヤード製品 DECmigrate for OpenVMS AXP の構成要素です。

トランスレートされたイメージが OpenVMS Alpha で実行される場合には,Translated Image Environment (TIE) がイメージを正しく実行するのに必要な VAX 環境を提供します。TIE は TIE$SHARE と TIE$EMULAT_TV という共用可能イメージで構成されます。これらのイメージは VAX の複合命令を実行します。移行におけるイメージ・トランスレーションの役割については,『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください。

この後の節では,次のことについて説明します。

  • ネイティブなイメージとトランスレートされたイメージの間の相互操作性

  • トランスレートされたイメージの実行

  • TIE 統計情報とフィードバック

ネイティブなイメージとトランスレートされたイメージの間の相互操作性

TIE は OpenVMS Alpha の他の構成要素と連携動作して,ネイティブなイメージとトランスレートされたイメージが相互に他のイメージを呼び出すことができるようにしています。相互操作性に依存したアプリケーションやランタイム・ライブラリを開発する場合には,コンパイル,リンク,またはトランスレートを行うときに,特定の手順に従わなければなりません。 第 9.3.1.4 項 に説明している最初の制限事項を参照してください。

トランスレートされたイメージの実行

トランスレートされたイメージを実行するには,DCL の RUN コマンドを使用します。次の例を参照してください。


$ RUN FOO_TV.EXE

OpenVMS Alpha に,適切なトランスレートされた共用可能イメージと実行時ライブラリが含まれていない限り,トランスレートされたイメージは正しく動作しません。イメージをトランスレートするときに, VEST は,入力イメージが参照しているイメージとライブラリに対応するイメージ情報ファイル (IIF---ファイル・タイプは .IIF) を必要とします。これらの .IIF ファイルを使用すると,VEST は共用可能イメージとライブラリのトランスレートされたバージョンを正しく参照するトランスレートされたイメージを作成できます。イメージのトランスレーションで使用されるイメージ情報ファイルは, OpenVMS Alpha で使用できるトランスレートされた共用可能イメージまたは実行時ライブラリのバージョンに正確に対応しなければなりません。

OpenVMS Alpha には,トランスレートされた実行時ライブラリと対応するイメージ情報ファイルがあります。これらは 第 9.4 節 に示すとおりです。トランスレートして実行するイメージで参照されているライブラリまたは共用可能イメージが含まれているかどうかを判断するには,このリストを確認してください。 OpenVMS Alpha に,必要な共用可能イメージまたはライブラリがない場合には,『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください。このマニュアルでは,イメージ情報ファイルの作成方法と使用方法を説明しています。

トランスレートされたライブラリがそのライブラリのネイティブ・バージョンに置き換えられた場合には,そのライブラリを指す論理名を適切に定義しなければなりません。つまり,image_TVimage に再定義しなければなりません。

TIE 統計情報とフィードバック

TIE の実行時サポート機能の他に,TIE の統計情報とフィードバックを使用すると,トランスレートされたイメージの性能を向上するのに役立ちます。

  • TIE は,トランスレートされたイメージの実行に関する統計情報を表示できます。これらの統計情報は,イメージが TIE リソースをどのように使用しているかとイメージ間のやり取りを記述します。

  • TIE は VAX コードのインタプリテーションで検出された VAX エントリ・ポイントに関する情報を記録できます。イメージを再度トランスレートする場合には,VEST はこの情報を使用して,より多くの VAX コードを検出し,トランスレートします。

『DECmigrate for OpenVMS AXP Systems Translating Images』では,これらの機能について詳しく説明しており,また,これらの機能の使用を有効または無効に設定するための論理名の定義方法についても説明しています。

9.3.1 問題点と制限事項

この節では,TIE の問題点と制限事項について説明します。

ネイティブ・イメージとトランスレートされたイメージの両方に対して設定できる条件ハンドラのタイプには,永久的な制限事項があります。ネイティブ・ルーチンは,トランスレートされた条件ハンドラを設定することができず,トランスレートされたルーチンはネイティブな条件ハンドラを設定できません。ネイティブ・イメージまたはトランスレートされたイメージがこの制限に違反すると,実行時の結果は予測できなくなります。

次の例外ハンドラの制限事項は永久的なものです。

  • 正しいプログラム・ステータス・ロングワード (PSL) を受け取ることに依存している例外ハンドラを含むトランスレートされたイメージは,正しく機能しないことがあります。例外が報告されるときに,VAX の PSL がないため, Alpha のプログラム・ステータス (PS) がシグナル・アレイに報告されます。

  • トランスレートされたイメージで,シグナル・アレイ内の PSL の変更に依存している例外ハンドラを使用している場合には,そのイメージは正しく機能しません。変更された PSL は障害のあるコードに伝達されません。



次の浮動小数点の制限事項は永久的なものです。

  • 場合によっては,同じデータを操作する浮動小数点命令が,Alpha システムではトラップを生成するのに,VAX システムでは生成しないという状況があります。とくに, OpenVMS Alpha で VAX 浮動小数点命令を実行すると, VAX ハードウェアが正しく処理できる "ダーティ・ゼロ" に対してトラップが生成されます。"ダーティ・ゼロ" とは,ゼロの代わりに使用される浮動小数点値です。ダーティ・ゼロを使用する操作を実行するトランスレートされたイメージとの互換性を維持するために,TIE にはダーティ・ゼロを修正し,浮動小数点演算を再実行する条件ハンドラが含まれています。しかし,このハンドラが正常に機能するのは,イメージをトランスレートするときに,/PRESERVE=FLOAT_EXCEPTIONS 修飾子を使用した場合だけです。
    トランスレートするときに /PRESERVE=FLOAT_EXCEPTIONS 修飾子を使用せず,ダーティ・ゼロに対して演算を実行するイメージは,HPARITH 例外を発生させ,要約状態のビット 1 がセットされます。トランスレートされたアプリケーションでこのような例外が発生した場合には, /PRESERVE=FLOAT_EXCEPTIONS を指定して再トランスレートしてください。 VAX のダーティ・ゼロが発生するのは一般に,浮動小数点データを 0 に初期化しなかったためです。この場合には,ダーティ・ゼロを使用するアプリケーションを OpenVMS Alpha に移植するために,ソース・コードを変更しなければならない可能性があります。

  • Alpha の D53 浮動小数点 (小数部が 56 ビットではなく,53 ビットの D 浮動小数点データ型) は,G 浮動小数点表現に変換された VAX の D 浮動小数点です。この変換の結果,次のような問題が発生します。次の VAX 命令について考えてみましょう。


    MOVD    (SP),R2 
    MOVD    R2,-(SP) 
    


    VEST は,これらの VAX 命令を次のような Alpha コードにトランスレートします。


    LDD     F2,0(R14)       ! Pick up D float 
    CVTDG   F2,F2           ! Convert to Canonical G Form with rounding 
    CVTGD   F2,F17          ! Convert back to D Form for storing 
    STD     F17,-8(R14)     ! Store the result 
    


    実行時に,VEST で生成されたコードは,D56 浮動小数点を G 正規形式に変換するときに,もっとも正確な G 浮動小数点の値を求めるために丸めを行います。場合によっては,G 正規形式に変換すると,D 浮動小数点の値が切り上げられ,D 浮動小数点では表現できない指数部を作成することがあります。この場合には,CVTGD 操作は HPARITH トラップを発生させ,その理由として浮動小数点オーバフローを示します。
    トランスレートされたイメージで実行時にこの問題が発生した場合には, VEST の /FLOAT=D56_FLOAT 修飾子を使用して再度トランスレートを行い,プログラムが正しく実行されるようにしなければなりません。



相互操作性に関して,次の制限事項に注意してください。

  • トランスレートされたイメージを呼び出すネイティブ・ルーチンや,トランスレートされたイメージから呼び出されるネイティブ・ルーチンは, /TIE 修飾子を使用してコンパイルし,/NONATIVE_ONLY 修飾子を使用してリンクしなければなりません。ネイティブ・イメージとトランスレートされたイメージの間の相互操作性の確認は実行時に行われます。ネイティブ・ルーチンのコンパイルとリンクで /TIE 修飾子と /NONATIVE_ONLY 修飾子を使用しなかった場合には,ネイティブ・ルーチンとトランスレートされたイメージが相互操作しようとするときに,実行時にエラーが発生します。このようなエラーが発生した場合には,ネイティブ・ルーチンの再コンパイルと再リンクを行ってください。

  • /TIE 修飾子を指定せずにコンパイルしたネイティブ・ルーチンで,トランスレートされたルーチンに対して間接呼び出しを実行すると,実行時にアクセス違反が発生することがあります。間接呼び出しは,トランスレートされたルーチンのアドレスを格納した変数を通じて行われます。この場合,ネイティブ・ルーチンからトランスレートされたルーチンへの呼び出しを援助するための自動ジャケット・コードはありません。ネイティブ・コードはネイティブ・プロシージャ記述子としてルーチン・アドレスを使用しようとします。ネイティブ・プロシージャのコード・アドレスは,プロシージャ記述子のベースからオフセット PDSC$L_ENTRY の位置にあります。オフセットの値は 8 です。トランスレートされたルーチンのアドレスはプロシージャ記述子として取り扱われるため,そのアドレスからオフセット 8 の値が呼び出すコードとして使用されます。この結果,通常はアクセス違反が発生します。
    この問題が発生した場合には,デバッガを使用して次のことを確認してください。

    • R27 が,トランスレートされたイメージを指しているかどうかを確認します。

    • 8(R27) のビット <31:2> がアクセス違反アドレスのビット <31:2> に等しいことを確認してください (Alpha 命令はロングワード・アラインされるため,すべてのビットが使用されるわけではありません)。

    • R26 がネイティブ・イメージを指していることを確認してください。

    • -4(R26) が JSR R26,(26) 命令であることを確認してください。

    これらのすべての確認で問題が検出されなかった場合には,/TIE 修飾子を使用してネイティブ・ルーチンを再コンパイルし,実行時に自動ジャケットが有効になるようにします。



次のトランスレートされた VAX C プログラムの制限事項は永久的なものです。

  • プログラムで VAX C RTL ルーチンの brk() を使用して動的メモリを解放する場合には (つまり,現在のブレーク・アドレスより小さいブレーク・アドレスを要求した場合),TIE が次に複合命令ルーチンを使用しようとしたときに,致命的なメモリ・アクセス違反が発生することがあります。このような違反が発生するのは,複合命令ルーチンが別のイメージ TIE$EMULAT_TV.EXE にあるからであり,これはルーチンの 1 つを最初に使用するときに, LIB$FIND_IMAGE_SYMBOL によって動的に起動されます。 このことが発生する時期と,メモリを解放する brk() 呼び出しに渡したアドレスに応じて,TIE$EMULAT_TV.EXE がロードされるメモリも解放される可能性があります。
    この問題を回避するには,メモリを解放するために brk() を絶対に使用しないか,またはメモリを解放するために後で使用するブレーク・アドレスを入手する前に,複合 VAX 命令を確実に実行します。メモリを割り当てるために brk() を使用しても問題はありません。

  • vfork() とエグゼクティブ関数を使用するトランスレートされた VAX C プログラムは,実行時にハングする可能性があります。 VAX C プログラムの子プロセスが強制終了され,エラーが発生した場合には,メールボックス入出力が完了するのを待ってハングしている可能性があります。この問題を回避するには,子プロセスが強制終了されないようにします。


目次 索引

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