Process management

QNX provides both POSIX processes and POSIX threads. So, the process management is the responsible for the process creation and destruction as well as the management of process attributes.

POSIX processes management:

QNX realizes the POSIX processes creation and destruction, basically, using these POSIX functions: spawn(), fork() and exec().

Moreover, QNX provides other non-POSIX functions. These primitives are: spawnl(), spawnle(), spawnlp(), spawnlpe(), spawnp(), spawnv(), spawnve(), spawnvp(), spawnvpe(), execlpe() and execvpe().

Scheduling policy:

The QNX microkernel provides the following scheduling algorithms:

Periodic threads:

QNX does not provide functions to implement directly periodic threads. Therefore, it is necessary to use timers calls to perform this functioning. Moreover, using timers, the following notification types may be used: signal, pulses and thread creation.

Range of priorities and maximum number of threads:

Each thread can have a range of priorities from 0 to 31 (the highest priority), independently of the scheduling policy. The special idle thread (in the process manager) has priority 0 and is always ready to run. Moreover, a thread have a real priority and a effective priority, and it is scheduled in accordance with its effective priority.

There is no limit thread creation in the same process, except the memory space, of course.

Thread creation and deletion:

QNX provides a full-POSIX API for managing the thread creation and deletion. The following table shows these functions as well as the microkernel primitives used by these routines: