Solaris オペレーティングシステムは、2 つのアプリケーションバイナリインタフェース (ABI) を同時にサポートしています。言い換えれば、2 つの独立した、完全に機能するシステムコールパスが、64 ビットカーネルに接続されており、2 組のライブラリがアプリケーションをサポートします。
64 ビットオペレーティングシステムは、64 ビット CPU ハードウェア上でのみ動作しますが、32 ビットオペレーティングシステムは、32 ビットと 64 ビットのどちらの CPU ハードウェア上でも動作します。Solaris の 32 ビットと 64 ビットのオペレーティング環境は同じように見えるので、特定のハードウェアプラットフォーム上でどちらのバージョンが動作しているかすぐに判断できないことがあります。
isainfo コマンドを使用すると、システムで実行されているバージョンを簡単に確認できます。この新しいコマンドは、システムでサポートされているアプリケーション環境に関する情報を出力します。
次に示すのは、64 ビットオペレーティングシステムが実行されている UltraSPARCTM システムで実行した isainfo コマンドの出力例です。
% isainfo -v 64-bit sparcv9 applications 32-bit sparc applications |
32 ビット Solaris オペレーティングシステムが実行されている x86 システムで同じコマンドを実行した場合は、次のように出力されます。
% isainfo -v 32-bit i386 applications |
64 ビット Solaris オペレーティングシステムが実行されている x86 システムで同じコマンドを実行した場合は、次のように出力されます。
% isainfo -v 64-bit amd64 applications 32-bit i386 applications |
64 ビットカーネルを実行できない x86 システムもあります。そのシステムで Solaris オペレーティングシステムを実行する場合、カーネルは 32 ビット モードで実行されます。
isainfo(1) コマンドの便利なオプションとして -n があり、実行中のプラットフォームのネイティブ命令セットを出力できます。
% isainfo -n sparcv9 |
-b オプションを使用すると、対応するネイティブのアプリケーション環境のアドレス空間のビット幅を、次のように出力できます。
% echo "Welcome to "`isainfo -b`"-bit Solaris" Welcome to 64-bit Solaris |
64 ビット機能があるかどうかを判定することによって、以前のバージョンの Solaris オペレーティングシステムで実行しなければならないアプリケーションであるかどうかを判断することができます。uname(1) で OS のバージョンを調べるか、または /usr/bin/isainfo が存在するかどうかを調べます。
関連コマンドの isalist(1) は、シェルスクリプトで使用するのに適しており、プラットフォームでサポートされている命令セットをすべて出力するのに使うことができます。ただし、命令セットの拡張の数が増加するに従い、すべてのサブセットを一覧表示することの限界が明らかになっています。今後、このインタフェースに依存しないようにしてください。
命令セットの拡張に依存するライブラリを作成するには、ダイナミックリンカーのハードウェア機能を使用します。isainfo コマンドを使用して、現在のプラットフォーム上の命令セットの拡張を確認します。
% isainfo -x amd64: sse2 sse fxsr amd_3dnowx amd_3dnow amd_mmx mmx cmov amd_sysc cx8 tsc fpu i386: sse2 sse fxsr amd_3dnowx amd_3dnow amd_mmx mmx cmov amd_sysc cx8 tsc fpu |