Minix 3 uses segments without paging. A process has 3 local segments:
- text
- data
- stack
Memory allocation in Minix 3 is not dynamic. A process gets a fixed amount of physical memory. E.g., the illustration shows the segments and gap for a process that has been allocated a block of size 10K from physical address 200K up to 210K.
Text | \__ 200K (0x32000) |
Data | \__ 203K (0x32c00) |
Gap | \__ 207K (0x33c00) |
Stack | \__ 208K (0x34000) |
\__ 210K (0x34800) |
Virtual | Physical | Length | |
---|---|---|---|
Text | 0 | 0xC8 | 3 |
Data | 0 | 0xCB | 4 |
Stack | 0x5 | 0xD0 | 1 |
In Minix 3 a contiguous block of physical memory is allocated
for a process. This includes the three segments and the gap. During
execution the stack will "grow" into the gap reducing the gap size
during function calls, but no new physical memory is allocated.
Similarly in Minix 3, if a process invokes malloc
no
new physical memory is actually allocated to the process. Minix 3
just adjusts the size of the data segment within the physical block
of memory that is already allocated to the process.