日本-日本語

製品  >  ソフトウェア  >  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 へのアプリケーションの移行


目次 索引

第 4 章
再コンパイルと再リンクの概要

この章では,アプリケーションを構成するソース・ファイルを再コンパイルおよび再リンクすることにより,VAXシステム上で動くアプリケーションをAlphaシステムに移行する (migrate) プロセスについて,その概要を説明します。

一般に,アプリケーションが高級プログラミング言語で作成されている場合には,わずかな作業でAlphaシステムで実行できるようになります。高級言語では,アプリケーションをマシン・アーキテクチャから分離します。さらに, Alphaシステム上のプログラミング環境のほとんどの部分は,VAXシステムのプログラミング環境と同じです。したがって,Alpha版の各言語のコンパイラと OpenVMSリンカ・ユーティリティを使用すれば,アプリケーションを構成するソース・ファイルを再コンパイルおよび再リンクでき,ネイティブな Alphaイメージを作成できます。

アプリケーションがVAX MACROで作成されている場合は,最低限の作業だけで Alphaシステム上でも実行できる可能性があります。ただし一般には, VAXのアーキテクチャに依存する何らかの要素が含まれており,それに応じた変更を加えなければなりません。

内側のモードや高い割り込み優先順位レベル(IPL)で動作する特権アプリケーションは,コード内でオペレーティング・システムの内部的な動作に関するさまざまな仮定を行っているので,大幅な書き換えが必要になります。一般に,このようなアプリケーションは OpenVMS VAXオペレーティング・システムのメジャー・リリースのたびに大幅な変更を加える必要が生じます。

注意

高級言語で作成されたアプリケーションであっても,アーキテクチャ固有の機能に依存することがあります。また,新しいプラットフォームへの移行の際に,アプリケーション内の隠れたバグが表面化することもあります。



VAXシステムでサポートされる言語の多くは,Alphaシステムでもサポートされます。たとえば FORTRAN や C などです。Alphaシステムで共通に使用できるプログラミング言語のコンパイラについての詳しい説明は, 第 11 章 を参照してください。

Alphaシステムで使用出来るコンパイラは,それぞれVAXシステムの対応するコンパイラと互換性を維持するように設計されています。各コンパイラは言語標準規格に準拠し,また,VAXの言語拡張機能の大部分をサポートします。コンパイラは,VAXシステムの場合と同じ省略時のファイル・タイプで,出力ファイルを作成します。たとえば,オブジェクト・モジュールのファイル・タイプは.OBJです。

しかし,VAXシステムのコンパイラがサポートする一部の機能は,Alphaシステムの同じコンパイラでサポートされません。さらに,Alphaシステムのいくつかのコンパイラは,VAXシステムの対応するコンパイラがサポートしない新しい機能をサポートします。また互換性を維持するために,一部のAlphaコンパイラは互換モードをサポートします。たとえば,DEC C for OpenVMS Alpha システムのコンパイラはVAX C互換モードをサポートし,このモードは /STANDARD=VAXC修飾子を指定することにより起動されます。

4.2 Alphaシステムでのアプリケーションの再リンク

ソース・ファイルを正しく再コンパイルした後,アプリケーションを再リンクしてネイティブなAlphaイメージを作成しなければなりません。リンカは現在の VAXシステムと同じファイル・タイプで,出力ファイルを作成します。たとえば,省略時の設定では,リンカはイメージ・ファイルのファイル・タイプとして .EXEを使用します。

Alphaシステムではある種のリンク作業を実行する方法が異なるため,アプリケーションを構築するために使用するLINKコマンドを変更しなければなりません。次のリストは,アプリケーションのビルド手順に影響を与える可能性のある,これらのリンカの変更点を説明しています。詳しくは『OpenVMS Linker Utility Manual』を参照してください。

  • 共有可能イメージ内でのユニバーサル・シンボルの宣言--- アプリケーションが共有可能イメージを作成する場合には,おそらくアプリケーションのビルド・プロシージャにVAX MACROで作成された転送ベクタ・ファイルが含まれており,共有可能イメージ内のユニバーサル・シンボルが宣言されています。Alphaシステムでは,転送ベクタ・ファイルを作成するかわりに, SYMBOL_VECTORオプションを指定することにより,リンカ・オプション・ファイルでユニバーサル・シンボルを宣言しなければなりません。

  • OpenVMSエグゼクティブに対するリンク--- VAXシステムでは,ビルド・プロシージャにシステム・シンボル・テーブル・ファイル(SYS.STB)をインクルードすることにより,OpenVMSエグゼクティブに対してリンクします。Alphaシステムでは,/SYSEXE修飾子を指定することにより, OpenVMSエグゼクティブに対してリンクします。

  • イメージの性能の最適化--- Alphaシステムでは,リンカは作成したイメージの性能を向上させるために最適化を行います。さらにリンカは,常駐イメージとしてインストール可能な共有可能イメージを作成できます。この結果,さらに性能を向上できます。

  • 共有可能イメージの暗黙の処理---VAXシステムでは,リンク操作で共有可能イメージを指定した場合,リンカは共有可能イメージがリンクされる対象となるすべての共有可能イメージも処理します。 Alphaシステムでは,ビルド・プロシージャがこれらの共有可能イメージを含む場合,これらのイメージを明示的に指定しなければなりません。

リンカは 表 4-1 にある Alphaシステム固有の修飾子とオプションをサポートします。 表 4-2 は, VAX システムではサポートされ,Alphaシステムのリンカではサポートされないリンカ修飾子を示しています。

表 4-1 OpenVMS Alphaシステム固有のリンカ修飾子とオプション
修飾子 説明
/DEMAND_ZERO リンカがデマンド・ゼロ・イメージ・セクションを作成する方法を制御する。
/DSF OpenVMS Alpha システムコード・デバッガで使用するために,デバッグ・シンボル・ファイル (DSF) と呼ぶファイルを作成するようにリンカに要求する。
/GST 共有可能イメージに対してグローバル・シンボル・テーブル(GST) を作成することをリンカに要求する(省略時の設定)。ランタイム・キット用に共有可能イメージを作成する場合には,/NOGSTを指定する方が一般的である。
/INFORMATIONALS リンク操作で情報メッセージを出力することをリンカに要求する(省略時の設定)。/NOINFORMATIONALSを指定する方が一般的であり,その場合には情報メッセージは出力されない。
/NATIVE_ONLY 作成しているイメージに,コンパイラが作成したプロシージャ・シグネチャ・ブロック (PSB) 情報を 渡さない ようにリンカに要求する (省略時の設定)。

リンク中に /NONATIVE_ONLY を指定した場合には,イメージ・アクティベータは,ジャケット・ルーチンを起動するために,リンク操作に対する入力ファイルとして指定されたオブジェクト・モジュールで提供された PSB 情報を使用する。ネイティブな Alpha イメージが,トランスレートされた VAX イメージと連携動作するには,ジャケット・ルーチンが必要である。

/REPLACE コンパイラによって要求された場合,作成中のイメージの性能を向上するための最適化を行うことをリンカに要求する(省略時の設定)。
/SECTION_BINDING 常駐イメージとしてインストール可能な共有可能イメージを作成することをリンカに要求する。
/SYSEXE リンク操作で解釈されなかったシンボルを解釈するために OpenVMSエグゼクティブ・イメージ(SYS$BASE_IMAGE.EXE)を処理することをリンカに要求する。
オプション 説明
SYMBOL_TABLE=オプション 共有可能イメージに関連するシンボル・テーブル・ファイルにユニバーサル・シンボルだけでなく,グローバル・シンボルも登録することをリンカに要求する。省略時の設定では,リンカはユニバーサル・シンボルだけを登録する。
SYMBOL_VECTOR=オプション Alpha共有可能イメージでユニバーサル・シンボルを宣言するために使用する。

表 4-2 OpenVMS VAX システム固有のリンカ・オプション
オプション 説明
BASE= オプション リンカがイメージを割り当てるベース・アドレス (先頭アドレス) を指定する。
DZRO_MIN= オプション リンカがイメージ・セクションからページを取り出し,それを新たに作成したデマンド・ゼロ・イメージ・セクションに配置する前に,リンカがイメージ・セクションで検出しなければならない連続した初期化されていないページの最小数を指定する。デマンド・ゼロ・イメージ・セクション (初期化されたデータを含まないイメージ・セクション) を作成すると,リンカはイメージのサイズを小さくできる。
ISD_MAX= オプション イメージ内で認められるイメージ・セクションの最大数を指定する。
UNIVERSAL= オプション 共用可能イメージ内のシンボルをユニバーサルとして宣言し,リンカがそのシンボルを共用可能イメージのグローバル・シンボル・テーブルに登録するようにする。



4.3 VAXシステムとAlphaシステムの算術演算ライブラリ間の互換性

OpenVMS Mathematics (MTH$)ランタイム・ライブラリに対して標準的な VMS呼び出しインターフェイスを使用する算術演算アプリケーションを,Alphaシステムに移行するときには,MTH$ルーチンの呼び出しを変更する必要はありません。これは, MTH$ルーチンをDigital Portable Mathematics Library (DPML) for Alphaシステムの対応するmath$に変換するためのジャケット・ルーチンが準備されているからです。しかし,JSBエントリ・ポイントとベクタ・ルーチンに対して実行される呼び出しは, DPMLでサポートされません。DPMLルーチンはOpenVMS MTH$ RTL のルーチンと異なっており,算術演算の結果の精度にわずかな違いが発生する可能性があります。

将来のライブラリとの互換性を維持し,移植可能な算術演算アプリケーションを開発するには,この呼び出しインターフェイスを使用するのではなく,選択した高級言語 (たとえばDEC C やDEC FORTRANなど)を通じて提供されるDPMLルーチンを使用することが適切です。DPMLルーチンを使用すれば,性能と精度も大幅に向上できます。

DPMLルーチンについての詳しい説明は,『Compaq Portable Mathematics Library』を参照してください。

4.4 ホスト・アーキテクチャの判断

アプリケーションがVAXシステムで実行されているのか,Alphaシステムで実行されているのかを,アプリケーションで判断しなければならないことがあります。プログラムの内部から$GETSYIシステム・サービス(またはLIB$GETSYI RTLルーチン)を呼び出し, ARCH_TYPEアイテム・コードを指定すれば,この情報を入手できます。アプリケーションがVAXシステムで実行されている場合には,$GETSYIシステム・サービスは1という値を戻します。アプリケーションがAlphaシステムで実行されている場合には, $GETSYIシステム・サービスは2という値を戻します。

例 4-1 は,F$GETSYI DCLコマンドを呼び出し, ARCH_TYPEアイテム・コードを指定することにより,DCLコマンド・プロシージャでホスト・アーキテクチャを判断する方法を示しています(アプリケーションで $GETSYIシステム・サービスを呼び出す例については, 第 5.4 節 を参照してください。その例では,Alphaシステムのページ・サイズを入手するためにシステム・サービスが使用されています)。

例 4-1 アーキテクチャ・タイプを判断するための ARCH_TYPEキーワードの使用

$! Determine architecture type 
$ type_symbol = f$getsyi("arch_type") 
$ if type_symbol .eq. 1 then goto ON_VAX 
$ if type_symbol .eq. 2 then goto ON_ALPHA 
$ ON_VAX: 
$ ! 
$ ! Do VAX-specific processing 
$ ! 
$ exit 
$ ON_ALPHA: 
$ ! 
$ ! Do Alpha-specific processing 
$ ! 
$ exit 

しかし,ARCH_TYPEアイテム・コードは,バージョン5.5またはそれ以降のバージョンを実行しているVAXシステムだけでしか使用できません。アプリケーションが,これ以前のバージョンのオペレーティング・システムでホスト・アーキテクチャを判断しなければならない場合には, 表 4-3 に示した$GETSYI システム・サービスの他のアイテム・コードを使用しなければなりません。

表 4-3 ホスト・アーキテクチャを指定する$GETSYIアイテム・コード
キーワード 使用方法
ARCH_TYPE VAXシステムでは1を戻す。 Alphaシステムでは2を戻す。Alphaシステムと,OpenVMSバージョン5.5またはそれ以降のバージョンのVAXシステムでサポートされる。
ARCH_NAME VAXマシンでは"VAX"というテキスト文字列を戻し, Alphaマシンでは"Alpha"というテキスト文字列を戻す。Alphaシステムと, OpenVMSバージョン5.5またはそれ以降のバージョンを実行しているVAXシステムでサポートされる。
HW_MODEL ハードウェア・モデルを識別する整数を戻す。1024以上のすべての値はAlphaシステムを示す。
CPU 特定の CPU を識別する整数を戻す。128 という値は,システムを "VAX でない" として識別する。このコードは ARCH_TYPE および ARCH_NAME コード以前の OpenVMS のバージョンでサポートされる。


目次 索引

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