QNX Neutrino microkernel and process manager (QNX Neutrino)
procnto* [-a d|e|s] [-c] [-e n|o] [-F number] [-fe]
[-h] [-H size] [-mmemmgr_configuration]
[-P priority] [-p] [-T timeout] [-u umask] [-v]
Neutrino
- -ad
- Disable alignment fault emulation.
The procnto manager doesn't
attempt to make misaligned memory accesses work; they'll
cause a SIGBUS signal for the offending thread.
- -ae
- Enable alignment fault emulation.
The procnto manager
attempts to make misaligned memory accesses work, although they'll
be slow. This isn't guaranteed to work; offending threads may
still get a SIGBUS signal.
- -as
- Use the system default for alignment faults. This behavior
depends on your platform:
- ARM
- -ad
- MIPS
- -ad
- PowerPC
- -ae
- SH4
- -ad
- x86
- -ae
- -c
- (QNX Neutrino Core OS 6.3.2 or later)
Prevent the adaptive partitioning scheduler from automatically running threads that receive events
from interrupt handlers as critical.
|
The -c option has an effect only if:
- you're using Adaptive Partitioning
- the thread receiving an event from an interrupt handler is running in a
partition configured with a critical budget
For more information, see the Adaptive
Partitioning User's
Guide. |
- -e n|o
- (QNX Neutrino 6.4.0 or later)
Specify which value to use for EALREADY:
- -eo — use the old value, which is the same as that of
EBUSY.
- -en — use the POSIX-compliant value.
|
The default is -eo; it will be -en in
a later release.
|
For more information, see
“Changes to EALREADY”
in the entry for errno in the
Neutrino Library Reference.
- -F number
- The maximum number of file descriptors that can be open at the same time.
The minimum allowable value is 100.
The default value is 1000, but might be constrained by
the RLIMIT_NOFILE system resource.
|
Sockets, named semaphores, message queues, channel IDs (chids), and
connection IDs (coids) all use file descriptors.
|
To determine the current limit, use the ksh builtin command,
ulimit,
or call
getrlimit()
(see the Library Reference).
- -fe
- Force floating-point emulation. The default is to use
floating-point hardware in the CPU if present, and to emulate it in
software if the CPU has no FPU (see
fpemu.so).
Use this option to simulate a system with
no FPU.
- -h
- Disable CPU halting in idle thread. Some CPU and supporting
chipsets can lock up if the CPU halts when idle; you'll notice the
need for the -h option right away because your system will
lock up after booting.
- -H size
- Sets the initial heap size for procnto. If more memory is required for
procnto, it's dynamically obtained; however, by setting a properly calculated value this option can speed up boot time, and reduce the amount of physical
memory fragmentation.
The size parameter indicates the number of bytes to grow the heap in advance. You can postfix this value with a multiplier character, such as “k” (kilobyte) or “m” (megabyte). For example:
1m == 1024k == 0x100000
If the number is less than 1024 and it isn't postfixed by a multiplier character, it's assumed to be in kilobytes. The default value
is 64 KB if the -H option isn't specified.
- -m memmgr_configuration
- (QNX Neutrino Core OS 6.3.2 or later)
Control the behavior of the memory manager.
The memmgr_configuration string is a sequence of characters
that enable (or if preceded with a ~
character, disable) memory-manager aspects.
|
If you specify more than one -m option, procnto
ignores all but the last one. |
The configuration options are:
- a
- (QNX Neutrino 6.4.1 or later)
Automatically mark memory pages that have a
mem_offset()
performed on it as unmovable when defragmenting physical memory.
This has an effect only if defragmenting is enabled (see the -md
option below).
For more information, see
“Automatically marking memory as unmovable”
in the Process Manager chapter of the System Architecture
guide.
- ~a
- (QNX Neutrino 6.4.1 or later)
Disable the automatic marking of memory pages as unmovable (the default).
- b
- Enable backward compatibility (the default).
|
See the release notes for the current behavior. |
- ~b
- Disable backward compatibility.
- d
- (QNX Neutrino 6.4.1 or later)
Enable the defragmenting of physical memory (the default).
For more information, see
“Defragmenting physical memory”
in the Process Manager chapter of the System Architecture
guide.
- ~d
- (QNX Neutrino 6.4.1 or later)
Disable the defragmenting of physical memory.
- i
- Make
munmap()
act as if UNMAP_INIT_REQUIRED
were specified (i.e. POSIX initialization of the page to all zeroes is
required the next time the underlying physical memory is allocated).
This is the default.
- ~i
- Make munmap() act as if UNMAP_INIT_OPTIONAL
were specified (i.e. initialization of the underlying physical memory
to zeroes on its next allocation is optional).
See
“Initializing allocated memory”
in the Interprocess Communication (IPC) chapter of the
System Architecture guide.
- l (“el”)
- Lock all memory; act as if
mlockall(MCL_CURRENT|MCL_FUTURE) were specified
at the start of every program. For more information, see
mlockall() in the
in the Neutrino Library Reference.
- ~l
- Don't lock all memory (the default).
- L
- Superlock all memory; act as if
ThreadCtl(_NTO_TCTL_IO,0) were specified at the start of
every program (but only insofar as locking the memory;
programs don't actually get I/O privileges).
- ~L
- Don't superlock all memory (the default).
|
If you enable both l and L, the L option
takes priority.
|
- P
- Turn on full allocation of high memory for all processes.
This is mostly useful only for testing.
- ~P
- Make sure that all anonymous allocation occurs below the 4 GB mark
(the default).
- r
- (QNX Neutrino 6.5.0 or later; not supported by the
QNX Neutrino RTOS Safe Kernel 1.0)
Enable address space randomization.
If you use this option, the kernel places certain items (e.g. the stack,
libc) at different addresses every time you run a process.
This can help prevent someone from hacking into a program.
- ~r
- (QNX Neutrino 6.5.0 or later; not supported by the
QNX Neutrino RTOS Safe Kernel 1.0)
Disable address space randomization (the default).
- v
- Enable variable page sizes (the default).
This automatically allows for mapping to be performed with different page
sizes to achieve better performance.
- ~v
- Disable variable page sizes.
- x
- (QNX Neutrino 6.4.0 or later)
Enable the PROT_EXEC flag for system-allocated threads
(the default).
This option allows
gcc
to generate code on the stack — which it does when taking the address
of a nested function (a GCC extension).
- ~x
- (QNX Neutrino 6.4.0 or later)
Turn off PROT_EXEC for system-allocated stacks,
which increases security but disallows taking the address of nested
functions.
You can still do this on a case-by-case basis by doing an
mprotect()
call that turns on PROT_EXEC for the required stacks.
- -P priority
- Set the lower end of the range of privileged priorities to the
given priority; the upper end of the range is 255.
Only processes with an effective user ID of 0 (i.e. root)
can use these priorities.
Non-root (and root) processes can use priorities
from 1 through priority − 1.
The default value of priority is 64.
- -p
- Disable kernel preemption. This prevents threads
running in kernel space from being preempted by a higher-priority
thread. This can be useful when debugging a system with a frequent
source of high-priority interrupts.
- -T timeout
- (QNX Neutrino 6.4.0 or later)
Specify the number of seconds to wait for a close() to
succeed in the event of a process termination.
Previously, this timeout was hard coded to be 30 seconds. The current default is also 30 seconds; however, the -T timeout option let's you set this value.
When a process terminates, any outstanding connections are closed. This means that an _IO_CLOSE message is synthesized and sent to the resource manager
responsible for that connection.
Because it is not guaranteed that the server will reply in a reasonable amount of time
(i.e, a qnet node may be down), a TimerTimeout() call before the send
guarantees that the termination process will proceed.
- -u umask
- (QNX Neutrino 6.4.0 or later)
Use the given
umask
when creating the entries in
/proc/pid/as.
If you don't specify this option, procnto uses a mask of
022.
You can restrict access further, but this could break software that
relies on being able to open entries in /proc.
For more information about these files, see
“/proc filesystem,”
below.
- -v[v]...
- Be verbose. Specifying more v characters
increases the
verbosity.
If you specify this option, you'll get more useful information
when a process is terminated by a signal.
The procnto system process contains the QNX Neutrino
microkernel, process management, memory management and pathname
management. It's required in all bootable images made using the
mkifs utility.
For more information, see the QNX Neutrino
System Architecture
guide.
|
To determine the release version of the kernel on your system, use the
uname -a
command. |
There are different versions of procnto for different processors
(see the Board Support Package for your board for specific information):
- procnto-400
- PowerPC 400 series processors.
- procnto-800
- PowerPC 800 series processors.
- procnto-booke-smp
- Power Book E SMP processors.
- procnto-booke
- Other Power Book E processors.
- procnto-600-smp
- Other supported PowerPC SMP processors, such as the 600 and 700 series.
- procnto-600
- Other supported PowerPC processors, such as the 600 and 700 series.
- procnto-32
- 32-bit MIPS processors.
- procnto-v6
- ARMv6 processors.
- procnto-smp
- All other supported multicore processors.
- procnto
- All other supported processors.
There's also an instrumented version of each of the above (e.g.
procnto-600-smp-instr) that you'll use for system analysis.
For more information, see the
System Analysis Toolkit User's Guide
and the
Analyzing Your System with Kernel Tracing
chapter of the IDE User's Guide.
For self-hosted Neutrino systems, the default microkernel is
procnto-instr or procnto-smp-instr.
|
If you're using an SMP version of procnto, you can use the
appropriate startup-* command's -P option to
specify the maximum number of CPUs to activate. |
Starting in 6.3.0, procnto also manages named semaphores, which
mqueue
used to do (mqueue now manages named semaphores only if it
detects that procnto isn't doing so).
Named semaphores
appear in the pathname space under /dev/sem.
The sem_* client functions handle named semaphores;
for more information, see the Neutrino Library Reference.
The Process Manager component of procnto implements a
/proc filesystem that includes the following:
- /proc/pid
- Virtual directories that let you access and
control every process and thread running within the system.
For more information, see
“Controlling processes via the /proc filesystem”
in the Processes chapter of the QNX Neutrino Programmer's Guide.
- /proc/boot/
- The image filesystem that comprises the boot image.
For more information, see
Making an OS Image
in Building Embedded Systems.
- /proc/dumper
- A special entry that receives notification when a process terminates
abnormally.
The
dumper
utility watches this entry.
- /proc/mount/
- Pathname-space mountpoints.
|
If you list the contents of the /proc directory,
/proc/mount doesn't show up, but you can list the
contents of /proc/mount.
|
- /proc/qnetstats
- If you're using Transparent Distributed Processing (TDP), the
lsm-qnet.so
module places a qnetstats entry in /proc.
If you open this name and read from it, the Qnet resource manager code
responds with the current statistics for Qnet.
- /proc/self/
- The address space for yourself (i.e. for the process that's making the
query).
To disable preemption in kernel code:
procnto -p
fpemu.so,
mkifs,
startup-*,
uname
The QNX Neutrino Microkernel
and
Process Manager
chapters of the System Architecture guide
Processes
chapter of the QNX Neutrino Programmer's Guide
mlockall(),
mmap(),
munmap(),
munmap_flags(),
sem_close(),
sem_getvalue(),
sem_open(),
sem_post(),
sem_trywait(),
sem_unlink(),
sem_wait(),
ThreadCtl()
in the QNX Neutrino Library Reference
System Analysis Toolkit User's Guide
Analyzing Your System with Kernel Tracing
chapter of the IDE User's Guide