OpenVMS Alpha オペレーティング・システム | HPE 日本(日本ヒューレット・パッカード株式会社)
OpenVMS Alpha オペレーティング・システム OpenVMS VAX から OpenVMS Alpha へのアプリケーションの移行
トランスレーション・サポートは,ユーザが Alpha に移行する際に発生する障害を削減するために提供されています。それは次の理由によるものです。
- 最初は言語サポートが完全に行われなかったため
- 再コンパイルのためにソース・コードを入手できないため
- VAX アーキテクチャの特定の機能に大きく依存しているコードを再コンパイルするのが困難なため
VAX バージョンが現在も活発に開発されている言語に対して,ネイティブな Alpha バージョンも提供されています。TIE は, OpenVMS VAX バージョン 5.5-2 のリリースの時点で提供されていた言語機能をサポートできるように維持管理されています。
同様に,システム・サービスや実行時ライブラリのエントリ・ポイントの使用が,OpenVMS VAX バージョン 5.5-2 で提供されていたものに制限されているイメージに対しては,トランスレーションがサポートされます。
もっと新しい VAX レイヤード製品がインストールされている場合には,アプリケーションでトランスレーションに適したイメージを再構築することが必要なときに,いくつかの追加手順が必要になることがあります。たとえば, OpenVMS VAX 用の DECwindows Motif バージョン 1.2 またはバージョン 1.2--3 では,トランスレーションにとって適切であるように, OSF Motif バージョン 1.2.2 やバージョン 1.2.3 のライブラリではなく, OSF Motif バージョン 1.1.3 ライブラリまたは DECwindows XUI ライブラリを使用してイメージを作成しなければなりません。
同様に,DEC Fortran for VAX の最近のバージョンを使用するイメージの場合,トランスレーションに適した Fortran プログラムをコンパイルするために追加の修飾子が必要です。
詳細については,それぞれの VAX 製品のリリース・ノートを参照してください。
OpenVMS VAX イメージを将来,再構築したり,再トランスレーションしなければならない状況では,安全措置として,関連する OpenVMS VAX バージョン 5.5-2 共用可能イメージのコピーを別の VAX ディレクトリに保存し,これらのイメージに対して VAX アプリケーションの新しいバージョンをリンクするようにしてください。この手法を使用する場合,作成されるイメージは新しい OpenVMS VAX 共用可能イメージと互換性があり (OpenVMS の既存の機能を拡張した機能を使用できます),また,OpenVMS Alpha にトランスレーションするためにイメージを正しく構築できます (共用可能イメージの新しいバージョンは必要ありません)。
この後の節では,トランスレートされたイメージ,イメージ情報ファイル,および OpenVMS Alpha で提供されるその他の関連ファイルについて説明します。
OpenVMS Alpha には,トランスレートされたメッセージ・イメージはありません。メッセージ・イメージはすべて,ネイティブ・イメージとして作成されます。
SYS$LIBRARY: 内のトランスレートされたイメージ
BASRTL2_D53_TV.EXE
BASRTL2_D56_TV.EXE
BASRTL_D56_TV.EXE
BASRTL_TV_SUPPORT.EXE
BLAS1RTL_D53_TV.EXE
BLAS1RTL_D56_TV.EXE
COBRTL_D56_TV.EXE
DBLRTL_D56_TV.EXE
EDTSHR_TV.EXE
FORRTL2_TV.EXE
FORRTL_D56_TV.EXE
LIBRTL2_D56_TV.EXE
LIBRTL_D56_TV.EXE
MTHRTL_D53_TV.EXE
MTHRTL_D56_TV.EXE
PASRTL_D56_TV.EXE
PLIRTL_D56_TV.EXE
RPGRTL_TV.EXE
SCNRTL_TV.EXE
TECOSHR_TV.EXE
TIE$EMULAT_TV.EXE
UVMTHRTL_D53_TV.EXE
UVMTHRTL_D56_TV.EXE
VAXCRTLG_D56_TV.EXE
VAXCRTL_D56_TV.EXE
VMSRTL_TV.EXE
SYS$SYSTEM: 内のトランスレートされたイメージ
DBLMSGMGR_TV.EXE
EDF_TV.EXE
EDT_TV.EXE
MONITOR_TV.EXE
TECO32_TV.EXE
IMAGELIB: 内のトランスレートされた RTL イメージ
BASRTL2_D53_TV.EXE
BASRTL_D56_TV.EXE
BLAS1RTL_D53_TV.EXE
COBRTL_D56_TV.EXE
DBLRTL_D56_TV.EXE
FORRTL2_TV.EXE
FORRTL_D56_TV.EXE
LIBRTL_D56_TV.EXE
PLIRTL_D56_TV.EXE
RPGRTL_TV.EXE
SCNRTL_TV.EXE
トランスレートされた RTL の大部分は,D53 形式ではなく,D56 形式で提供されます。一部は両方の形式で提供されます。両方の形式が提供される場合には,省略時の形式は D53 です。トランスレートされた実行時ライブラリの詳細については, 第 9.5 節 を参照してください。
SYS$LIBRARY: 内のイメージ情報ファイル
ACLEDTSHR.IIF
BASRTL2.IIF
BASRTL.IIF
BLAS1RTL.IIF
COBRTL.IIF
CONVSHR.IIF
CRFSHR.IIF
DBLRTL.IIF
DCXSHR.IIF
DISMNTSHR.IIF
DTKSHR.IIF
EDTSHR.IIF
ENCRYPSHR.IIF
EPC$SHR.IIF
FDLSHR.IIF
FORRTL.IIF
FORRTL2.IIF
INIT$SHR.IIF
LBRSHR.IIF
LIBRTL.IIF
LIBRTL2.IIF
MAILSHR.IIF
MOUNTSHR.IIF
MTHRTL.IIF
NCSSHR.IIF
P1_SPACE.IIF
PASRTL.IIF
PLIRTL.IIF
PPLRTL.IIF
PTD$SERVICES_SHR.IIF
RPGRTL.IIF
S0_SPACE.IIF
SCNRTL.IIF
SCRSHR.IIF
SECURESHR.IIF
SMBSRVSHR.IIF
SMGSHR.IIF
SORTSHR.IIF
SPISHR.IIF
TECOSHR.IIF
TPUSHR.IIF
UVMTHRTL.IIF
VAXCRTL.IIF
VAXCRTLG.IIF
VMSRTL.IIF
システム論理名の定義
次のシステム論理名は,トランスレートされた環境を使いやすくするために定義されています。
ACLEDTSHR_TV = ACLEDTSHR
CDDSHR_TV = CDDSHR
CONVSHR_TV = CONVSHR
CRFSHR_TV = CRFSHR
DCXSHR_TV = DCXSHR
DISMNTSHR_TV = DISMNTSHR
DTKSHR_TV = DTKSHR
ENCRYPSHR_TV = ENCRYPSHR
EPC$SHR_TV = EPC_SHR
FDLSHR_TV = FDLSHR
INIT$SHR_TV = INIT$SHR
LBRSHR_TV = LBRSHR
MAILSHR_TV = MAILSHR
MOUNTSHR_TV = MOUNTSHR
NCSSHR_TV = NCSSHR
PPLRTL_TV = PPLRTL
PTD$SERVICES_SHR_TV = PTD$SERVICES_SHR
SCRSHR_TV = SCRSHR
SECURESHR_TV = SECURESHR_JACKET
SMBSRVSHR_TV = SMBSRVSHR
SMGSHR_TV = SMGSHR
SORTSHR_TV = SORTSHR
SPISHR_TV = SPISHR
TPUSHR_TV = TPUSHR
BASRTL_TV = BASRTL_D56_TV
BASRTL2_TV = BASRTL2_D53_TV
BLAS1RTL_TV = BLAS1RTL_D53_TV
COBRTL_TV = COBRTL_D56_TV
DBLRTL_TV = DBLRTL_D56_TV
FORRTL_TV = FORRTL_D56_TV
LIBRTL_TV = LIBRTL_D56_TV
LIBRTL2_TV = LIBRTL2_D56_TV
MTHRTL_TV = MTHRTL_D53_TV
PASRTL_TV = PASRTL_D56_TV
PLIRTL_TV = PLIRTL_D56_TV
VAXCRTL_TV = VAXCRTL_D56_TV
VAXCRTLG_TV = VAXCRTLG_D56_TV
DBLMSGMGR = DBLMSGMGR_TV
EDTSHR_TV = EDTSHR
TECO32 = TECO32_TV
TECOSHR = TECOSHR_TV
VMSRTL = VMSRTL_TV
DBLRTLMSG = DBL$MSG
PASMSG = PAS$MSG
PLIMSG = PLI$MSG
RPGMSG = RPG$MSG
SCNMSG = SCN$MSG
VAXCMSG = DECC$MSG
OpenVMS Alpha キットの一部として,DEC はトランスレートされた実行時ライブラリを提供しています。
VAX 実行時ライブラリのルーチンの一部は,倍精度算術演算に対して VAX D 浮動小数点データ型を使用します。
これらのライブラリのトランスレートされたバージョンでは,省略時の設定では, Alpha の D56 D 浮動小数点データ型が使用されます (VAX 実行時ライブラリでは D 浮動小数点を使用していました)。この結果, VAX D 浮動小数点の 56 ビットの仮数部の完全な精度が提供されるため,実行時の性能は低下しますが,一貫性のある結果が求められます。
性能が重要な算術演算関連のライブラリの場合には,倍精度演算に対して Alpha の D53 D 浮動小数点データ型を使用する,トランスレートされた実行時ライブラリのバージョンも提供しています。これらのライブラリの場合,省略時の設定は D53 形式です。D53 形式は,仮数部の下位 3 ビットの精度を犠牲にして性能を向上します。
次のトランスレートされたライブラリは,D56 形式でのみ提供されます。
- BASRTL
- COBRTL
- DBLRTL
- FORRTL
- LIBRTL
- LIBRTL2
- PASRTL
- PLIRTL
- VAXCRTL
- VAXCRTLG
次のトランスレートされたライブラリは,D56 形式と D53 形式 (省略時の設定) の両方で提供されます。
- BASRTL2
- BLAS1RTL
- MTHRTL
- UVMTHRTL
実行時ライブラリの D56 形式へのアクセス
実行時ライブラリを使用する場合には,省略時の設定により,次の処理が行われます。
- BASRTL2 の場合,倍精度データに対して MAT 関数を使用するトランスレートされた BASIC イメージは,D53 データ型を使用する BASIC 実行時ライブラリ・ルーチンを起動します。
- BLAS1RTL の場合,倍精度浮動小数点引数を使用する BLAS$ 関数を起動するトランスレートされたイメージは,D53 データ型を使用するルーチンを呼び出します。
- MTHRTL の場合,MTH$ 倍精度浮動小数点関数を起動するトランスレートされたイメージは,D53 データ型を使用するルーチンを呼び出します。
- その他の場合は,省略時の設定により,Alpha の D56 浮動小数点データ型が使用されます。
一部のユーザは D56 浮動小数点の完全な精度を必要とします。しかし, D56 ルーチンを使用すると,性能が大幅に低下します。 D56 ルーチンにアクセスするには, 表 9-2 に示すように, D56 形式を指す実行時ライブラリの論理名を再定義しなければなりません。サイトの必要に応じて,論理名はプロセス単位で定義するか,またはシステム単位で定義できます。
表 9-2 実行時ライブラリの論理名
BASRTL2
|
BASRTL2_TV
|
BASRTL2_D56_TV
|
BLAS1RTL
|
BLAS1RTL_TV
|
BLAS1RTL_D56_TV
|
MTHRTL
|
MTHRTL_TV
|
MTHRTL_D56_TV
|
9.5.1 CRF$FREE_VM と CRF$GET_VM: トランスレートされた呼び出しルーチン |  |
トランスレートされたルーチンから CRF$FREE_VM と CRF$GET_VM を呼び出す場合,トランスレートされた呼び出し側は正しく機能しません。トランスレートされた呼び出し側は VAX JSB のセマンティックを期待していますが,ネイティブ・コードには (当然のことながら) Alpha JSB セマンティックが存在します。
この問題を回避するには,トランスレートされた呼び出し側は JSB ではなく, CALL を使用しなければなりません。
この後の節では,トランスレートされた VAX C 実行時ライブラリに関連するリリース・ノートを示します。
9.6.1 問題点と制限事項 |  |
この節では, OpenVMS Alpha のトランスレートされた VAX C 実行時ライブラリ (VAX C RTL) で報告されている問題点と制限事項について説明します。
トランスレートされた VAX C RTL は,OpenVMS VAX バージョン 5.4 の VAX C RTL のトランスレートされたバージョンです。VAX C RTL のそのリリースに存在する問題と制限事項はすべて,トランスレートされた VAX C RTL にもそのまま存在します。トランスレートされた VAX C RTL の機能上の制限事項は次のとおりです。
- fmod() 関数は D_FLOAT に対して正しい結果を生成しません。
- SIGFPE シグナルを使用する D_FLOAT プログラムは,すべての浮動小数点例外を検出できない可能性があります。/FLOAT=D56_FLOAT を使用するプログラムをトランスレートすると,SIGFPE に関するほとんどの問題を修正できます。
- sbrk() 関数は,SYS$EXPREG から戻される値と一致しないアドレスを戻します。
- HUGE_VAL 定数を使用するか,または算術演算関数 (HUGE_VAL を戻す可能性のある関数) を呼び出す D_FLOAT プログラムは, /FLOAT=D56_FLOAT を使用してトランスレートした場合を除き,異常終了する可能性があります。
- 特定の状況では,一部の算術演算関数 (D_FLOAT または G_FLOAT) は,エラー番号を ERANGE または EDOM に設定するのではなく,高い性能の算術演算トラップ例外を生成する可能性があります。
トランスレートされた VAX C RTL がネイティブな DEC C RTL と相互操作する場合には,次の制限事項が適用されます。
- 次のように制御を移すために,longjmp 関数を使用することはできません。
- ネイティブ・ルーチンからトランスレートされたルーチンへ
- トランスレートされたルーチンからネイティブ・ルーチンへ
- malloc や calloc などによって割り当てられたメモリは,同じコンテキストで解放しなければなりません。つまり,トランスレートされたルーチンがメモリを割り当てる場合には,メモリの割り当てを解釈するための free 呼び出しもトランスレートされたルーチンで行わなければなりません。トランスレートされたルーチンでメモリを割り当て,そのメモリの割り当てをネイティブ・ルーチンで解除すると,ヒープが破壊されます。同様に,ネイティブ・ルーチンでメモリを割り当て,トランスレートされたルーチンでメモリの割り当てを解除すると,やはりヒープが破壊されます。
- トランスレートされたルーチンでシグナル (および関連) 関数によって設定されたシグナル・ハンドラは,シグナルが発生するときに起動されません。ネイティブ・シグナル・ハンドラだけが UNIX スタイルのシグナルを検出できます。
- SIGEMT,SIGTRAP,SIGIOT,SIGFPE の各シグナルがトランスレートされたイメージによって発生する場合,これらのシグナルを検出することはできません。
- exec 関数は類似したイメージを起動するためにだけ使用できます。つまり,ネイティブ・イメージで起動された exec 関数は,トランスレートされたイメージを実行できません。同様に,トランスレートされたイメージで起動された exec 関数は,ネイティブ・イメージを実行できません。
- 後でシステム呼び出しを実行するために,ネイティブ・イメージで vfork を実行してコンテキストを設定し,その後,トランスレートされたイメージでシステム呼び出しを起動した場合,アクセス違反が発生します。
- ファイル・ポインタとファイル記述子をネイティブ・イメージとトランスレートされたイメージの間で共用することはできません。ファイルをトランスレートされたイメージで開いた後,ネイティブ・イメージでそのファイル・ポインタを使用して読み込みまたは書き込みを実行しようとした場合,アクセス違反が発生するか,またはファイルが壊れる可能性があります。ネイティブ・イメージでファイルを開いた後,そのファイル・ポインタを使用してトランスレートされたイメージが読み込みまたは書き込みを実行しようとした場合にも,同じ結果が発生します。
これらの制限された処理を実行するプログラムでは,アクセス違反が発生するか,またはその他の例外が発生します。このような制限された操作を検出し,実行されないようにするために,徹底的なテストを行ってください。
OpenVMS Alpha オペレーティング・システムでは, VAX COBOL バージョン 5.0 コンパイラ (またはそれ以前のコンパイラ) を使用してコンパイルされ,トランスレートされた VAX COBOL プログラムの実行をサポートします。
9.7.1 問題点と制限事項 |  |
VAX COBOL バージョン 5.1 コンパイラでコンパイルされたプログラムは, OpenVMS Alpha オペレーティング・システムでサポートされません。
|