library home hp.com home products and services support and drivers solutions
cd-rom home
End of Jump to page title
HP OpenVMS Systems
Documentation

Jump to content


HP OpenVMS

HP OpenVMS
V8.3 新機能説明書


前へ 次へ 目次 索引



第 5 章
プログラミング機能

この章では,HP OpenVMS の本バージョンにおける,アプリケーション・プログラマおよびシステム・プログラマに関係がある新機能について説明します。

5.1 C 実行時ライブラリの機能拡張

以降の項では,OpenVMS Version 8.3 での C 実行時ライブラリ (RTL: Run-Time Library) の機能拡張について説明します。拡張された機能としては,UNIX とのポータビリティの向上,標準への準拠,より柔軟なユーザ制御の機能選択があります。新しい C RTL 関数も追加されています。詳細は,『C ランタイム・ライブラリ・リファレンス・マニュアル』を参照してください。

5.1.1 シンボリック・リンクと POSIX 準拠のパス名のサポート

OpenVMS Version 8.3 以降では,Open Group 準拠のシンボリック・リンクのサポートと,POSIX 準拠のパス名のサポートが含まれています。その目的は,UNIX や Linux のアプリケーションを OpenVMS に移植したり,UNIX スタイルの開発環境を使用しているパートナや顧客を支援し,移植作業に関連するアプリケーションの開発コストと複雑さを削減することです。

このサポートがあっても,OpenVMS システム上での UNIX のファイルの 100% の互換性は保証されません。 UNIX や Linux のアプリケーションを OpenVMS に移植するためには,変更を行わなければならない場合もありえます。

シンボリック・リンクと POSIX のパス名の処理をサポートするために,以下の機能が OpenVMS で提供されています。

シンボリック・リンクおよび POSIX パス名処理についての詳細は,『C ランタイム・ライブラリ・リファレンス・マニュアル』の第 12 章を参照してください。

5.1.2 バイト単位のロック

C RTL は, fcntl関数のコマンド F_GETLK, F_SETLK,および F_SETLKW を使用したバイト単位のファイル・ロックをサポートしています。この機能は,X/Open の仕様で定義されています。この機能を実装するために OpenVMS のロック・マネージャが使用されます。バイト単位のロックは,クラスタにまたがって使用することができます。ロックするオフセットには, 32 ビットの符号無し整数に収まる値を使用できます。詳細は,『C ランタイム・ライブラリ・リファレンス・マニュアル』の fcntl関数を参照してください。

5.1.3 新しい C RTL 関数

第 5.1.1 項 に示したシンボリック・リンク関数の他に, X/Open 仕様に基づく以下の新しい関数が C RTL に追加されています。


crypt    
setkey   
encrypt 
fchmod 

5.1.4 C RTL の TCP/IP ヘッダ・ファイルの更新

CRTL では,ユーザが TCP/IP を呼び出すためのヘッダ・ファイルが提供されています。これらのヘッダには多数の問題があり,単純な TCP/IP プログラミング以外では使用できません。

以前は,いくつかのリリースの TCP/IP で,修正されたヘッダがプログラミング・サンプルの領域に提供されていました。 C RTL に対するこの機能拡張により,これらの修正済みヘッダは C RTL ヘッダ・ライブラリ (DECC$RTLDEF.TLB) に格納されました。詳細は,『OpenVMS V8.3 リリース・ノート』の C RTL の項を参照してください。

5.2 CDSA for OpenVMS および Secure Delivery

CDSA Version 2.2 for OpenVMS は,オープン・ソース・プロジェクトの CDSA を基にしています。また,OpenVMS 上での CDSA の実装は,Intel V2.0 Release 3 リファレンス・プラットフォームを基にしています。 CDSA Version 2.2 for OpenVMS の新機能には,Secure Delivery と HRS (Human Recognition Service Standard) のサポートがあります。ここではこれらの機能について説明します。

詳細は,『Open Source Security for OpenVMS Alpha, Volume 1: Common Data Security Architecture』を参照してください。

CDSA の詳細は,次の場所にある Common Data Security Architecture の Web サイトを参照してください。


  http://sourceforge.net/projects/cdsa/ 

5.3 デッドロック待ち

OpenVMS V8.3 では,1 秒未満のデッドロック待ち時間をプロセスがロック・マネージャに対して宣言できるようになりました。それには,システム・サービス $SET_PROCESS_PROPERTIES と,新しい項目コード PPROP$C_DEADLOCK_WAIT を使用します。この 1 秒未満のデッドロック待ち時間は,システム・パラメータ DEADLOCK_WAIT の時間より優先されます。さらに,システム・サービス $GETJPI とレキシカル関数 F$GETJPI では,項目コード JPI$_DEADLOCK_WAIT および DEADLOCK_WAIT を使用することで,この時間を読み出すことができます。使用方法の詳細については,『OpenVMS System Services Reference Manual』および『OpenVMS DCL ディクショナリ』を参照してください。

システム・パラメータ DEADLOCK_WAIT は秒単位であるため,設定できる最小の値は 1 秒です。システム・サービス $SET_PROCESS_PROPERTIES で設定した 1 秒未満のデッドロック待ち時間は,現在のイメージに対してだけ有効で,イメージが終了するとクリアされます。渡されるパラメータは 100n 秒単位の値で,1 秒を超えることはできません。値が小さすぎる場合は,最小値の 10m 秒に設定されます。パラメータ値ゼロでこのシステム・サービスを呼び出すと,以前設定した 1 秒未満の待ち時間をクリアすることができます。次の例を参照してください。


[...] 
#define TEN_MSEC 100000 
 
uint64 dead_wait; 
uint64 prev_value; 
 
 // 
 // Set a 0.5 second deadlock wait time for the current process 
 // 
 dead_wait = 50 * TEN_MSEC; 
 status = sys$set_process_properties ( 0, 0, 0, PPROP$C_DEADLOCK_WAIT, dead_wait, &prev_value ); 
[...] 

5.4 デバッガの新機能

ここでは,OpenVMS Version 8.3 での OpenVMS Debugger の新機能について説明します。

5.4.1 C++ の演算子名のサポートの強化

Alpha システムと Integrity サーバ・システムで,C++ の演算子名のサポートが強化されました。特に,ユーザ定義の演算子名がサポートされるようになりました。この変更の前までは,演算子名を %NAME で囲む必要がありました。

以下に例を示します。


DBG> SHOW SYMBOL /FULL operator == 
routine C::operator== 
    type signature: bool operator==(C) 
    code address: 198716, size: 40 bytes 
    procedure descriptor address: 65752 
DBG> SET BREAK operator== 

5.4.2 SET MODULE コマンドが省略可能になった

Alpha システムと I64 システムで,OpenVMS Debugger が自動的にモジュール情報を設定できるようになり,明示的な SET MODULE コマンドは省略可能となりました。この機能が実現されたのには 2 つの理由があります。

5.4.3 SHOW STACK コマンドの新しい修飾子

Alpha システムと Integrity サーバ・システムでは,SHOW STACK コマンドで /START_LEVEL=n 修飾子が指定できるようになりました。この修飾子は,SHOW STACK に対して,呼び出しフレーム・レベル n のスタック情報から表示を開始するように指示します。

たとえば,フレーム 3 のスタック情報だけを表示するには,次のコマンドを入力します。


DBG> SHOW STACK/START=3 1 

4 番目と 5 番目のスタック・フレームの詳細を表示するには,次のコマンドを入力します。


DBG> SHOW STACK/START=4 2 

5.4.4 型のないストレージ位置に対する省略時のデータ型の変更

Alpha システムと Integrity サーバ・システムで,型のないストレージ位置に対する省略時のデータ型がロングワード (32ビット) からクォドワード (64 ビット) に変更されました。データ型情報があるストレージ位置については,これまでどおり,関連する型に応じて表示されます。

5.4.5 SHOW SYMBOL コマンドでのオーバロード・シンボル・サポートの改善

Alpha システムと Integrity サーバ・システムでは,SHOW SYMBOL コマンドが機能拡張されて,オーバロード・シンボル名を認識するようになりました。これまでは,各種のオーバロード名が表示されるだけでした。この機能拡張によって,名前とその名前に関連付けられた情報が表示されるようになりました。以下に例を示します。


DBG> show symbol/full g 
overloaded name C::g 
    routine C::g(char) 
        type signature: void g(char) 
        address: 132224, size: 128 bytes 
    routine C::g(long) 
        type signature: void g(long) 
        address: 132480, size: 96 bytes 

5.4.6 GNAT Pro (Ada 95) コンパイラが Integrity サーバ・システムでも利用可能 (I64 のみ)

GNAT Pro (Ada 95) コンパイラが Integrity サーバ向けの OpenVMS 上でサポートされました。この製品については,直接 AdaCore 社にお問い合わせください。

弊社では HP Ada (Ada 83) コンパイラを OpenVMS Alpha から Integrity サーバ向けの OpenVMS に移植する予定はありません。

5.4.7 P2 空間にロードされたプログラムのデバッグをサポート

OpenVMS Version 8.3 Debugger では,P2 空間にロードされたプログラムのデバッグが可能となりました。

5.4.8 SET WATCH コマンドの改良

メモリ内の領域に対するウォッチポイント (静的ウォッチポイントと呼びます) では,非同期システム・サービスによる書き込みが検出されないことがあり,時には非同期システム・サービスによる書き込みが失敗することもあります。たとえば,SYS$QIO による出力パラメータ IOSB への非同期書き込みは,その IOSB が直接ウォッチされている場合,あるいは,アクティブな静的ウォッチポイントと同じページ上にあるだけの場合も失敗することがあります。

本バージョンでは,デバッガがこの状態を検出するようになりました。問題が発生する可能性がある場合,デバッガは静的ウォッチポイントと非同期システム・サービスの衝突についてユーザに警告します。以下に例を示します。


DBG> g 
%DEBUG-I-ASYNCSSWAT, possible asynchronous system service and static watchpoint collision 
break at LARGE_UNION\main\%LINE 24192+60 
DBG> sho call 
 module name    routine name     line           rel PC           abs PC 
*LARGE_UNION    main            24192       00000000000003A0 00000000000303A0 
*LARGE_UNION    __main          24155       0000000000000110 0000000000030110 
                                            FFFFFFFF80B90630 FFFFFFFF80B90630 
DBG> ex/sour %line 24192 
module LARGE_UNION 
 24192:             sstatus = sys$getsyi (EFN$C_ENF, &sysid, 0, &syi_ile, &myiosb, 0, 0); 

この条件が検出された場合にどのようにすればよいかを確認するには,デバッガで HELP MESSAGE ASYNCSSWAT と入力してください。

5.4.9 整数レジスタでの NaT (Not a Thing) のサポート

従来は,整数レジスタの NaT ビットが設定されたときに,デバッガはユーザに通知しませんでした。ユーザは,%GRNAT0 レジスタのビットを調べ,この情報を確認する必要がありました。以下の例では,整数レジスタ R9 および R10 の NaT ビットがオンになっています。


DBG> ex %r9:%r12 
TEST\%R9:       0000000000000000 
TEST\%R10:      0000000000000000 
TEST\%R11:      0000000000000000 
TEST\%SP:       000000007AC8FB70 
DBG> ex/bin grnat0 <9,4,0> 
TEST\%GRNAT0+1: 0110 
DBG> 

整数レジスタの NaT ビットがオンになっていると,デバッガが文字列 "NaT" を表示するようになりました。以下に例を示します。


DBG> ex %r9:%r12 
TEST\%R9:       0000000000000000 
TEST\%R10:      NaT 
TEST\%R11:      NaT 
TEST\%SP:       000000007AC8FB70 
DBG> ex/bin grnat0 <9,4,0> 
TEST\%GRNAT0+1: 0110 
DBG> 

型のオーバーライドを指定することで,NaT ビットがオンのレジスタの実際の生の値を表示することができます。以下に例を示します。


DBG> ex %r10 
TEST\%R10:      NaT 
DBG> ex/quad %r10 
TEST\%R10:      0000000000000000 
DBG> 


前へ 次へ 目次 索引