POSIX 1003.1b

POSIX 1003.1bとは、POSIXによって定義された、リアルタイム拡張APIの規格である。古くはPOSIX.4とも呼ばれた。
概要.
この規格は、XSIと呼ばれるPOSIX 1003.1規格のオプションに含まれているが、多くのベンダーがリアルタイムAPIへの対応を強調するために、POSIX1003.1bの表記を利用している。
この規格に対応している場合は、ヘッダーファイルで「codice_1」を定義するが、個々の関数への対応は個別に定義されているため、詳細は実装によって異なる。
リアルタイム定義の内容を大別すると、「Realtime (XSI Option)」と「Advanced Realtime (XSI Option)」の2つがあるが、この規格はAPIを定義するだけであり、リアルタイム性能を保証する規格ではないことに注意しなければならない。
またリアルタイム拡張規格の実装には、プロセスモデル、スレッドモデル、タスクモデル、あるいは、これらの組み合わせなどの複数の実装形態が存在する。
特に、非同期IOシステムコールでは、リアルタイムオペレーティングシステム（リアルタイムカーネル）自身が非同期IOシステムコールをサポートしていない場合の実装では、タスクやスレッドを生成するために、POSIXスレッド (旧POSIX 1003.1c) との相互作用が発生する。
また、LinuxのPOSIXスレッドでは、リアルタイムシグナルをカーネルがスレッドの制御に使用しているため、リアルタイムシグナルの数個を使用することができない。
Realtime (XSI Option).
XSIの定義には、以下のものがあり、IEEE Std 1003.1-2001に準拠したリアルタイムAPIをサポートしている場合、各マクロシンボルは、codice_2として定義されている。IEEE Std 1003.1-2008の場合にはcodice_3として定義されている。
例えば、codice_4が定義されている場合はcodice_5, codice_6関数がサポートされている。
codice_7が定義されている場合はcodice_8, codice_9関数がサポートされている。
また、codice_10が定義されていても、codice_11が定義されていない場合には、codice_12構造体のcodice_13フィールドは意味を持たない（codice_11は、codice_10のオプションである）。
すべてのAPIは共通でも、現実の動作はライブラリとカーネル実装の組み合わせによって異なるため、プログラムがエラー無しでコンパイルされたとしても、同じ動作をするとは限らない。
リアルタイムのスレッド規格.
以下の規格は、正確にはPOSIXスレッドに含まれるが、リアルタイムのスレッド規格として以下に記述する。
リアルタイムスレッドをサポートしている場合には、codice_46が定義されている。
サンプルプログラム.
コンカレント日本によるPDF「ベーシックトレーニング編」にいくつかのサンプルがある。