User's Manual

MEMORY MANAGEMENT AND VIRTUAL ADDRESSING
The remaining
14
bits of the selector component uniquely designate a particular segment. The virtual
address space of a program, therefore, may encompass
as
many as 16,384
(214)
distinct segments.
Segments themselves are of variable size, ranging from as small as a single byte to
as
large as 64K
(2
16
) bytes. Thus, a program's virtual address space may contain, altogether, up to a full gigabyte (2'0
=
214
X 2
16
) of individually addressable byte locations.
The entirety
of
a program's virtual address space
is
further subdivided into two separate halves,
as
distinguished by the
TI
("table indicator") bit in the virtual address. These two halves are the global
address space and the local address space.
The global address space
is
used for system-wide data and procedures including operating system
software, library routines, runti.me language support and other commonly shared system services. (To
application programs, the operating system appears to be a set of service routines that are accessible
to all tasks.) Global space is shared by all tasks to avoid unnecessary replication of system service
routines and to facilitate shared data and interrupt handling. Global address space
is
defined
by
addresses
with a zero in the TI bit position; it
is
identically mapped for all tasks in the system.
The other half of the virtual address space-comprising those addresses with the TI bit
set-is
separately
mapped for each task in the system. Because such an address space
is
local to the task
for
which it
is
defined, it
is
referred
to
as a local address space.
In
general, code and data segments within a task's
local address space are private to that particular task or user. Figure
6-2
illustrates the task isolation
made possible by partitioning the virtual address spaces into local and global regions.
TASK 1 VIRTUAL ADDRESS SPACE
TASK 3
VIRTUAL ADDRESS
SPACE~
TASK 2 VIRTUAL
ADDRESS
SPACE
G30108
Figure 6-2. Address Spaces and Task Isolation
6-3