WP1 - RTOS State of the Art Analysis: Deliverable D1.1 - RTOS Analysis | ||
---|---|---|
Prev | Chapter 12. VxWorks 5.x | Next |
VxWorks implement two APIs for IPC - native wind API and POSIX 1003.1b compliant API.
Binary, counting, mutex, with timeout.
Semphore creation and deletion is performed by calling semBCreate() (binary), semCCreate() (counting), semMCreate() (mutex) and semClose() functions.
Function semTake() attempts to take a semaphore. If the semaphore is not available, semTake() blocks until semaphore becomes available.Duration of blocking depends on parameter timeout which can be WAIT_FOREVER, WAIT_NOWAIT or any nonzero value which specifies timeout.When timeout is WAIT_NOWAIT, semTake() becomes nonblocking.
Mutex semaphore implements priority inheritance algorithm and provides means disabling task deletion while this task owns such semaphore. These features can be switched on during semaphore creation by parameters SEM_INVERSION_SAFE and SEM_DELETE_SAFE.
Possible with mutex semaphores.
Synchronous, prioritized messages, with timeout, fixed depth and max message size. Depth and maximal message length is specified durinq queue creation and it can't be changed later. Wind API provides functions msgQCreate() for queue creation, msgQSend() for sending a message and msgQRcvd() for receiving a message.
none
No special means because there are no memory protection between tasks. For multiprocessor systems optional package VxMP.
The wind kernel supports two types of signal interface: UNIX BSD-style signals and POSIX-compatible signals. The POSIX-compatible signal interface, in turn, includes both the fundamental signaling interface specified in the POSIX standard 1003.1, and the queued-signals extension from POSIX 1003.1b.
The signal facility provides a set of 31 distinct signals. A signal can be raised by calling kill(). A signal handler is bound to a particular signal with sigaction(). Signals are blocked for the duration of the signal handler. Tasks can block the occurrence of certain signals with sigprocmask(). If a signal is blocked when it is raised, its handler routine will be called when the signal becomes unblocked.