CHAPTER
11
ADVANCED TOPICS
This chapter describes some of the advanced topics as virtual memory management, restartable
instructions, special segment attributes, and the validation of descriptors and pointers.
11.1 VIRTUAL MEMORY MANAGEMENT
When access to a segment
is
requested and the access byte
in
its descriptor indicates the segment
is
not present
in
real memory, the not-present fault occurs (exception
11,
or
12
for stacks). The handler
for this fault can be set up to bring the absent segment into real memory (swapping or overwriting
another segment if necessary), or
to
terminate execution of the requesting program if this
is
not
possible.
The accessed bit (bit
0)
of the access byte
is
provided
in
both executable and data segment descriptors
to support segment usage profiling. Whenever the descriptor
is
accessed
by
the 80286 hardware, the
A-bit
will
be set
in
memory. This applies to selector test instructions (described below)
as
well
as to
the loading of a segment register. The reading of the access byte and the restoration of
it
with the
A~bit
set
is
an indivisible operation, i.e., it
is
performed
as
a read-modify-write with bus lock.
If
an
operating system develops a profile of segment usage over time,
it
can recognize segments of
low
or
zero access and choose among these candidates for replacement.
When a not-present segment
is
brought into real memory, the task that requested access to it can
continue its execution because all instructions that load a segment register are restartable.
Not-present exceptions occur only
on
segment register load operations, gate accesses, and task switches.
The saved instruction pointer refers
to
the first byte of the violating instruction. All other aspects of
the saved machine state are exactly
as
they were before execution of the violating instruction began.
After the fault handler clears up the fault condition and performs an IRET, the program continues to
execute. The only external indication of a segment swap
is
the additional execution time.
11.2
SPECIAL SEGMENT ATTRIBUTES
11.2.1 Conforming Code Segments
Code segments intended for use at potentially different privilege levels need an attribute that permits
them to emulate the privilege
level
of the calling task. Such segments are termed "conforming" segments.
Conforming segments are also useful for interrupt-driven error routines that need only be
as
privileged
as
the routine that caused the error.
A conforming code segment has bit 2 of its access byte set
to
1.
This means it can be referenced by a
CALL or
JMP
instruction
in
a task of equal or lesser privilege, i.e., CPL of the task
is
numerically
greater than or equal to DPL of this segment. CPL
does
not change when executing the conforming
code segment. A conforming segment continues to use the stack from the CPL. This
is
the only case
in
which the DPL of a code segment can be numerically less than the CPL.
If
bit 2
is
a
0,
the segment
is
not conforming and can be referenced only
by
a task of
CPL=DPL.
11-1