Other system limits

These limits apply to the entire system:

A maximum of 4095 active at any time, with these exceptions:
  • On ARMv6 platforms (running procnto-v6 ), the limit is 255 processes. The MMU has an 8-bit ASID that's used to tag non-global TLB entries. Each address space is assigned a unique tag that's set in the MMU context register on a context switch to specify the current ASID in use. The code doesn't currently take ASIDs, so we're limited to 255 processes.
  • On earlier ARM platforms, the limit is 63 processes.

On ARM platforms, the limit is actually on the number of separate address spaces; you could have more processes if they happen to be sharing an address space because of vfork() , but that's very unusual.

Prefix space (resource-manager attaches, etc.)
Limited by memory.
Sessions and process groups
4095 (since you need at least one process per session or group).
Physical address space
No limits, except those imposed by the hardware; see the documentation for the chip you're using.

These limits apply to each process:

  • Number of threads: 32767
  • Number of timers: 32767
  • Priorities: 0 through 255

    Priority 0 is used for the idle thread; by default, priorities of 64 and greater are privileged, so only processes with an effective user ID of 0 (i.e. root) can use them. Non-root processes can use priorities from 1 through 63.

    You can change the range of privileged priorities with the -P option for procnto .

  • Memory allocation: Because the malloc() implementation uses signed, 32-bit integers to represent the size internally, you can't allocate more than 2 GB in a single allocation. If the size is greater than 2 GB, these functions indicate an error of ENOMEM: