So far we have been putting the entire address space of each process in memory. With the base and bounds registers, the OS can easily relocate processes to different parts of physical memory. However, you might have noticed something interesting about these address spaces of ours: there is a big chunk of “free ” space right in the middle, between the stack and the heap. As you can imagine from Figure 11.1, although the space between the stack and heap is not being used by the process, it is is still taking up physical memory when we perform dynamic relocation of the entire address space. Thus, a problem: THE CRUX: SUPPORTING LARGE ADDRESS SPACES How do we support a large address space with (potentially) a lot of free space in between the stack and the heap? Note that in our examples, with tiny (pretend) address spaces, the waste doesn’t seem too bad. Imagine, however, a 32-bit address space (4 GB in size); a typical program will only use megabytes of memory, but still would demand that the entire address space be resident in memory
To submit an update or takedown request for this paper, please submit an Update/Correction/Removal Request.