7.6. Managing the Heap
Each Unix process owns a specific memory region called heap, which is used to satisfy the process's dynamic memory requests. The start_brk and brk fields of the memory descriptor delimit the starting and ending address, respectively, of that region.
The following C library functions can be used by the process to request and release dynamic memory:
malloc(size)
Request size bytes of dynamic memory; if the allocation succeeds, it returns the linear address of the first memory location.
calloc(n,size)
Request an array consisting of n elements of size size; if the allocation succeeds, it initializes the array components to and returns the linear address of the first element.
free(addr)
Release the memory region allocated by malloc( ) or calloc( ) having initial address addr.
brk(addr)
Modify the size of the heap directly; the addr parameter specifies the new value of current->mm->brk, and the return value is the new ending address of the memory region (the process must check whether it coincides with the requested addr value).
The brk( ) function differs from the other functions listed because it is the only one implemented as a system call: all the other functions are implemented in the C library by making use of brk( ) and mmap( ).
When a process in User Mode invokes the brk( ) system call, the kernel executes the sys_brk(addr) function (see Chapter 8). This function verifies first whether the addr parameter falls inside the memory region that contains ...