出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/07/19 09:05 UTC 版)
|
|
POSIX 1003.1bとは、POSIXによって定義された、リアルタイム拡張APIの規格である。古くはPOSIX.4とも呼ばれた。
この規格は、XSIと呼ばれるPOSIX 1003.1規格のオプションに含まれているが、多くのベンダーがリアルタイムAPIへの対応を強調するために、POSIX1003.1bの表記を利用している。
この規格に対応している場合は、ヘッダーファイルで「_XOPEN_REALTIME」を定義するが、個々の関数への対応は個別に定義されているため、詳細は実装によって異なる。
リアルタイム定義の内容を大別すると、「Realtime (XSI Option)」と「Advanced Realtime (XSI Option)」の2つがあるが、この規格はAPIを定義するだけであり、リアルタイム性能を保証する規格ではないことに注意しなければならない。
またリアルタイム拡張規格の実装には、プロセスモデル、スレッドモデル、タスクモデル、あるいは、これらの組み合わせなどの複数の実装形態が存在する。
特に、非同期IOシステムコールでは、リアルタイムオペレーティングシステム(リアルタイムカーネル)自身が非同期IOシステムコールをサポートしていない場合の実装では、タスクやスレッドを生成するために、POSIXスレッド (旧POSIX 1003.1c) との相互作用が発生する。
また、LinuxのPOSIXスレッドでは、リアルタイムシグナルをカーネルがスレッドの制御に使用しているため、リアルタイムシグナルの数個を使用することができない[1]。
XSIの定義には、以下のものがあり、IEEE Std 1003.1-2001に準拠したリアルタイムAPIをサポートしている場合、各マクロシンボルは、200112Lとして定義されている。IEEE Std 1003.1-2008の場合には200809Lとして定義されている。
例えば、_POSIX_MEMLOCKが定義されている場合はmlockall(int flags), munlockall(void)関数がサポートされている。
_POSIX_MEMLOCK_RANGEが定義されている場合はmlock(const void *addr, size_t len), munlock(const void *addr, size_t len)関数がサポートされている。
また、_POSIX_ASYNCHRONOUS_IOが定義されていても、_POSIX_PRIORITIZED_IOが定義されていない場合には、struct aiocb構造体のaio_reqprioフィールドは意味を持たない(_POSIX_PRIORITIZED_IOは、_POSIX_ASYNCHRONOUS_IOのオプションである)。
すべてのAPIは共通でも、現実の動作はライブラリとカーネル実装の組み合わせによって異なるため、プログラムがエラー無しでコンパイルされたとしても、同じ動作をするとは限らない。
_POSIX_ASYNCHRONOUS_IO
aio_cancel() - 完了していない非同期IOをキャンセルする。aio_error() - 非同期IO操作のエラー状態を取得する。aio_read() - 非同期readを行う。aio_return() - 非同期IO操作の返り値を取得する。aio_suspend() - 非同期IO操作の完了を待つ。aio_write() - 非同期writeを行う。lio_listio() - 非同期IOをリスト操作で行う。_POSIX_PRIORITIZED_IO
struct aiocbのaio_reqprioフィールドにしたがって、IOスケジューリングを行う。
_POSIX_SYNCHRONIZED_IO
aio_fsync() - パラメータで渡された非同期IOの、同期していない操作を同期させる。_POSIX_FSYNC
fsync(), fdatasync() - メモリ上の内容をファイルと同期させる。_POSIX_MAPPED_FILES
mmap() - ファイルやデバイスをメモリにマップする。munmap() - メモリにマップしたファイルやデバイスをアンマップする。_POSIX_MEMLOCK
_POSIX_MEMLOCK_RANGE
_POSIX_MEMORY_PROTECTION
mprotect()は、mmap()で獲得した領域に対してのみ使用できる。
_POSIX_MESSAGE_PASSING
_POSIX_PRIORITY_SCHEDULING
_POSIX_REALTIME_SIGNALS
_POSIX_SEMAPHORES
_POSIX_SHARED_MEMORY_OBJECTS
_POSIX_TIMERS
_POSIX_ADVISORY_INFO
_POSIX_CLOCK_SELECTION
CLOCK_REALTIME等を指示できる。
_POSIX_CPUTIME
CLOCK_PROCESS_CPUTIME_ID,CLOCK_THREAD_CPUTIME_IDを指示できる。
_POSIX_MONOTONIC_CLOCK
CLOCK_NONOTONICを指示できるが、クロックの値をclock_settime()を介して設定することはできない。
_POSIX_SPAWN
_POSIX_SPORADIC_SERVER
_POSIX_TIMEOUTS
sigwaitinfo()_POSIX_TYPED_MEMORY_OBJECTS
以下の規格は、正確にはPOSIXスレッドに含まれるが、リアルタイムのスレッド規格として以下に記述する。 リアルタイムスレッドをサポートしている場合には、_XOPEN_REALTIME_THREADSが定義されている。
_POSIX_THREAD_PRIO_INHERIT
_POSIX_THREAD_PRIO_PROTECT
_POSIX_THREAD_PRIORITY_SCHEDULING
_POSIX_BARRIERS
_POSIX_SPIN_LOCKS
_POSIX_THREAD_CPUTIME
_POSIX_THREAD_SPORADIC_SERVER
コンカレント日本によるPDF「ベーシックトレーニング編」にいくつかのサンプルがある。