Volume 2, Part 2: Context Management
2:557
4.5
Context Switching
This section discusses context switching at the user and kernel levels.
4.5.1
User-level Context Switching
4.5.1.1
Non-local Control Transfers (setjmp/longjmp)
A non-local control transfer such as the C language
setjmp()
/
longjmp()
pair requires
software to correctly handle the register stack and the RSE. The register stack provides
the BSP application register which always contains the backing store address of the
current GR32. This permits execution of a
setjmp()
without having to manipulate any
register stack or RSE state. All register stack and RSE manipulation is postponed to the
much less frequent
longjmp()
.
In
setjmp()
only the RSC, PFS and BSP application registers have to be preserved. This
can be accomplished by reading these registers, and without having to disable the RSE.
The preserved values will be referred to as
setjmp_rsc
,
setjmp_pfs
, and
setjmp_bsp
further on.
In
longjmp()
restoration of the appropriate register stack and RSE state is more
involved, and software needs to take the following steps:
1. Stop RSE by setting RSC.mode bits to zero.
2. Read current BSPSTORE (referred to as
current_bspstore
further down).
3. Find
setjmp()
’s RNAT collection (
rnat_value
).
a. Compute the backing store location of
setjmp()
’s RNAT collection as follows:
rnat_collection_address{63:0} = setjmp_bsp{63:0} | 0x1F8
The RNAT location is computed by setting bits{8:3} of
setjmp()
’s BSP to all
ones. This is where
setjmp()
’s RNAT collection will have been spilled to
memory.
b. If
(current_bspstore > rnat_collection_address)
, then the required
RNAT collection has already been spilled to the backing store.
c. Otherwise if
(current_bspstore <= rnat_collection_address)
, the
required RNAT collection is incomplete and is still contained in the register
stack. To materialize the complete RNAT collection, flush the register stack to
the backing store using a
flushrs
instruction.
d. Finally, load
rnat_value
from
rnat_collection_address
in memory.
4. Invalidate the contents of the register stack as follows:
a. Allocate a zero size register stack frame using the
alloc
instruction.
b. Write RSC.loadrs field with all zeros and execute a
loadrs
instruction.
c. Invalidate the ALAT using the
invala
instruction.
5. Restore
setjmp()
’s register stack and RSE state as follows:
a. Write BSPSTORE with
setjmp_bsp
.
b. Write RNAT with
rnat_value
.
Содержание ITANIUM ARCHITECTURE - SOFTWARE DEVELOPERS VOLUME 3 REV 2.3
Страница 1: ......
Страница 11: ...x Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 12: ...1 1 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Part I Application Architecture Guide ...
Страница 13: ...1 2 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 33: ...1 22 Volume 1 Part 1 Introduction to the Intel Itanium Architecture ...
Страница 57: ...1 46 Volume 1 Part 1 Execution Environment ...
Страница 147: ...1 136 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 149: ...1 138 Volume 1 Part 2 About the Optimization Guide ...
Страница 191: ...1 180 Volume 1 Part 2 Predication Control Flow and Instruction Stream ...
Страница 230: ......
Страница 248: ...236 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 249: ...2 1 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Part I System Architecture Guide ...
Страница 250: ...2 2 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 264: ...2 16 Volume 2 Part 1 Intel Itanium System Environment ...
Страница 380: ...2 132 Volume 2 Part 1 Interruptions ...
Страница 398: ...2 150 Volume 2 Part 1 Register Stack Engine ...
Страница 486: ...2 238 Volume 2 Part 1 IA 32 Interruption Vector Descriptions ...
Страница 749: ...2 501 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Part II System Programmer s Guide ...
Страница 750: ...2 502 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 754: ...2 506 Volume 2 Part 2 About the System Programmer s Guide ...
Страница 796: ...2 548 Volume 2 Part 2 Interruptions and Serialization ...
Страница 808: ...2 560 Volume 2 Part 2 Context Management ...
Страница 842: ...2 594 Volume 2 Part 2 Floating point System Software ...
Страница 850: ...2 602 Volume 2 Part 2 IA 32 Application Support ...
Страница 862: ...2 614 Volume 2 Part 2 External Interrupt Architecture ...
Страница 870: ...2 622 Volume 2 Part 2 Performance Monitoring Support ...
Страница 891: ......
Страница 941: ...3 42 Volume 3 Instruction Reference cmp illegal_operation_fault PR p1 0 PR p2 0 Interruptions Illegal Operation fault ...
Страница 1099: ...3 200 Volume 3 Instruction Reference padd Interruptions Illegal Operation fault ...
Страница 1191: ...3 292 Volume 3 Pseudo Code Functions Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 1295: ...3 396 Volume 3 Resource and Dependency Semantics ...
Страница 1296: ......
Страница 1302: ...402 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 1494: ...4 192 Volume 4 Base IA 32 Instruction Reference FWAIT Wait See entry for WAIT ...
Страница 1564: ...4 262 Volume 4 Base IA 32 Instruction Reference LES Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1565: ...Volume 4 Base IA 32 Instruction Reference 4 263 LFS Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1568: ...4 266 Volume 4 Base IA 32 Instruction Reference LGS Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1583: ...Volume 4 Base IA 32 Instruction Reference 4 281 LSS Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1647: ...Volume 4 Base IA 32 Instruction Reference 4 345 ROL ROR Rotate See entry for RCL RCR ROL ROR ...
Страница 1663: ...Volume 4 Base IA 32 Instruction Reference 4 361 SHL SHR Shift Instructions See entry for SAL SAR SHL SHR ...
Страница 1668: ...4 366 Volume 4 Base IA 32 Instruction Reference SIDT Store Interrupt Descriptor Table Register See entry for SGDT SIDT ...
Страница 1884: ...4 582 Volume 4 IA 32 SSE Instruction Reference ...
Страница 1885: ...Index Intel Itanium Architecture Software Developer s Manual Rev 2 3 Index ...
Страница 1886: ...Index Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 1898: ...INDEX Index 12 Index for Volumes 1 2 3 and 4 ...