| | |
Summary: 14
Segmentation
So far we have been putting the entire address space of each pro-
cess 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 14.1, although the space be-
tween 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. It also makes it quite hard
to run a program when the entire address space doesn't fit into
memory. And thus, a problem:
THE CRUX: HOW TO SUPPORT A LARGE ADDRESS SPACE
How do we support a large address space with (potentially)
a lot of free space 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
|