HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
V8.2
PL/I ライブラリ (ネイティブ・ライブラリと変換されたライブラリ) は, OpenVMS Alpha には含まれていましたが OpenVMS I64 には含まれていません。 PL/I コア・イメージのうち OpenVMS I64 にないものは以下のとおりです。
[SYSLIB]DPLI$RTLSHR.EXE
[SYSMSG]PLI$MSG.EXE
[SYSLIB]PLIRTL.IIF
[SYSLIB]PLIRTL_D56_TV.EXE
PL/I ライブラリを参照するアプリケーションや共有イメージは, Integrity サーバ用の OpenVMS I64 では動作しません。 (一般的に,PL/I で記述したコードを含むアプリケーションや共有イメージがそうです。) この制約は,ネイティブ・コードにも,変換された VAX および Alpha イメージにも,適用されます。
第 2.6 節 の,関連する注意事項を参照してください。
5.32 POSIX スレッド・ライブラリ
ここでは,POSIX スレッド・ライブラリ (旧名称は,DECthreads) に関する注意事項について説明します。
付録 A.8 節 の関連する注意事項も参照してください。
5.32.1 例外処理中のスタック・オーバフロー (I64 のみ)
V8.2
I64 システムでの例外処理には, Alpha システムの場合よりもかなり大きなスタック領域が必要です。 OpenVMS からアプリケーションを移植するときに,例外処理を使用するスレッドに未使用スタック領域が十分にないと, I64 での例外処理中に,このスレッドでスタック・オーバフローが発生することがあります。通常は,次の操作のいずれかに関連する ACCVIO の処理が不適切であったように見えます。
このような問題が発生した場合は,スレッドに割り当てられるスタックのサイズを数ページずつ増やしてみてください。最初は,スタックのサイズを 24 KB 大きくすることをお勧めします。
デフォルトのスタック・サイズは, I64 システム上でのスタック使用量が多いことに対応するため, 24 KB 大きくされました。アプリケーションが多数のスレッドをデフォルトのスタック・サイズで作成している場合,アプリケーションのメモリ・リソースが不足することがあります。このような状況になった場合は,プロセス・クォータを大きくするか,アプリケーションを変更して同時に存在するスレッドの数を減らしてください。
5.32.2 I64 システムでの THREADCP コマンドの動作
V8.2
OpenVMS I64 システム上の DCL コマンド THREADCP は,スレッド関連の 2 つのメイン・イメージ・ヘッダ・フラグ, UPCALLS と MULTIPLE_KERNEL_THREADS の問い合わせや変更には使用できません。代わりに, I64 システムでのスレッド・ヘッダ・フラグの設定や参照を行うための DCL コマンド SET IMAGE および SHOW IMAGE を使用する必要があります。
Alpha システムのユーザは,引き続き THREADCP コマンドを使用してください。
5.32.3 浮動小数点のコンパイルと例外 (I64 のみ)
V8.2
次の 2 つの古い cma スレッド・ライブラリ・ルーチンのいずれかを呼び出すソース・モジュールは, OpenVMS I64 上で使用するために /FLOAT=G_FLOAT コンパイラ修飾子 (または,言語固有の同等の修飾子) を指定してコンパイルしなければなりません。
cma_delay() cma_time_get_expiration() |
これらのルーチンは, VAX 形式の浮動小数点数だけを引数として受け入れます。通常,OpenVMS I64 コンパイラは,デフォルトで VAX 形式を使用する OpenVMS Alpha コンパイラとは異なり,デフォルトで IEEE 形式の浮動小数点数を使用します。この 2 つの cma スレッド・ルーチンは,Alpha と I64 のどちらでも, VAX 形式の浮動小数点引数だけを受け入れます。これらのルーチンの呼び出しを適切にコンパイルしないと, IEEE 形式の浮動小数点数が実行時に誤って渡され,予期しない例外が発生することがあります。
5.32.4 C 言語コンパイル・ヘッダ・ファイルの変更
V7.3-2
OpenVMS Version 7.3-2 では,次の変更が行われました。
V7.3-2
OpenVMS Version 7.3-2 では,『Guide to the POSIX Threads Library』で説明されている適応型スレッド・スケジューリング動作が,新しい優先順位調整アルゴリズムとともに実装されました。場合によっては,新しいアルゴリズムでは,優先順位が異なる,スループット方針のスレッドが同期オブジェクトを共用することによる問題を回避できます。優先順位の調整により,アプリケーションのスループットや,システム全体の使用状況も改善できます。スループット・スケジューリング方針のスレッドの優先順位調整は,自動で,透過的に行われます。
5.32.6 プロセス・ダンプ
V7.3
POSIX スレッド・ライブラリで実行時に修正不能な重大エラー (アプリケーション内のデータ破損によって損傷したデータ構造など) が検出されると,ライブラリにより実行中のイメージが終了されることがあります。終了中に,ライブラリによりプロセス・ダンプ・ファイルの作成がトリガーされます (このファイルは, ANALYZE/PROCESS_DUMP によりエラー診断に使用されます)。このようなプロセス・ダンプ・ファイルのサイズは,エラー時のプロセスのアドレス空間に依存するため,非常に大きくなることがあります。
5.32.7 動的 CPU 構成の変更
V7.3
OpenVMS Version 7.3 以降,POSIX スレッド・ライブラリは,マルチプロセッサ Alpha システムを実行する CPU の数の動的変化に対応するようになりました。 1 つのイメージに対して,複数のカーネル・スレッドが使用できるように指定 (LINK/THREADS_ENABLE 修飾子または THREADCP コマンド動詞により) すると, POSIX スレッド・ライブラリが,アプリケーションの明白な並列処理を監視して,利用可能な CPU の数を最大とする数のカーネル・スレッドを作成します。それぞれのカーネルスレッドは,OpenVMS エグゼクティブによってスケジューリングされて別々の CPU で実行されるので,同時に実行することができます。
アプリケーションの実行中,オペレータは CPU を個別に停止または開始することができます。このような動的変化を反映して,これ以降にイメージがアクティブ化されたときに作成できるカーネル・スレッドの数が変化します。また,現在実行中のイメージにも反映されるようになりました。
CPU を追加または除去すると,スレッド・ライブラリは,追加,除去後のアクティブな CPU の数を照会し,プロセスが現在使用しているカーネル・スレッドの数と比較します。現在 CPU がカーネル・スレッドよりも多い場合,ライブラリは既存の POSIX スレッドを CPU まで延長します (必要に応じて,すぐに,または後に新しいカーネル・スレッドを作成します)。逆に CPU がカーネル・スレッドよりも少ない場合,ライブラリは余分のカーネル・スレッドを強制的にハイバネートさせ,残りのカーネル・スレッド上で POSIX スレッドを再度スケジューリングします。これにより,プロセスに関する限り,利用可能な数以上のカーネル・スレッドが, CPU リソースを奪い合うということがなくなります。
5.32.8 デバッガ計測機能は動作しない
V7.0
POSIX スレッド・デバッガの計測機能は動作しません。
『Guide to the POSIX Threads Library』の C.1.1 に記載されている,動作中のプログラムをデバッグする手順を使用すると,プロセスが ACCVIO メッセージで失敗する可能性があります。
5.33 RTL ライブラリ (LIB$)
ここでは,LIB$ ランタイム・ライブラリに関する注意事項について説明します。
5.33.1 RTL ライブラリ (LIB$) のヘルプ
V8.2
OpenVMS Version 8.2 の LIB$ ランタイム・ライブラリのヘルプ・ファイルには, LIB$LOCK_IMAGE ルーチンのヘルプがありません。この問題は,今後のリリースで修正される予定です。当面は,このルーチンの詳細な説明は『OpenVMS RTL Library (LIB$) Manual』を参照してください。
5.33.2 RTL Library (LIB$): 呼び出し標準ルーチン (I64 のみ)
V8.2
この注意事項では,ローテートするレジスタが,以下の呼び出し標準ルーチンでどのように取り扱われるかを明確化します。
LIB$I64_GET_FR
LIB$I64_SET_FR
LIB$I64_GET_GR
LIB$I64_SET_GR
LIB$I64_PUT_INVO_REGISTERS
呼び出し標準規則の ICB (invocation context block) およびメカニズム・ベクタは常に,あたかも,レジスタ・リネーム・ベース (CFM.rrb) とローテート・サイズ (CFM.sor) がいずれも 0 であったかのように,汎用レジスタ,浮動小数点レジスタ,およびプレディケート・レジスタを記録しています。言い換えると,ローテートするレジスタを使用しているときに,ローテーションの効果が無視されます。このことは,LIB$I64_PUT_INVO_REGISTERS ルーチンが使用するレジスタ・マスクについても同様です。というのは,これらのマスクは, ICB 構造体のフィールドによって定義されるからです。
現在は,補足的なアクセス・ルーチン LIB$I64_GET_FR, LIB$I64_SET_FR, LIB$I64_GET_GR および LIB$I64_SET_GRが,レジスタ・リネーム・ベース・レジスタとローテート・サイズ・レジスタの効果を調整しないで,不適切に,そのレジスタ番号パラメータを解釈しています。これは,誤りであり今後のリリースで修正される予定です。
それまでは,ICB またはメカニズム・ベクタ内の汎用レジスタ,浮動小数点レジスタ,およびプレディケート・レジスタを調べるプログラムや,実行時に見えるレジスタを探して内容を解釈するプログラムでは,保存された CFM レジスタを調べて,自身で適切に調整する必要があります。
5.34 Screen Management (SMG$) のドキュメント
『OpenVMS RTL Screen Management (SMG$) Manual』の最後にある参照情報のトピックに,次の情報を追加します。
V7.2
| アクセス: | write-only |
| 受け渡し方: | by reference, array reference |
| 誤っているシンボル名 | 正しいシンボル名 |
|---|---|
| SMG$L_PASTEBOARD_ID | SMG$L_PBD_ID |
| SMG$L_ARG | SMG$L_USER_ARG |
| SMG$B_CHARACTER | SMG$B_CHAR |
V7.1
キーパッド・モードを変更すると,物理端末の設定も変更されます。これは, keyboard-id 引数によって指定される仮想キーボードだけでなく,すべての仮想キーボードに対するグローバルな変更です。 |
ここでは,OpenVMS Alpha および OpenVMS I64 Version 8.2 用の, SORT32 V08-010 に関する注意事項について説明します。詳細は, 第 5.20.8 項 と 第 5.20.1 項 を参照してください。
Hypersort で修正されていない問題を回避する場合,または Hypersort に実装されていない機能を使用する場合に SORT32 を使用することをお勧めします。 Hypersort の注意事項については, 第 5.20 節 を参照してください。
5.35.1 DFS サービス・ディスクでの CONVERT の問題
V8.2
SORT,MERGE,および CONVERT 操作は, UNIX がサービスする DFS マウント・ディスクが出力先になっている場合, %SORT-E-BAD_LRL エラーを返します。
この制約事項を回避するには,次のいずれかを実行します。
V7.3-2
SORT32 は,一時作業ファイルを削除しないことがあります。 SYS$SCRATCH や, SORT32 の作業ファイルを置いている場所を定期的にチェックし,削除されていない作業ファイルを削除してディスク・スペースを空けることができないかを調べてください。
5.35.3 複合条件のある SORT/SPECIFICATION: 要件
V7.3-1
SORT32 では,キー指定ファイルの複合条件が括弧で囲まれていない場合,複合条件に対する診断メッセージを出力しません。例を次に示します。
誤り:
/CONDITION=(NAME=TEST1, TEST=(Field2 EQ "X") AND (Field3 EQ "A")) |
正しい:
/CONDITION=(NAME=TEST1, TEST=((Field2 EQ "X") AND (Field3 EQ "A"))) |
V7.3-1
SORT32 では,入力ファイル内の最大レコード長 (LRL) 情報に基づいて,ソート作業ファイルの固定長のスロットが割り当てられます。性能を向上させるには,実際の最大レコード長に最も近い LRL 情報を入力ファイルに設定します。初期性能が低い場合は,C プログラムによって作成されたファイルをソートしており, LRL が必要以上に大きく (32767 まで) 設定されていることが原因と考えられます。
5.35.5 作業ファイル・ディレクトリの制約事項
V7.3
SORT32 の作業ファイルは,必要な数の作業ファイルを複数のファイル・バージョンにわたって格納できるディレクトリに作成する必要があります。
5.36 システム・サービス
ここでは,OpenVMS のシステム・サービスに関する注意事項について説明します。
5.37 タイマ・キュー・エントリ (TQE)
永続的な制限事項
OpenVMS Alpha Version 7.3-1 では,タイマ・キュー・エントリの管理方法が変更され,多くの TQE を使用するシステムの性能が大きく向上しました。この変更は,非特権アプリケーションにとっては無関係です。
また,特権コードで TQE を直接操作することはできません。特に TQE キュー・ヘッダ (TQE$L_TQFL/TQE$L_TQBL) 内のポインタに直接アクセスすると,通常はアクセス違反になります。ただし,特権コードで内部ルーチン exe_std$instimq/exe$instimq と exe_std$rmvtimq/exe$rmvtimq を使用して,タイマ・キュー・エントリを入力または削除することは可能です。
5.38 Watchpoint ユーティリティ (I64 のみ)
V8.2
Watchpoint ユーティリティは,OpenVMS I64 に移植されていません。弊社では,このユーティリティを今後のリリースで移植する予定です。
5.39 プログラム全体の浮動小数点モード (I64 のみ)
V8.3
OpenVMS Alpha では,浮動小数点丸め動作,例外動作,および精度制御は,コンパイル時に定義されます。各モジュールは,それぞれの浮動小数点動作の設定で,個別にコンパイルされます。たとえば,計算のオーバフローでオーバフロー例外がシグナル通知されるディレクティブで 1 つのモジュールをコンパイルし,別のモジュールを,計算のオーバフローで例外をシグナル通知するのではなく,値を InfinityT とするディレクティブでコンパイルすることができます。これらの 2 つのモジュールがコンパイルされ実行された場合,モジュールのコードは,コンパイル時に指定されたオーバフロー動作をします。
OpenVMS I64 では,浮動小数点丸め動作,例外動作,および精度制御は実行時に定義され,プログラム全体の浮動小数点モードの概念で制御されます。プログラム全体の浮動小数点モードでは,プログラムのメイン・エントリ・ポイント (リンカが決定したもの) を含むモジュールが,デフォルトの浮動小数点丸め動作,例外動作,および精度制御を定義するモジュールです。
大半のプログラムには,この相違点の影響はありません。要点は,ホワイト・ペーパー『Intel® Itanium® アーキテクチャにおける OpenVMS 浮動小数点演算について』を参照してください。このドキュメントは,次の Web サイトで参照できます。
問題点: Heap Analyzer の起動時,また I64 用のデバッガ上で Heap Analyzer の START コマンド (START HEAP_ANALYZER) を実行したとき,アップコールを有効にしているマルチスレッド・アプリケーションがあるとハングします。
回避策: スレッドまたは AST を使っているアプリケーションに対しては,デバッグ・イベントを設定する前,またはデバッグ・イベントを無効またはキャンセルした後に Heap Analyzer を起動するようにしてください (Heap Analyzer を起動した後, START コマンドがデバッガの制御をユーザに戻した後にイベントを有効化/リセットすることができます)。
| 前へ | 次へ | 目次 | 索引 |