[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]

3 アプリケーションの移行

アプリケーションを実際にAlphaシステムに移行する作業は, 次に示すように複数の段階に分かれています。

  1. 移行環境を設定する

  2. 移行評価の基礎を設定するためにVAXシステムでアプリケーションをテストする

  3. Alphaシステムで実行するためにアプリケーションを変換する

  4. 移行したアプリケーションをデバッグおよびテストする

  5. 移行したアプリケーションをソフトウェア・システムに統合する


3.1 移行環境の設定

ネイティブなAlpha環境は,VAXシステムと同様に完全な開発環境です

現在のところ,移行したアプリケーションのデバッグおよびテストは, Alphaシステム上で行わなければなりません。

Alpha移行環境の重要な要素はDECからサポートされ,DECはアプリケーションの変更, デバッグ,およびテストのために必要な支援を提供します。


3.1.1 ハードウェア

移行のためにどのハードウェアが必要かを計画する場合, 複数の問題を検討しなければなりません。まず,通常の VAX開発環境でどのような資源が必要であるかを検討してください。

Alpha移行環境にとって必要な資源を見積もるには,次の問題を考慮しなければなりません。 VESTを使用すると,多くのCPU時間が必要となります(実際に必要な CPU時間を予測することは困難です。これは,必要なCPU時間は, アプリケーションのサイズよりもアプリケーションの複雑さに大きく依存するからです)。 また,VESTを使用する場合,ログ・ファイルのためのディスク空間, Alphaイメージのためのディスク空間, フローグラフのためのディスク空間などが大量に必要になります。 新しいイメージには,元のVAX命令と新しいAlpha命令の両方が含まれます。 したがって,元のVAXイメージより必ず大きくなります。

望ましい構成は次のとおりです。

マルチプロセッサ・システムでは, 各プロセッサが別々のアプリケーションのイメージ分析を行うことができます。

コンピユータ資源が不足する場合には,次のいずれかの処置で対処してください。


3.1.2 ソフトウェア

効率のよい移行環境を構築するには,次の要素を確認しなければなりません。

ネイティブなAlpha開発

VAXで使用できる標準的な開発ツールはすべて, Alphaシステムでもネイティブ・ツールとして提供されています。

トランスレーション

VESTソフトウェア・トランスレータはVAXシステムと Alphaシステムの両方で実行されます。 Translated Image Environment (TIE) はトランスレートされたイメージを実行するために必要な環境であり, OpenVMS Alphaの一部です。したがって, トランスレートされたイメージの最終的なテストは Alphaシステムで実行しなければなりません。


3.2 アプリケーションの変換

コードを完全に分析し,移行計画を適切に作成している場合には, この最終段階はかなり簡単に終了できます。 多くのプログラムはまったく変更せずに再コンパイルまたはトランスレートできます。 直接に再コンパイルまたはトランスレートできないプログラムでも,多くの場合, 簡単な変更だけでAlphaシステムで実行できるようになります。

コードの実際の変換についての詳しい説明は, OpenVMS Alphaの移行に関する次の解説書を参照してください。

これらの各解説書についての説明は,本書のまえがきを参照してください。

2つの移行環境と,各環境で使用される基本的なツールは, 図 3-1に示すとおりです。

図 3-1 移行環境とツール :(クリックで表示)


3.2.1 再コンパイルと再リンク

一般に,アプリケーションを移行する場合には,コードの変更,コンパイル, リンク,およびデバッグを繰り返し実行しなければなりません。 これらの処理を実行することにより, 開発ツールから指摘されたすべての構文エラーとロジック・エラーを解決します。 通常,構文エラーは簡単に修正できますが,ロジック・エラーを修正するには, コードの大幅な変更が必要になります。

新しいコンパイラ・スイッチやリンカ・スイッチに対応するために, コンパイル・コマンドとリンク・コマンドは,ある程度変更しなければなりません。 たとえば,複数のAlphaプラットフォーム間で移植可能にするために,リンカは Alphaシステムの省略時のページ・サイズを64KBとして設定します。この結果, 各プロセッサのシステム・ページ・サイズとは無関係に, OpenVMS AlphaイメージはどのAlphaプロセッサでも実行可能になります。また, Alphaの共有可能イメージは, 普遍的なエントリ・ポイントとシンボルを宣言するために, VAX転送ベクタ・メカニズムではなく, リンカ・オプション・ファイル内のシンボル・ベクタ宣言を使用します。

Alphaプラットフォームでソフトウェアを開発し,移行するために, 多くのネイティブ・コンパイラとその他のツールが提供されます。


3.2.1.1 ネイティブなAlphaコンパイラ

既存のVAXソースを再コンパイルおよび再リンクすると,ネイティブな Alphaイメージが作成され,このイメージは RISCアーキテクチャの性能上の利点をすべて利用して,Alpha環境で実行されます。 Alphaコードでは,一連の高度に最適化されたコンパイラを使用します。 これらのコンパイラは共通の最適化コード・ジェネレータを備えています。しかし, 各言語に対して異なるフロント・エンドを使用し, これらの各フロント・エンドは現在のVAXコンパイラと互換性があります。

OpenVMS Alphaオペレーティング・システムバージョン7.1では, 次の言語に対してネイティブなAlphaコンパイラが提供されています。

OpenVMS Alphaの将来のリリースでは, LISPも含めた他の言語のためのネイティブ・コンパイラも提供されます。

他の言語で作成されたユーザ・モードのVAXプログラムは, VESTを使用してトランスレートすることにより,Alphaシステムで実行できます。また, サード・パーティからも他の言語のためのコンパイラが提供されます。

一般に,Alphaコンパイラには, コマンド・ライン修飾子と言語セマンティックが準備されており, VAXアーキテクチャに依存するコードをほとんど変更せずに, Alphaシステムでも実行できるようにしています。このような VAXアーキテクチャへの依存のリストについては, 表 2-3を参照してください。

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

場合によっては,互換性が制限されます。たとえば,VAX Cでは,特殊な VAXハードウェア機能にアクセスできるようにするための組み込み関数をインプリメントしています。 VAXコンピュータのハードウェア・アーキテクチャは Alphaコンピュータのアーキテクチャと異なるため,これらの組み込み関数は, /STANDARD=VAXC修飾子を使用した場合でも,OpenVMS Alphaシステム用の DEC Cコンパイラでは使用できません。

また,コード内に存在する可能性のあるアーキテクチャに依存する部分をコンパイラである程度補正することもできます。 たとえば,MACRO-32コンパイラには/PRESERVE修飾子があり, 粒度と不可分性のどちらか一方または両方を維持できます。

DEC Cコンパイラにはヘッダ・ファイルがあり, 各データ型に対してマクロを定義しています。これらのマクロは, int64などの汎用データ型の名前を__int64などのマシン固有のデータ型に変換します。 たとえば,64ビットの長さのデータ型が必要な場合には,int64マクロを使用します。

移植性をサポートするすべての機能の詳細については, コンパイラのマニュアルを参照してください。

Alphaコンパイラを使用して,OpenVMS VAXプログラムを OpenVMS Alphaシステムに移行する処理の詳細については, 第11章を参照してください。


3.2.1.2 OpenVMS Alpha用のVAX MACRO-32コンパイラ

既存のVAX MACROコードをOpenVMS Alphaシステムで動作するマシン・コードに変換するには, MACRO-32 Compiler for OpenVMS Alphaを使用します。 OpenVMS Alphaにはその目的で,このコンパイラが含まれています。

一部のVAX MACROコードは変更せずにコンパイルできますが, 大部分のコード・モジュールでは,エントリ・ポイント指示文を追加する必要があります。 また,多くのコード・モジュールではその他の変更も必要です。


注意
MACRO-32コンパイラは,ソース・コードにLIB$ESTABLISHが含まれている場合には, それを呼び出そうとします。

MACRO-32プログラムが0(FP)のルーチン・アドレスを格納することにより, 動的ハンドラを確立する場合には,OpenVMS Alphaシステムでコンパイルしても, そのプログラムは正しく動作します。しかし, CALL_ENTRYルーチンの内部からでなければ,JSB (Jump to Subroutine) ルーチンの内部から条件ハンドラ・アドレスを設定することはできません。


コンパイラはOpenVMS Alphaシステム用に最適化されたコードを生成しますが, 高レベルの制御機能をプログラマに提供するVAX MACRO言語の多くの機能は, OpenVMS Alphaシステム用の最適なコードを生成することを困難にします。 OpenVMS Alpha用に新たなプログラムを開発する場合には, 中級言語または高級言語を使用することをお勧めします。 MACRO-32コンパイラの詳細については, 『Porting VAX MACRO Code to OpenVMS Alpha』を参照してください。


3.2.1.3 その他の開発ツール

ネイティブなAlphaイメージを作成するために, コンパイラの他にもいくつかのツールが提供されます。


3.2.2 トランスレーション

Alphaシステムで実行するためにVAXイメージをトランスレートする処理については, 『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください。 一般に,この処理は簡単ですが,エラーなしにトランスレートするには, コードを少し変更しなければならないことがあります。


3.2.2.1 VAX Environment Software Translator (VEST) とTranslated Image Environment (TIE)

ユーザ・モードのVAXイメージをOpenVMS Alphaに移行するための主なツールは, 静的トランスレータと実行時サポート環境です。

VESTは,できるだけ多くのVAXコードをAlphaコードにトランスレートします。 TIEは,Alpha命令に変換できなかったVAXコードを解釈します。たとえば, 次のコードはTIEによって解釈されます。

命令の解釈は速度の遅い処理であり,おそらく平均的な1つのVAX命令に対して 100前後のAlpha命令が必要となるため, VESTは実行時にインタプリタを通じた解釈の必要性をできるだけ少なくするために, できるだけ多くのVAXコードをトランスレートしようとします。 トランスレートされたイメージは,ネイティブなAlphaイメージと比較すると,約 3分の1の速度で実行されます。ただし,この速度はTIEがどれだけの VAXコードを解釈しなければならないかに応じて異なります。トランスレートされた VAXイメージは,少なくともVAXハードウェアと同じ速度で実行されます (同じレベルのプロセス技術を使用したCPUの場合)。

AlphaシステムでVAXイメージの動的解釈を指定することはできません。 イメージをOpenVMS Alphaで実行するには,その前に VESTを使用してイメージをトランスレートしなければなりません。

VAXイメージをトランスレートすると, Alphaハードウェアで実行されるイメージが作成されます。このようにして作成される Alphaイメージは,単に VAXイメージを解釈したバージョンやエミュレートしたバージョンではなく,元の VAXイメージ内の命令が実行する操作と同じ操作を実行する Alpha命令を含むイメージです。Alphaの.EXEファイルには,元の VAXイメージが完全に登録されているため,TIEは VESTがトランスレートできなかったコードを解釈できます。

VESTの分析機能は,トランスレートする場合だけでなく, 再コンパイルする予定のプログラムを評価する場合も役立ちます。

VESTとTIEについての詳しい説明は,『DECmigrate for OpenVMS AXP Systems Translating Images』を参照してください。このマニュアルでは, フローグラフなども含めて, VESTが作成するすべての出力とその解釈方法が詳しく説明されています。また, VESTが作成するイメージ情報ファイル(IIF)から提供される情報を利用して, トランスレートされたイメージの実行時の性能を向上する方法も説明されています。


3.3 移行したアプリケーションのデバッグとテスト

アプリケーションをOpenVMS Alphaに移行した後,デバッグしなければなりません。

また,正しい操作が実行されるかどうかを調べるためにアプリケーションをテストすることも必要です。


3.3.1 デバッグ

OpenVMSオペレーティング・システムでは,次のデバッガが準備されています。

デバッグはAlphaハードウェアで実行しなければなりません。


3.3.1.1 OpenVMSデバッガによるデバッグ

OpenVMS Alphaシステムでは,次の DEC言語で作成したプログラムに対してデバッガを使用できます。

OpenVMSデバッガには, OpenVMS Alphaコードのアーキテクチャ上の違いに対処する機能がいくつか含まれています。 これらの機能を使用すると, OpenVMS Alphaシステムに移植するコードを簡単にデバッグできるようになります。 たとえば,SETコマンドの/UNALIGNED_DATA修飾子を使用すると, アラインされていないデータにアクセスする命令(たとえば, ワード境界にないデータにアクセスするload word命令など)のすぐ後で, デバッガはブレークします。

どのルーチンでも,SETコマンドに/RETURN修飾子を指定できます。 OpenVMS VAXシステムの場合のように,CALLS命令や CALLG命令を使用して呼び出したルーチンに制限されません。 OpenVMS Alphaシステム固有の機能の詳細については,『OpenVMSデバッガ説明書』 を参照してください。

OpenVMSデバッガを使用して,移行したアプリケーションを Alphaシステムでデバッグする場合には,次のことを考慮しなければなりません。

OpenVMSデバッガによるデバッグについての詳しい説明は, 『OpenVMSデバッガ説明書』を参照してください。


3.3.1.2 Deltaデバッガよるデバッグ

Delta/XDeltaデバッガ(DELTA/XDELTA)はOpenVMS Alphaシステムで動作し, Alphaアーキテクチャで必要となる新しいコマンドを提供し,また, 既存のコマンドの一部も拡張しています。たとえば,ベース・レジスタの表示は 16進数ではなく,10進数で表示し,別のプロセスの内部プロセス識別 (PID)番号を確認する機能も追加されています。Delta/XDeltaデバッガが OpenVMS Alphaシステムでどのように動作するかについての詳しい説明は, 『OpenVMS Delta/XDelta Debugger Manual』を参照してください。

Deltaデバッガを使用すれば, 部分的または完全にトランスレートされたアプリケーションをデバッグできます。

トランスレートされたアプリケーション

トランスレートされたイメージをデバッグする場合には, 次のことを確認しなければなりません。

アプリケーションの混在

ネイティブなAlphaコードとトランスレートされたコードが混在するアプリケーションをデバッグするには, /TIE修飾子を使用してアプリケーションのネイティブな部分がコンパイルされているかどうかを確認しなければなりません。 さらに,/NONATIVE_ONLYリンカ・オプションを使用してアプリケーションをリンクしなければなりません。

Deltaデバッガによるデバッグについての詳しい説明は, 『OpenVMS Delta/XDelta Debugger Manual』を参照してください。


3.3.1.3  OpenVMS Alphaシステムコード・デバッガによるデバッグ

OpenVMS Alphaのシステムコード・デバッガは,任意の IPLで動作する非ページング・システム・コードとデバイス・ドライバをデバッグするために使用します。 OpenVMS Alphaのシステムコード・デバッガはシンボリック・デバッガです。 したがって,ソース・コードに指定するときと同様に,変数名, ルーチン名などを指定できます。また, ソフトウェアが実行しているソース・コードを表示し,ソース行を 1ステップずつ実行することもできます。

システムコード・デバッガを使用するには,2台のAlphaシステムが必要です。

このデバッガを使用すると,次の言語で作成されたコードをデバックできます。


注意
BLISSコンパイラは,OpenVMS VAXバージョン7.1とOpenVMS Alphaバージョン 7.1に同梱されているOpenVMSフリーウェアCDに登録されています。

OpenVMS Alphaのシステムコード・デバッガは,各言語の構文,データ型, 演算子,式,有効範囲に関する規則,その他の構造を認識します。 プログラムが複数の言語で作成されている場合には,デバッグ・セッションでデバッグ・ コンテキストを1つの言語から別の言語に変更できます。

Step 2ドライバとOpenVMS Alphaシステムコード・デバッガの詳細については, 『Writing OpenVMS Alpha Device Drivers in C』を参照してください。


3.3.2 システム・クラッシュの分析

OpenVMSでは,システム・クラッシュを分析するために2つのツールを使用できます。 それはシステム・ダンプ・アナライザ (SDA)とクラッシュ・ダンプ・ユーティリティ・エクストラクタ(CLUE)です。


3.3.2.1 システム・ダンプ・アナライザ

OpenVMS Alphaシステムのシステム・ダンプ・アナライザ(SDA)ユーティリティは, OpenVMS VAXシステムで提供されるユーティリティとほとんど同じです。 多くのコマンド,修飾子,表示は同一ですが, クラッシュ・ダンプ・ユーティリティ・エクストラクタ(CLUE) ユーティリティの機能にアクセスするためのいくつかのコマンドも含めて, コマンドと修飾子が追加されています。また, プロセッサ・レジスタやデータ構造体など OpenVMS Alphaシステム固有の情報を表示できるように, 一部の表示も変更されています。

SDAインタフェースは少しだけ変更されていますが,VAXとAlphaのダンプ・ファイルの内容と, ダンプからシステム・クラッシュを分析するための全体的な処理は, 2種類のコンピュータで少し違います。Alphaの実行パスは, VAXの実行パスの場合より複雑な構造体とパターンをスタックに残します。

VAXコンピュータでSDAを使用するには,まず,VAXシステムの OpenVMS呼び出し規則を十分理解しておく必要があります。同様に,Alphaシステムで SDAを使用するには,まず,Alphaシステムの OpenVMS呼び出し規則を十分理解しておかなければ, スタックでクラッシュのパターンを解読できるようになりません。

SDAは次のように変更されています。


3.3.2.2 クラッシュ・ログ・ユーティリティ・エクストラクタ (CLUE)

クラッシュ・ログ・ユーティリティ・エクストラクタ(CLUE)は, クラッシュ・ダンプの履歴と,各クラッシュ・ダンプの重要なパラメータを記録し, 重要な情報を抽出して,要約するためのツールです。クラッシュ・ダンプは, システム・クラッシュが発生するたびに上書きされるため, 最新のクラッシュに対してだけしか使用できませんが,クラッシュ履歴ファイル (OpenVMS VAX)と, 各クラッシュに対して個別のリスト・ファイルを持つ要約クラッシュ履歴ファイル (OpenVMS Alpha)は,システム・クラッシュを永久的に記録します。

OpenVMS VAXとOpenVMS Alphaでのインプリメント上の相違点は, 表 3-1に示すとおりです。

表 3-1 OpenVMS VAX と OpenVMS Alpha の CLUE の相違点

属性 OpenVMS VAX OpenVMS Alpha
アクセス方式 独立したユーティリティとして起動される。 SDAを通じてアクセスされる。
履歴ファイル 各クラッシュのクラッシュ・ダンプ・ファイルから 1行の要約情報と詳細情報を格納した累積ファイル。 各クラッシュ・ダンプに対して 1行の要約だけを格納した累積ファイル。 各クラッシュの詳細情報は別のリスト・ファイルに格納される。
クラッシュ・ダンプのデバッグの他の使い方 なし。 CLUEコマンドは会話方式で使用でき, 実行中のシステムを確認できる。
ドキュメンテーション 『OpenVMSシステム管理者マニュアル』と 『OpenVMSシステム管理ユーティリティ・リファレンス・マニュアル』の Bookreaderバージョン。 『OpenVMSシステム管理者マニュアル』 と『OpenVMS Alpha System Dump Analyzer Utility Manual』の Bookreaderバージョン。


3.3.3 テスト

移行したバージョンの性能と機能を元のVAXバージョンと比較するために, アプリケーションをテストしなければなりません。 テストではまず,VAXアプリケーションに対して一連のテストを実行することにより, アプリケーションに対して基準となる結果を設定します。 アプリケーションをAlphaシステムで実行した後,次の2種類のテストを実行できます。


3.3.3.1 VAXテスト

新しいアーキテクチャを使用することにより, アプリケーションの一部が変更されるため, OpenVMS Alphaにアプリケーションを移行した後, そのアプリケーションをテストすることは特に重要です。 アプリケーションの変更によってエラーが発生するだけでなく,新しい環境では, VAXバージョンで検出されなかった問題が発生する可能性があります。

移行されたアプリケーションをテストするには,次の操作が必要です。

  1. 移行する前に,アプリケーションにとって必要な標準データを入手する

  2. アプリケーションだけでなく,一連のテストも移行する(テストが Alphaでまだ準備されていない場合)。

  3. Alphaシステムでテストを検証する

  4. 移行したアプリケーションに対して移行したテストを実行する

ここでは,リグレッション・テストとストレス・テストが役立ちます。 ストレス・テストは, 同期に関するプラットフォームの相違点をテストするために特に重要です。特に, 複数の実行スレッドを使用するアプリケーションの場合は, ストレス・テストが役立ちます。


3.3.3.2 Alphaテスト

標準テストは, 移行したアプリケーションの機能を検証するためにかなり長くかかりますが, 移行固有の問題を調べるためのテストをいくつか追加しなければなりません。 特に次の点に注意してください。


3.3.4 潜在的なバグの発見

作業方法に何も問題がなく,移行に関するすべての指示に従っているにもかかわらず, OpenVMS VAXシステムでは問題が発生したことのないプログラムでバグを検出することがあります。 たとえば,VAXコンピュータでは, プログラムで一部の変数を初期化しないエラーが発生しても問題になりませんが, Alphaコンピュータでは演算例外が発生します。 2つのアーキテクチャでは使用できる命令が違い, コンパイラが命令を最適化する方法も変更されているため, 移行処理で同じような問題が発生する可能性があります。 これまで隠れていたバグをすべて解決できるような新しい方法はありませんが, プログラムを移植した後,他のユーザが実際に使用を開始する前に, プログラムを徹底的にテストする必要があります。


3.4  移行したアプリケーションのソフトウェア・システムへの統合

再コンパイルまたはトランスレーションによってアプリケーションを移行した後, 移行によって他のソフトウェアとのやりとりに問題が発生していないかどうかを確認しなければなりません。

VAXとAlphaシステム間の相互操作性に関する問題の原因として, 次のことが考えられます。


[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]