This highlights how memory is shared among a few processes.
The same selector is allocated in each process that shares the storage. Each process therefore uses the same offset in the LDT, and the LDT entries are the same, so the same linear address is also used.
Note: The page table entries used for the shared storage are the same for both processes, too.
LDT 1 LDT 2 ------------ ------------ | | | | |------------| |------------| | |--- | |--- |------------| | |------------| | | | | | | | |------------| | |------------| | | | | | | | |------------| | |------------| | | | | | | | |------------| | |------------| | | | | | | | | | ------------------ | | ------------------- | | | | | | | SHARED | | | | DATA | | | | | | -------------> ------------------- <---------
DLL's are a good example of shared storage.
DLLs are loaded into the shared address range. The boundary is dynamic, and moves downward as DLL's are loaded.
The boundary of private addresses move upward as private storage is allocated. There is a guarantee of 64 Meg for private, and 64 Meg for shared.