この章では,Tru64 UNIX の開発環境で提供する主な機能について説明します。 次のトピックについて説明します。
Compaq C コンパイラ
このコンパイラは,きわめて効果的なコードを生成して Alpha アーキテクチャの 64 ビット・アドレス空間を十分に活用できるように,標準に準拠しながら高度に最適化されています。 (6.1 節)
C,アセンブリ言語,Fortran (f77 および f90),C++,Pascal,および Ada をサポートするデバッガ (6.2 節)
ATOM,gprof
,prof
,および
uprofile
のプロファイリング・ツール (6.3 節)
シェアード・ライブラリ (6.4 節)
実行時ライブラリ (6.5 節)
Java 開発キット (JDK) (6.6 節)
開発コマンド (6.7 節)
POSIX Thread,Visual Thread,Thread-Independent Service のサポート (6.8 節)
Berkley Memory-Mapped File Support (mmap) 機能 (6.9 節)
リアルタイム・ユーザとプログラミング環境 (6.10 節)
ネットワーク・プログラミング環境 (6.11 節)
また,Tru64 UNIX は,国際化機能,標準の UNIX 開発ツール (awk
,lint
,make
,prof
など),Ada,C++,Cobol,Fortran,Pascal プログラムのための実行時ライブラリを提供します。
詳細については,『プログラミング・ガイド』,『プログラミング・サポートツール・ガイド』,『Assembly Language Programmer's Guide』,および『国際化ソフトウェア・プログラミング・ガイド』を参照してください。
6.1 Compaq C コンパイラ
Tru64 UNIX で提供する Compaq C コンパイラは,Alpha アーキテクチャの 64 ビット・アドレス空間を十分に活用した効果的なコードを生成するための,標準に準拠した,高度に最適化された C コンパイラです。 Compaq C コンパイラは,次の C言語をコンパイルできます。
拡張 ANSI および ISO C (省略時の設定 -std)
厳密な ANSI および ISO C (-std1,-isoc94)
K&R C (-std0)
Microsoft C (-ms)
VAX C (-vaxc)
Compaq C コンパイラは,次の標準に準拠してコンパイルを行います。
ANSI および ISO C (cc
-std1)
XPG4-UNIX (c89
-D_XOPEN_SOURCE_EXTENDED)
標準への準拠についての詳細は,
standards
(5)
Compaq C コンパイラは,以下の言語拡張をサポートします。
OpenMP 並行分解指示文 (-omp,-check_omp,-mp)
Microsoft C 構造化例外処理 (try-except
と
try-finally
) およびスレッド・ローカル・ストレージ
メモリの消費を抑え,ポーティングを容易にする 32 ビット・ポインタ (省略時は 64 ビット・ポインタ) (-taso,
-xtaso,
-xtaso_short; 詳細は
protect_headers_setup
(8)
命令シーケンス・インラインを拡張し最適化する,#pragma
およびイントリンシック関数を使用したユーザ定義アセンブリ言語シーケンス
データ・アラインメントの制御のための
#pragmas
およびコマンド行オプション (-assume,
-misalign,
-Zp,
-member_alignment)
Compaq C コンパイラは,次のような算術演算に関する拡張機能をサポートします。
IEEE 浮動小数点 (NaN,INF などの例外条件の適切な処理を含む)
Fast math モード (INF,NaN などは変換され例外処理は行わない)
long double
に対する 4 倍精度 (128-bit) 浮動小数点表現
Tru64 UNIX で提供する Compaq C
コンパイラについての詳細は,
cc
(1)6.2 デバッガ
Tru64 UNIX は,次のソース・コード・デバッガをサポートします。
dbx
ladebug
dbx
デバッガは,ソース・コード・レベルあるいはマシン・コード・レベルでのプログラムのデバッグに利用できます。
dbx
がサポートするインタフェースは,コマンド行インタフェースです。
dbx
を使用して実行できるタスクは次のとおりです。
C,Fortran (f77 および f90),アセンブリ言語,Pascal で記述されたプログラムのデバッグ
アクティブ・カーネル,コアダンプ,複数のスレッドを使用したプログラムのデバッグ (
/proc
を使用して実行プロセスに結び付ける),シェアード・ライブラリのデバッグ
カーネルのコアダンプの分析
ユーザ・プログラムあるいはカーネルのオンディスク・コピーへのパッチの適用
マルチプロセス・デバッグの実行と,
fork
および
exec
呼び出しにまたがったデバッグの実行
ladebug
デバッガは,GUI と
dbx
と同じようなコマンド行インタフェースの両方をサポートするオブジェクト指向のソース・レベル・シンボリック・デバッガです。
ladebug
を使用して実行できるタスクは次のとおりです。
実行プロセスのアタッチおよびデタッチ
fork
および
exec
による検出とデバッグ
マルチ・プロセスのデバッグ
マルチスレッド・プログラム (POSIX スレッド・アプリケーションあるいはカーネル・スレッドを使用するカーネル・モジュール) のデバッグ
C++,C,Fortran 77,Fortran 90,Ada,COBOL あるいは アセンブリ言語で作成された プログラムのデバッグ
ladebug
は,C++ 名をデマングルし,C++ の式を理解する完全な C++ デバッガで,インライン関数,テンプレート,C++ 例外処理をサポートします。
F77/F90 のサポートには,大文字小文字の区別なし,コモン・ブロック,代替エントリ・ポイント,言語に依存するタイプのプリント,シェープ・アレイの想定が含まれます。
マシン・レベル・コードのデバッグ
実行プログラムあるいはコア・ダンプのデバッグ
シェアード・オブジェクトのデバッグ
境界合わせされていないデータへのアクセスに対する処理
アクティブなカーネルのローカル/リモート・デバッグと カーネル・クラッシュ・ダンプの解析
ソース・プログラミング言語の構文を使用した式の評価
異なるターゲット・マシンで実行しているプログラムのリモート・デバッグ・サーバによるリモート・デバッグ
ladebug
リモート・デバッグ・プロトコルは,プロトコルに準拠したサンプル・リモート・デバッグ・サーバと一緒に使用することができます。
国際化サポートは別のキットで提供されます。
国際化バージヨンの
ladebug
デバッガは,入力としてマルチバイト文字を受け入れ,デバッガのグローバル・ロケール設定に従ってローカル言語文字を出力します。
ladebug
デバッガは,C/C++ の
wchar_t
データ型もサポートします。
6.3 プロファイリング・ツール
Tru64 UNIX は,次のプロファイリング・ツールをサポートします。
ATOM
各種のユーザ定義プログラム分析ツールを構築できる,柔軟なコード計測インタフェースを提供します。 ツールキットには,計測制御ユーティリティおよびライブラリが含まれており,手順的なインタフェースによって特別な目的の計測および分析ツールを開発することができます。
ATOM は次のような組み込み計測/分析ツールを提供します。
hiprof
gprof
によって処理される出力を生成する セル・グラフ・プロファイリング・ツール
third
(Third degree)
不正なメモリ・アクセスに対するメモリ・リークおよびメモリ・チェックを発見するツール
pixie
プログラムの実行可能イメージとシェアード・ライブラリのプロファイルを行う既存の
pixie
基本ブロック・プロファイラのスーパーセット。
pixie
の出力は
prof
によって分析されます。
Tru64 UNIX は,次のプロファイリング・ツールをサポートします。
gprof
-pg
オプションでコンパイルされたプログラムに対して,gprof
は,名前付きのプロシージャが相互に実行した呼び出しの回数と,各々のプロシージャが消費した CPU 時間の量を表示します。
hiprof
で計測されたプログラムの出力の分析も行います。
prof
-pオプションでコンパイルされたプログラムに対して,プログラムおよびシェアード・ライブラリで各プロシージャが消費した CPU 時間を PC サンプリング統計値を使用して表示します。
pixie
で計測されたプログラムあるいは
uprofile
/kprofile
でモニタされたプログラムの出力の分析も行います。
uprofile
/kprofile
アプリケーション・プログラムあるいはカーネル自体の実行中に,Alpha チップの組み込み性能カウンタを使用して CPU におけるさまざまなイベントをサンプリングします。
prof
で分析可能な CPU サイクル,メモリ/キャッシュの効果 などをレポートすることができます。
プロファイリング・ツールについての詳細は,『プログラミング・ガイド』およびそれぞれのリファレンス・ページを参照してください。
6.4 シェアード・ライブラリ
Tru64 UNIX は,動的なロードのための System V API (dlopen
,dlclose
,dlsym
,dlerror
) に加えて,シェアード・ライブラリのロードとシンボル解決のための System V セマンティクスと互換性のある,動的なシェアード・ライブラリを提供しています。
シェアード・ライブラリを使用すると,ルーチンそのものをプログラムに含めるのではなく,ルーチンのロード方法およびアクセス方法に関する情報のみをプログラムに含めることが可能になるため,システムの性能を向上させ,ディスクおよびメモリの使用量を低減させ,システム管理を単純化することができます。
シェアード・ライブラリは
/usr/shlib
ディレクトリにあります。
Tru64 UNIX の X11R6.3 および Motif の実装では,スタティック・ルーチンおよびシェアード・ルーチンの両方をサポートしています。
X11 シェアード・ライブラリは,/usr/shlib/X11
ディレクトリにあります。
6.4.1 クイックスタート
アドレスが競合する場合,ユニークなアドレスによって,より早くシェアード・ライブラリを開始できるように クイックスタート機能をサポートしています。
各シェアード・ライブラリは,/usr/shlib/so_locations
ファイルにユニークなアドレスを持っている必要があります。
これにより,実行時にシェアード・オブジェクトを再配置する必要がないため,シェアード・ライブラリとリンクしているアプリケーションをより早く実行できます。
シエアード・ライブラリを作成すると
ld
ユーティリティが
so_locations
ファイルを読み書きします。
6.4.2 ダイナミック・ローダ
Tru64 UNIX は,System V Release 4.0 互換のローダを使用して シェアード・ライブラリを動的にロードします。 このローダは次の拡張機能を提供します。
動的にロードされたシェアード・ライブラリヘの呼び込み
シンボル・プリエンプション (preemption) を含む,System V Release 4.0 シンボル解決セマンティクス
プログラム・ロード時間短縮のためのライブラリのプリリンク
Tru64 UNIX は,シエアード・ライブラリの完全なあるいは 部分的な重複をサポートしています。 ローダは,通常の探索パスにバージョン文字列を追加したパス名を使用して,通常の探索パスのサブディレクトリで古いバージョンのシェアード・ライブラリを探します。 このように,複数バージョンのシェアード・ライブラリを保持し,適切なバージョンのシェアード・ライブラリをアプリケーションにリンクできるので,カーネル・インタフェースあるいはグローバル・データ定義に対する変更のように,通常はバイナリ互換性が無くなるような変更が行われた場合も,アプリケーションには影響を与えません。
たとえば,OSF は Motif 1.2 でいくつかのインタフェースを変更したため,Motif 1.1.3 ライブラリを使用して構築したアプリケーションとの互換性が無くなっています。
このため Tru64 UNIX では,バイナリ互換性を維持するために,バージョニング機能を使用して Motif 1.1.3 と Motif 1.2 の両方のシェアード・ライブラリを提供し,アプリケーションが必要に応じて Motif 1.1.3 のシェアード・ライブラリにもアクセスできるようにしています。
シェアード・ライブラリのバージョニングについての詳細は,『プログラミング・ガイド』を参照してください。
6.5 実行時ライブラリ
Tru64 UNIX は次の実行時ライブラリ (RTL) をサポートします。 これらのライブラリにより,対応する言語のプログラムをシステムにインストールしておかなくても,以前にコンパイルしたプログラムを実行することができます。
Compaq C++ 実行時ライブラリ (libcxx
,
libcomplex
,
libtask
)
これらのライブラリは,I/O 処理,複雑な計算機能,マルチタスキングなどの Compaq C++ 実行時機能をサポートします。
Compaq COBOL 実行時ライブラリ (libcob
,
libots2
,
libisamstub
)
これらのライブラリは,I/O 処理,10 進法での計算,COBOL ACCEPT/DISPLAY セマンティクス,STRING/UNSTRING 操作,CALL および CANCEL などの Compaq COBOL 実行時機能をサポートします。
Compaq Fortran 実行時ライブラリ (libfor
,
libfutil
,
libUfor
)
これらのライブラリは,I/O 処理,イントリンシック関数,データ・フォーマット,データ変換,算術関数,通常のオペレーティング・システム・サービスヘの Fortran バインドなどの Compaq Fortran 実行時機能をサポートします。
Compaq Pascal 実行時ライブラリ (libpas
)
このライブラリは,I/O 処理,算術関数,タイムサービスおよびデート・サービス,ファイル・サービスなどの Compaq Pascal 実行時機能をサポートします。
JavaTM 開発キット (JDK) が,Tru64 UNIX のコンポーネントとして組み込まれています。 このキットを使用して,Java アプレットやプログラムを開発および実行することができます。
JDK for Tru64 UNIX には JIT (just-in-time コンパイラ) が付属しており,アプリケーションの Java バイトコードおよび実行時呼び出しをネイティブの Alpha マシン・コードに,オンザフライでコンパイルします。
この結果,Java インタプリタを使用して実行する場合と比較して,Java アプリケーションの実行が大幅に高速化されます。
省略時の設定では,java
コマンドを入力すると,JIT が実行されます。
JDK は,Java スレッドをネイティブ (POSIX) スレッドの最上位に実装します。 これにより,マルチプロセッサ・マシンを使用している場合は,アプリケーションの中の異なる Java スレッドを,別々のプロセッサで実行することができます。 また,これは,POSIX スレッドを使用して実装されたネイティブ・メソッドまたはネイティブ API (たとえば DCE) にリンクされたときに,Java アプリケーションが正しく実行されることを意味します。
詳細については,JDK がインストールされている Tru64 UNIX システムの
/usr/share/doclib/java/index.html
を参照してください。
6.7 開発コマンド
Tru64 UNIX は,ソース・コード制御システム
rcs
および
sccs
とともに,ar
,
as
,
btou
,
cb
,
cc
,
cflow
,
cpp
,
ctags
,
cxref
,
c89
,
dbx
,
dis
,
error
,
file
,
indent
,
ld
,
lex
,
lint
,
loader
,
m4
,
make
,
mig
,
mkstr
,
nm
,
odump
,
pixie
,
ppu
,
prof
,
ranlib
,
size
,
stdump
,
strings
,
strip
,
tsort
,
xstr
,および
yacc
などの開発ツールをサポートします。
開発コマンドの多くは System V,POSIX,XPG4 および XPG4-UNIX 標準によって指定されており,Tru64 UNIX はこれらに完全に準拠しています。
6.8 スレッドのサポート
Tru64 UNIX は,以前は DECthread と呼ばれた POSIX スレッド・ライブラリ,Visual Thread,Thread-Independent Service を提供します。
6.8.1 POSIX スレッド・ライブラリ
POSIX スレッド・ライブラリは,POSIX 1003.1c-1995 標準マルチスレッド API を実装したものです。
POSIX スレッドは,効率的な 2 レベルのスケジューリング (POSIX プロセス・コンテンション・スコープで,カーネルに密接に統合されており,計算と I/O の同時性のレベルが常に最大になるよう自動的に維持されます。
他のプロセスまたはカーネルにあるハードウェア・イベントまたはスレッドに応じて,リアルタイムにスケジュールする必要があるアプリケーションの場合は,POSIX スレッドがシステムコンテンション・スコープとスケジューリング機能を提供します。
6.8.2 Visual Threads
Visual Threads は,マルチスレッド化されたアプリケーションを分析し,デバッグするための診断ツールです。 Visual Threads を使うと,マルチスレッド化に関する一般的なの問題を自動的に診断できます。 これらの問題には,デッドロック,共用データの保護,スレッドの使用方法のエラーなどがあります。
また,このツールを使用して,スレッドに関連するアプリケーションの性能を監視することができ,ボトルネックやロックの細分性の問題の識別を支援します。 これは,アプリケーションが明確な症状を示さない場合でも,問題のある領域を識別するのに使用できる,ユニークなデバッグ・ツールです。
Visual Threads は,POSIX スレッド (DECthreads) を使用するアプリケーション,または Java で書かれた Tru64 UNIX アプリケーションであれば,どれに対しても使用することができます。 これはあらゆるサイズのマルチスレッド・アプリケーション用に設計されており,スレッドが 2 つのアプリケーションから 数百のアプリケーションまで処理することができます。
Visual Threads は,Developers' Toolkit の一部としてライセンスされます。
6.8.3 TIS (Thread Independent Services)
Tru64 UNIX は,アプリケーション作成者が,非スレッド・ライブラリおよびアプリケーションに対してスレッド・セーフ・コードを作成できるように TIS (Thread Independent Services) ルーチンをサポートします。
スレッドがある場合,これらのルーチンは指定したスレッド・セーフ機能を提供します。
スレッドがない場合,これらのルーチンは最小限のオーバヘッドしか呼び出し元に与えません。
シングルスレッドおよびマルチスレッドの両方のアプリケーションをサポートするために,TIS ルーチンは C 実行時ライブラリによって使用されます。
6.9 メモリ・マップ・ファイル・サポート(mmap)
Tru64 UNIX は,Berkeley メモリ・マップ・ファイル・サポート (mmap) 機能をサポートします。
この機能により,アプリケーションは,I/O 操作ではなくメモリ操作でデータ・ファイルにアクセスできます。
6.10 リアルタイム・ユーザとプログラミング環境
Tru64 UNIX は,リアルタイム・ユーザ環境およびリアルタイム・プログラミング環境をサポートしています。
これらのリアルタイム環境は,オプションのリアルタイム・サブセットとして提供されています。
Tru64 UNIX リアリタイム・プログラミング環境は,リアルタイムに関する POSIX 1003.1b-1993 標準に準拠しており,POSIX 環境で移植可能なリアルタイム・アプリケーションを開発/実行することができます。
POSIX 1003.1b インタフェースは,リアルタイムおよび非同期 I/O ライブラリ,librt
および
libaio
で提供されています。
カーネル・プリエンプション (preemption) 機能を有効にすると, カーネル・モードで実行しているかユーザ・モードで実行しているかにかかわらず,優先順位の高いプロセスを優先順位の低いプロセスより優先することができます。 この完全にプリエンプティブなカーネルによって,プロセス・プリエンプション待ち時間 (Process Preemption Latency: 優先順位の低いプロセスより優先するために必要な総時間) を最小にすることができます。
プリエンプティブなカーネルに加えて,Tru64 UNIX リアルタイム・プログラミング環境では,次の POSIX 1003.1b 機能をサポートします。
リアルタイム・クロックおよびタイマ
リアルタイム・キュー・シグナル
固定プライオリティ・スケジュール・ポリシ
リアルタイム・スケジューラ優先レベル
セマフォのカウント
共有メモリ
プロセス・メモリ・ロック
非同期 I/O
同期 I/O
メッセージ引き渡しインタフェース
リアルタイム・ライブラリのスレッドセーフの実現
リアルタイム・プログラミング環境についての詳細は,『Guide to Realtime Programming』を参照してください。
リアルタイム・カーネルの構成についての詳細は,『インストレーション・ガイド』を参照してください。
6.11 ネットワーク・プログラミング・インタフェース
ネットワーク・プログラミング環境には,アプリケーション,カーネル,およびドライバの開発者がネットワーク・アプリケーションを作成し,ネットワーク・プロトコルを実装するためのプログラミング・インタフェースが含まれます。 さらに,ライブラリ,データ構造体,ヘッダ・ファイル,およびトランスポート・プロトコルなど,アプリケーションがデータの処理と伝送を行うために必要とするカーネル・レベルのリソースも含まれます。
このオペレーティング・システムでは,次のプログラミング・インタフェースがサポートされています。
X/Open トランスポート・インタフェース (XTI/TLI)
BSD ソケット
System V Release 4.0 STREAMS
データ・リンク・インタフェース (DLI)
データ・リンク・プロバイダ・インタフェース (DLPI)
拡張可能 SNMP (eSNMP)
ネットワーク・プログラミング環境の詳細については,『ネットワーク・プログラミング・ガイド』 を参照してください。