日本-日本語

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

OpenVMS マニュアル


≫ 

OpenVMS
ライブラリ

タイトルページ
目次
まえがき
第 1 章:移行プロセスの概要
第 2 章:移行方法の選択
第 3 章:アプリケーションの移行
第 4 章:再コンパイルと再リンクの概要
第 5 章:ページサイズの拡大に対するアプリケーションの対応
第 6 章:共用データの整合性の維持
第 7 章:アプリケーションデータ宣言の移植性の確認
第 8 章:アプリケーション内の条件処理コードの確認
第 9 章:OpenVMS I64コンパイラ
付録 A :アプリケーション評価チェックリスト
用語集
索引
PDF
OpenVMS ホーム

OpenVMS
OpenVMS VAX から OpenVMS I64 への
アプリケーションの移行


目次 索引



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

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

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

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

  • SHOW CRASH コマンドと SHOW STACK コマンドの表示には,致命的なシステム例外バグ・チェックのデバッグを簡単にするための追加情報が含まれるようになりました。

  • SHOW EXEC コマンドの表示には,イメージのスライシングを使用してロードされた場合,エグゼクティブ・イメージに関する追加情報が含まれるようになりました。スライシングは,エグゼクティブ・イメージの場合はエグゼクティブ・イメージ・ローダが実行し,ユーザ・モード・イメージの場合は,OpenVMS インストール・ユーティリティが実行する機能です。エグゼクティブ・イメージ (またはユーザ・モード・イメージ) をスライシングすると,数が制限されているトランスレーション・バッファ・エントリの競合を削減できるため,性能が大幅に向上します。

  • SDA の新しいコマンドである MAP コマンドを使用すると,メモリ内のアドレスをマップ・ファイルのイメージ・オフセットにマップできます。

  • FPCR という新しいシンボルがシンボル・テーブルに追加されました。このシンボルは浮動小数点レジスタを表します。



3.3.2 Crash Log Utility Extractor

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

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

表 3-2 OpenVMS VAX と OpenVMS I64 の CLUE の相違点
属性 OpenVMS VAX OpenVMS I64
アクセス方式 独立したユーティリティとして起動される。 SDA を通じてアクセスされる。
履歴ファイル 各クラッシュのクラッシュ・ダンプ・ファイルから 1 行の要約情報と詳細情報を格納した累積ファイル。 各クラッシュ・ダンプに対して 1 行の要約だけを格納した累積ファイル。各クラッシュの詳細情報は別のリスト・ファイルに格納される。
クラッシュ・ダンプのデバッグ以外の使い方 なし CLUE コマンドは会話方式で使用でき,実行中のシステムを確認できる。



3.4 基準情報を得るための VAX 上でのアプリケーションのテスト

テストの最初の手順は,アプリケーションの実行結果の基準データを取るために, VAX アプリケーションに対してテスト・スイートを実行することです。この作業は,アプリケーションを I64 にポーティングする前に実行してもポーティングした後で実行してもかまいません。その後,これらのテストの結果と,I64 システム上での同様のテストの結果を比較します。

3.5 移行したアプリケーションのテスト

移行したバージョンの機能を VAX バージョンと比較するために,アプリケーションをテストしなければなりません。

第 3.4 節 で説明したように,テストではまず VAX アプリケーションに対してテスト・スイートを実行することにより,アプリケーションの基準となる結果を確立することです。

I64 システムでアプリケーションが動作するようになったら,以下の 2 種類のテストを実施します。

  • アプリケーションの VAX バージョンに対して使用される標準テスト

  • アーキテクチャの変更による問題を特に確認するための新しいテスト



3.5.1 VAX テストのI64 へのポーティング

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

移行されたアプリケーションをテストするには,以下の手順を実行します。

  1. 移行する前に,アプリケーションの完全な標準データを入手する。

  2. アプリケーションだけでなく,テスト・スイートも移行する (そのテストが I64 でまだ使用できない場合)。

  3. I64 システムでテスト・スイートを検証する。

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

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

3.5.2 新しい I64 テスト

標準テストは,移行したアプリケーションの機能を検証するために非常に有効ですが,移行に伴って発生する問題点を検証するためのテストも追加しなければなりません。特に以下の点に注意してください。

  • コンパイラの相違点

  • アーキテクチャの相違点

  • 統合 (異なる言語で作成されたモジュールなど)



3.5.3 潜在的なバグの発見

最善を尽くしたとしても,OpenVMS VAX システムでは問題にならなかった潜在的なバグが検出されることがあります。

たとえば, VAX システムでは,プログラムで一部の変数を初期化しなくても問題になりませんが, I64 システムでは算術演算例外が発生することがあります。同様に,使用できる命令やコンパイラの最適化方法が変更されたために, 2 つのアーキテクチャ間で移行したときに,問題が発生することもあります。これまで隠れていたバグをすべて解決できるような簡単な方法はありませんが,プログラムを移植した後,他のユーザが使用を開始する前に,プログラムをテストする必要があります。

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

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

相互操作性に関する問題の原因として,以下のことが考えられます。

  • OpenVMS Cluster 環境の I64 システムと VAX システムは,別々のシステム・ディスクを使用しなければなりません。アプリケーションが正しいシステム・ディスクを参照しているかどうかを確認する必要があります。

  • アーキテクチャが混在する環境では,アプリケーションが正しいイメージ名のものを参照していることを確認してください。

    • イメージのネイティブ VAX バージョンとネイティブ I64 バージョンが同じ名前である

    • VAX イメージをトランスレートしたバージョンでは,名前の最後に "_TV_AV" が追加されている。 Alpha イメージをトランスレートしたバージョンでは,名前の最後に "_AV" が追加されている

  • 再コンパイルしたイメージではデータが自然にアラインされていることが必要ですが,トランスレートされたイメージでは,VAX 形式でデータがアラインされており, I64 形式でデータがアラインされていない可能性があります。



3.7 特定の種類のコードの変更

以下のコーディング手法および特定の種類のコードは, I64 システムで実行するために変更する必要があります。

  • Alpha システムと VAX システムのどちらかで動作するように記述された条件付きコード

  • VAX アーキテクチャに依存する OpenVMS システム・サービスを使用しているコード

  • それ以外で VAX アーキテクチャに依存しているコード

  • 浮動小数点データ型を使用しているコード

  • コマンド定義ファイルを使用しているコード

  • スレッドを使用しているコード (特に,個別に作成されたタスクまたはスタックを切り替えるコード)

  • 特権コード



3.7.1 条件付きコード

ここでは,I64 に移行するときに,OpenVMS コードを条件付きにする方法について説明します。このコードは,VAX と I64 の両方を対象にコンパイルされるか,または VAX,Alpha,および I64 を対象にコンパイルされます。シンボル EVAX は削除されておらず,新しいシンボル ALPHA が追加されています。 EVAX を ALPHA で置き換える必要はありませんが,必要であれば置き換えてもかまいません。 MACRO および BLISS で使用可能なアーキテクチャ・シンボルは,VAX,EVAX,ALPHA,および I64 です。

MACRO--32 ソース・ファイルの場合,アーキテクチャ・シンボルは ARCH_DEFS.MAR に定義されています。このファイルは,コマンド行で指定されるプレフィックス・ファイルです。 VAX システムでは,VAX は 1 として定義されており,Alpha,EVAX,および I64 は未定義です。 I64 システムでは,I64 が 1 として定義されており,VAX,EVAX,および ALPHA は未定義です。

以下の例は,VAX システムと I64 システムの両方で実行できるように MACRO--32 ソース・コードを条件付けする方法を示しています。

VAX 固有のコードの場合


.IF DF VAX 
       . 
       . 
       . 
.ENDC 

I64 固有のコードの場合


.IF DF I64 
       . 
       . 
       . 
.ENDC 



BLISS ソース・ファイル (BLISS-32 または BLISS-64) の場合,マクロ VAX, EVAX,ALPHA,および I64 が ARCH_DEFS.REQ で定義されています。 VAX では,VAX に1 が定義されており,Alpha,EVAX および I64 は未定義です。 I64 では,I64 に 1 が定義されており,VAX,EVAX,および ALPHA は 0 として定義されています。 BLISS の条件付き文でこれらのシンボルを使用するには,ARCH_DEFS.REQ が必要です。

注意

%BLISS(xxx),%TARGET(xxx),および %HOST(xxx) という構造は推奨されません。ただし,これらの構造を必ず変更しなければならないというわけではなく,必要に応じて変更すればよいと理解してください。

ソース・ファイルに次の文を追加します。


REQUIRE 'SYS$LIBRARY:ARCH_DEFS'; 

VAX システムと I64 システムの両方で実行するには,ソース・ファイルで以下の文を使用してコードを条件付けします。

VAX 固有のコードの場合


%if VAX %then 
        . 
        . 
        . 
%fi 

I64 固有のコードの場合


%if I64 %then 
        . 
        . 
        . 
%fi 



C ソース・ファイルの場合,適切なプラットフォーム上のコンパイラで, __vax__VAX__ia64,および __ia64__というシンボルが提供されます。シンボルはコンパイル・コマンド行で定義できますが,この方法は推奨できません。また, arch_defs.hを使用して定義する方法も推奨できません。標準的な C のプログラミング手法では, #ifdefを使用します。

VAX 固有のコードの場合


#ifdef __vax 
        . 
        . 
        . 
#endif 

I64 固有のコードの場合


#ifdef __ia64 
        . 
        . 
        . 
#endif 



既存の条件付きコードは,変更が必要かどうか確認しなければなりません。次の BLISS のコードについて考えます。


%IF VAX %THEN 
  vvv 
  vvv 
%FI 
 
%IF EVAX %THEN 
  aaa 
  aaa 
%FI 

コードが本当にアーキテクチャ固有で,I64 コードを追加する場合は,次のコードを追加します。


%IF I64 %THEN 
  iii 
  iii 
%FI 

しかし,既存の VAX/EVAX 条件が実際には 64 ビットではなく 32 ビットを,あるいは OpenVMS の新規則ではなく旧規則 (たとえば,データ構造の拡張の有無や呼び出すルーチンの異同) を反映するのであれば,以下の条件付きコードの指定方法の方がより適切だと考えられます。これは,Alpha と I64 のコードは同じであり,64 ビット・コードと VAX のコードとは区別する必要があるからです。


%IF VAX %THEN 
  vvv 
  vvv 
%ELSE 
  aaa 
  aaa 
%FI 



3.7.2 VAX アーキテクチャに依存しているシステム・サービス

特定のシステム・サービスは,OpenVMS VAX ではアプリケーション内で問題なく動作しても, I64 へのポーティングがうまくいかないことがあります。ここでは,このようなシステム・サービスと,それに代わるサービスについて説明します。

OpenVMS VAX では,SYS$GOTO_UNWIND システム・サービスは,プロシージャ起動コンテキスト・ハンドルを 32 ビット・アドレスで受け取ります。このシステム・サービスを呼び出している箇所を 64 ビット起動ハンドル用の SYS$GOTO_UNWIND_64 に変更しなくてはなりません。ソース・コードを変更して,64 ビット値の領域を割り当ててください。また,OpenVMS I64 の起動コンテキスト・ハンドルを返すライブラリ・ルーチンも異なります。詳細は,『『OpenVMS Calling Standard』』を参照してください。

SYS$GOTO_UNWIND サービスは,プログラミング言語機能をサポートする際によく使用されます。多くの場合は,コンパイラやランタイム・ライブラリでの変更になりますが, SYS$GOTO_UNWIND を直接使用している場合は,変更が必要です。

システム・サービス SYS$LKWSET および SYS$LKWSET_64 は変更されています。詳細は, 第 3.7.9 項 を参照してください。

3.7.3 VAX アーキテクチャに依存するその他の機能を含むコード

VAX でのコーディング手法には,I64 で使用すると異なる結果になるものがいくつかあります。ここでは,そのためにアプリケーションを変更しなければならない場合について説明します。

初期化されたオーバレイ・プログラム・セクションの取り扱いは, I64 システムでは異なります。 OpenVMS VAX システムでは,オーバレイ・プログラム・セクションの異なる部分を複数のモジュールで初期化することができます。このような初期化は,OpenVMS I64 システムでは認められていません。

OpenVMS VAX では,多くの算術演算エラー条件に対して SS$_HPARITH または「エラー・コード」が通知されます。 OpenVMS I64 では,算術演算エラー条件に対して SS$_HPARITH が通知されることはありません。 OpenVMS I64 では,より細分化されたエラー・コード SS$_FLTINV と SS$_FLTDIV が通知されます。

これらの細分化されたエラー・コードを検出するように,条件ハンドラを更新してください。両方のアーキテクチャで共通のコードを使用するには,コードで SS$_HPARITH を参照している箇所において, OpenVMS I64 では SS$_FLTINV と SS$_FLTDIV も検出するように変更します。

OpenVMS I64 のメカニズム・アレイ構造体は,OpenVMS VAX の場合と大きく異なります。戻り状態コード RETVAL は,Alpha プラットフォームと I64 プラットフォームの両方の戻り状態レジスタを表すように拡張されています。詳細は,『OpenVMS Calling Standard』を参照してください。


目次 索引

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