ここでは、Solaris 10 OS での動作の変更点など、一般的な情報について説明します。
Single UNIX Specification, Version 3 (SUSv3) では、次の POSIX オペレーティングシステムインタフェースが更新されます。
POSIX.1-1990
POSIX.1b-1993
POSIX.1c-1996
POSIX.2-1992
POSIX.2a-1992
更新には、次のような変更点が含まれます。
対話型でない Korn シェルでは、環境変数 ENV は展開されなくなりました。この変更は、/bin/ksh と /usr/xpg4/bin/sh の両方に適用されます。
SUSv3 などの規格に準拠するアプリケーションを構築するには、適切な機能テストマクロ、コンパイラ、およびオプションを使用する必要があります。詳細は、standards(5) のマニュアルページを参照してください。
-m オプションを指定して file コマンドを使用すると、ユーザー定義のマジックファイルに対して符号付き比較が実行されます。また、x86 環境では、マジック値を比較する前にマルチバイト整数からビッグエンディアン (SPARC) 順序への切り替えは行われなくなりました。詳細は、file(1) および magic(4) のマニュアルページを参照してください。
snprintf() と vsnprintf() は、入力値が n=0 のとき、書式設定されるバイト数を返すようになりました。詳細は、snprintf(3C) および vsnprintf(3C) のマニュアルページを参照してください。
起動時に、エディタは追加の条件を確認してから、$HOME または現在のディレクトリにある .exrc ファイルを読み取ります。詳細は、ex(1) および vi(1) のマニュアルページを参照してください。
入力の time_t が大きすぎて tm 構造体で表現できない場合、次の関数は null ポインタを返し、errno を EOVERFLOW に設定します。
gmtime()
gmtime_r()
localtime()
localtime_r()
詳細は、gmtime(3C)、gmtime_r(3C)、localtime(3C)、および localtime_r(3C) のマニュアルページを参照してください。
SUSv3 では、既存のディレクトリまたは作成するディレクトリを指定するパスの場合のみ、パス名の末尾にスラッシュ文字 (/) を使用できます。
/usr/xpg6/bin と /usr/xpg4/bin にあるユーティリティーの動作は、SUSv3 または XPG4 に準拠しており、Solaris のデフォルトの動作と衝突します。SUSv3 に準拠するコマンド行環境を使用するには、PATH を適切に設定する必要があります。詳細は、各ユーティリティーのマニュアルページを参照してください。
TCP ラッパーをサポートするサービスのリストに sendmail ユーティリティーが追加されました。このユーティリティーの追加機能が原因で、Solaris 10 システムでは以前はサービスが非常に厳しく制限されていた場合、sendmail による接続拒否が発生する可能性があります。TCP ラッパーの使用を有効にするには、デーモン名 sendmail を使用してください。TCP ラッパーのサポートについては、『Solaris 10 の概要』の「TCP ラッパーを使用する sendmail バージョン 8.12」を参照してください。TCP ラッパーの設定方法については、SUNWtcpd パッケージに含まれている tcpd(1M) および hosts_access(4) のマニュアルページを参照してください。
Solaris 10 リリースでは、Linux オペレーティングシステムとのマルチブート環境を構成するために、Solaris fdisk の識別子は 0xbf に設定されます。以前の Solaris リリースでは、Solaris fdisk の識別子は、Linux スワップパーティションの識別子と同じ 0x82 に設定されていました。識別子が変更されたことにより、Linux スワップパーティションの変更や Linux OS の再インストールを行わなくても、Solaris 10 OS と Linux オペレーティングシステムをインストールできます。
Solaris OS では、0x82 という識別子をもつ Solaris fdisk も引き続き認識され、サポートされます。fdisk コマンドを使用すると、0x82 識別子と 0xbf 識別子を切り替えることができます。Solaris Live Upgrade を使用している場合で、0x82 識別子を使用する必要があるときは、luactivate コマンドを使用して 0xbf 識別子と 0x82 識別子を切り替えることができます。
詳細は、fdisk(1M) のマニュアルページを参照してください。
Solaris のアプリケーションは、malloc()、brk()、mmap() などの関数を使用してメモリーを割り当てます。アプリケーションで割り当てることのできるメモリーの最大量は、ユーザー仮想アドレス空間のサイズによって制限されます。ユーザー仮想アドレス空間に含まれているプログラムのテキスト、スタック、データ、ライブラリなどによって、メモリー割り当ての最大サイズがさらに減少することもあります。
32 ビットコンピューティング環境では、ユーザーとカーネルの間で 32 ビット仮想アドレス空間が共有されます。したがって、ユーザー仮想アドレス空間のサイズは、4G バイトからカーネル仮想アドレス空間のサイズを引いたものとなります。カーネル仮想アドレス空間のサイズは、物理メモリーのサイズに応じて決まります。物理メモリーのサイズが大きくなるほど、ユーザー仮想アドレス空間のサイズは小さくなります。8G バイトのメモリーを備えたシステムの場合、ユーザー仮想アドレス空間のサイズは約 3G バイトです。
メモリー割り当て制限のためアプリケーションに十分なメモリーが得られない場合は、次の 2 つの方法があります。
カーネル仮想アドレス空間のデフォルトのサイズを減らして、ユーザー仮想アドレス空間のサイズを増やします。eeprom コマンドを使用して、kernelbase 変数をより高い値に設定できます。kernelbase の変更は慎重に行なってください。システムのカーネル仮想アドレス空間を小さくすると、システムがハングアップしたり、動作効率が低下したりすることがあります。
より良い方法としては、Solaris x86 64 ビットコンピューティング環境でアプリケーションを実行します。
64 ビットコンピューティング環境では、32 ビットアプリケーション用の仮想アドレス空間はすべてユーザー用となります。したがって、32 ビットアプリケーションでは、4G バイトからテキスト、スタック、およびライブラリに必要なユーザーアドレス空間を引いた残りすべてを割り当てることができます。
初期の 64 ビット AMD プロセッサの一部では、メモリー割り当て上限がさらに 1G バイト少なくなる場合があります。使用しているプロセッサがこの影響を受けるかどうかを調べるには、次の手順を実行します。
任意の 32 ビットシェルから、コマンド pmap $$ を実行します。
プロセスマップで、0xC0000000 以上のアドレスが表示されるかどうかを確認します。このようなアドレスが存在しない場合は、Solaris OS によって 32 ビットアプリケーションが制限され、4G バイトの仮想アドレス空間のうち下位の 3G バイトになっています。
64 ビットアプリケーションは、すでに使用中のメモリーに応じて 250T バイトまで割り当てることができます。
Solaris 10 は x86 上で、32 ビットモードおよび 64 ビットモードの no execute (NX) ビットをサポートします。NX ビットを使用すると、mmap() 関数など各種のメモリーシステムコールで PROT_EXEC を使用しない場合に必要となる保護を完全に実装できます。以前 x86 では、マップされたすべてのメモリーに PROT_EXEC が暗黙的に設定されていました。Solaris で NX ビットをサポートすることにより、ウイルスに対する保護が強化されます。
NX に対応したハードウェア上では、PROT_EXEC が指定されていない場合は常に、Solaris OS はデフォルトで NX ビットを使用します。ただし、スタックセグメントでは、NX ビットではなく PROT_EXEC がデフォルトで使用されます。スタックセグメントに関するデフォルトの設定は、次のいずれかを実行することによって変更できます。
/etc/system 内に no_exec_userstack を設定して、すべてのアプリケーションスタックに対して大域的に no exec を設定します。
個別のアプリケーションを /usr/lib/ld/map.noexstk マップファイルにリンクします。
システム管理者は、eeprom コマンドを使用して enforce-prot-exec をオフに設定することで、NX ビットの使用をすべて無効にできます。この変数は、PROT_EXEC のない古いアプリケーションを実行するシステムのために過渡的な回避方法として用意されています。