Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A, System Programming Guide, Part 1
6-8 Vol. 3A
TASK MANAGEMENT
The base, limit, and DPL fields and the granularity and present flags have functions
similar to their use in data-segment descriptors (see Section 3.4.5, “Segment
Descriptors”). When the G flag is 0 in a TSS descriptor for a 32-bit TSS, the limit field
must have a value equal to or greater than 67H, one byte less than the minimum size
of a TSS. Attempting to switch to a task whose TSS descriptor has a limit less than
67H generates an invalid-TSS exception (#TS). A larger limit is required if an I/O
permission bit map is included or if the operating system stores additional data. The
processor does not check for a limit greater than 67H on a task switch; however, it
does check when accessing the I/O permission bit map or interrupt redirection bit
map.
Any program or procedure with access to a TSS descriptor (that is, whose CPL is
numerically equal to or less than the DPL of the TSS descriptor) can dispatch the task
with a call or a jump.
In most systems, the DPLs of TSS descriptors are set to values less than 3, so that
only privileged software can perform task switching. However, in multitasking appli-
cations, DPLs for some TSS descriptors may be set to 3 to allow task switching at the
application (or user) privilege level.
6.2.3 TSS Descriptor in 64-bit mode
In 64-bit mode, task switching is not supported, but TSS descriptors still exist. The
format of a 64-bit TSS is described in Section 6.7.
In 64-bit mode, the TSS descriptor is expanded to 16 bytes (see Figure 6-4). This
expansion also applies to an LDT descriptor in 64-bit mode. Table 3-2 provides the
encoding information for the segment type field.