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


前へ 次へ 目次 索引


このプログラムをAlphaシステムで実行するには,条件コードを SS$_INTOVFからSS$_HPARITHに変更しなければなりません(オーバーフローのタイプはシグナル・アレイ内の例外サマリ引数を調べることにより判断できます。詳しくはコンパイラに関する解説書を参照してください)。VAXシステムの場合と同様に,オーバーフロー検出を可能にするためにはコンパイル・コマンド・ラインに /CHECK=OVERFLOW修飾子を指定なければなりません。DEC Fortran はLIB$ESTABLISHルーチンを組み込み関数として受け付けるため,このルーチンの呼び出しを削除する必要はありません。

例 8-2 条件処理プログラムの例

C       This program types a maximum value of integers 
C       Compile with /CHECK=OVERFLOW and the /EXTEND_SOURCE qualifiers 
 
        INTEGER*4 int4 
        EXTERNAL HANDLER 
        CALL LIB$ESTABLISH (HANDLER)  (1)
 
        int4=2147483645 
        WRITE (6,*) ' Beginning DO LOOP, adding 1 to ', int4 
        DO I=1,10 
          int4=int4+1 
          WRITE (6,*) ' INT*4 NUMBER IS  ', int4 
        END DO 
        WRITE (6,*) ' The end ...' 
        END 
 
C       This is the condition-handling routine 
 
        INTEGER*4 FUNCTION HANDLER (SIGARGS, MECHARGS) 
        INTEGER*4 SIGARGS(*),MECHARGS(*) 
        INCLUDE '($FORDEF)' 
        INCLUDE '($SSDEF)' 
        INTEGER INDEX 
        INTEGER LIB$MATCH_COND 
   
        INDEX = LIB$MATCH_COND (SIGARGS(2), SS$_INTOVF) (2)
        IF (INDEX .EQ. 0 ) THEN 
           HANDLER = SS$_RESIGNAL 
        ELSE IF (INDEX .GT. 0) THEN 
           WRITE (6,*) 'Arithmetic exception detected...' 
           CALL LIB$STOP(SIGARGS(1)) 
        END IF 
        END 

次のリストの各項目は 例 8-2 に示されている番号に対応しています。

  1. この例では,条件処理ルーチンを指定するためにLIB$ESTABLISHを呼び出します。

  2. Alphaシステムでは,条件コードをSS$_INTOVFからSS$_HPARITHに変更しなければなりません。条件処理ルーチンはLIB$STOPルーチンを呼び出すことにより,プログラムの実行を終了します。

次の例は,例 8-2 に示したプログラム名をコンパイル,リンク,および実行する方法を示しています。


$ FORTRAN/EXTEND_SOURCE/CHECK=OVERFLOW  HANDLER_EX.FOR
$ LINK  HANDLER_EX
$ RUN   HANDLER_EX
 Beginning DO LOOP, adding 1 to 2147483645 
 INT*4 NUMBER IS    2147483646 
 INT*4 NUMBER IS    2147483647 
Arithmetic exception detected... 
%TRACE-F-TRACEBACK, symbolic stack dump follows 
 Image Name   Module Name     Routine Name    Line Number  rel PC      abs PC 
 INT_OVR_HAND INT_OVR_HANDLER HANDLER                1637 00000238    00020238 
 DEC$FORRTL                                             0 000651E4    001991E4 
----- above condition handler called with exception 00000504: 
%SYSTEM-F-HPARITH, high performance arithmetic trap, Imask=00000001, Fmask=00000 
000, summary=40, PC=000200E0, PS=0000001B 
-SYSTEM-F-INTOVF, arithmetic trap, integer overflow at PC=000200E0, PS=0000001B 
----- end of exception message 
                                                        0 84FE9FFC    84FE9FFC 
 INT_OVR_HAND INT_OVR_HANDLER INT_OVR_HANDLER          15 000000E0    000200E0 
                                                        0 84EFD918    84EFD918 
                                                        0 7FF23EE0    7FF23EE0 


第 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 は 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 の統計情報とフィードバックを使用すると,トランスレートされたイメージの性能を向上するのに役立ちます。

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

9.3.1 問題点と制限事項

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

9.3.1.1 条件ハンドラに関する制限事項

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

9.3.1.2 例外ハンドラに関する制限事項

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

9.3.1.3 浮動小数点に関する制限事項

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

9.3.1.4 相互操作性に関する制限事項

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


前へ 次へ 目次 索引