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: