![]()  | 
 HP OpenVMS systems documentation  | 
| Previous | Contents | Index | 
The system supplies a number of standard allocation routines. The routines adhere to the KP allocation API and can be used in place of a user-written routine if they meet the needs of the application. The following allocation routines are available:
The following deallocation routines are supplied. All deallocation routines take a single argument, the address of the KPB.
The end routine is called by the KP services when EXE$KP_END is called, either explicitly or by reaching the end of the KP routine. Since EXE$KP_USER_ALLOC_KPB allows the specification of arbitrary allocation routines, the end routine must either cache the KPB for future use by the application or call the necessary deallocation routines for the stacks and KPB.
The end routine is called with two parameters as follows:
| 
       void end_routine (KPB_PQ KPB, int status)  | 
  
Once the KPB and stacks are allocated, the four routines that determine 
the state of a KP routine can be used.
C.2.1 Overview
A KP routine is initiated by a call to EXE$KP_START. While running, the KP routine may elect to give up control by calling EXE$KP_STALL_GENERAL. A stalled KP routine can be resumed by calling EXE$KP_RESTART. The KP routine is terminated either by an explicit call to EXE$KP_END or by returning from the routine. In the latter case, the KP services call EXE$KP_END implicitly.
When a KP routine starts, the current thread of execution state is saved onto the current stack, the KP stack is loaded, and the KP routine is called.
When the KP routine stalls, the KP routine's context is saved onto the KP stack, the stack is switched to the original stack, and the main routine's context is loaded from stack. The result is that a stall causes the original routine to return from the last call to EXE$KP_START or to EXE$KP_RESTART.
When the KP routine is restarted, the current context is saved onto the current stack, the stack is switched to the KP routine's stack and the KP routine's context is restored from the stack. The KP routine returns from the last call to EXE$KP_STALL_GENERAL.
The stall/resume sequence can occur zero or more times. The KP routine is not required ever to stall. A stalled routine cannot stall again until it has been resumed. A running KP routine cannot be restarted until it has stalled. The full checking version of SYSTEM_PRIMITIVES.EXE enforces these rules. Failure to follow these rules can result in a KP_INCONSTATE bugcheck, depending on the mode in which the KP routine is running.
When the KP routine terminates, either by explicitly calling EXE$KP_END or by returning to the caller, no current context is saved, the stack is switched, and the original thread context is restored. At this point, if the DEALLOCATE_AT_END flag is set (kernel mode only) or if an end routine address has been supplied, the appropriate action takes place. The original thread returns from the call that started or restarted the KP routine.
Figure C-1 shows the overall code flow.
Figure C-1 KP Routine Execution
While the main thread of execution is depicted as a continuous stream in the above diagram, the actual thread of execution may include asynchronous components. The application is required to perform all necessary synchronization as well as maintaining the necessary scope of the KPB.  | 
  
This section describes the routines.
C.2.2.1 EXE$KP_START
Syntax:
| 
       status = EXE$KP_START(kpb, routine, reg-mask)  | 
  
This routine suspends the current thread of execution, swaps to the new 
stacks; and calls the specified routine. The KP routine is called with 
a single argument---the 32-bit address of the supplied KPB. The KPB 
must be invalid and inactive.
C.2.2.2 EXE$KP_STALL_GENERAL
Syntax:
| 
       status = EXE$KP_STALL_GENERAL(kpb)  | 
  
This routine stalls the current thread of execution, saving context onto the KP stack, and returns to the most recent call that started or restarted this routine. The KPB must be valid and active.
The return status from this routine is supplied by the routine that 
restarts this procedure.
C.2.2.3 EXE$KP_RESTART
Syntax:
| 
       EXE$KP_RESTART(kpb [, thread_status])  | 
  
This routine causes the stalled KP routine to restart by returning from 
the last call to EXE$KP_STALL_GENERL. Note that this may be a 
completely asynchronous operation with respect to the original thread 
of execution that started the KP routine. The KPB must be valid and 
inactive.
C.2.2.4 EXE$KP_RESTART
Syntax:
| 
       status = EXE$KP_END(kpb [, status])  | 
  
This routine terminates the KP routine, returning control to the last thread of execution that started or restarted the KP routine. The KPB must be valid and active. The KPB is marked as invalid and inactive and cannot be used in subsequent calls to EXE$KP_RESTART or EXE$KP_STALL_GENERAL without first calling EXE$KP_START to start another KP routine.
Instead of calling EXE$KP_END, the KP routine can return to the caller. 
Returning to the caller causes the KP code to call KP_END 
automatically. In that case, the return status from the KP procedure is 
used for the status argument.
C.3 Design Considerations
ABI: Application binary interface. A general term encompassing all of the rules and conventions that programs must follow to run under a particular operating system. For example, the OpenVMS I64 ABI includes the calling standard, register usage, interrupt handing, and other related topics.
According to Intel's Itanium Software Conventions and Run-Time 
Architecture Guide, "an ABI is composed of an API, 
system-specific conventions, a hardware description, and a run-time 
architecture."
ACPI: Advanced configuration and power interface. ACPI provides interfaces for power state management, system device identification, and hardware configuration.
      http://www.acpi.info/spec.htm  | 
      http://developer.intel.com/technology/iapc/acpi/  | 
ALAT: Advanced load address table. A lookup table on 
Itanium processor that tracks speculative memory 
accesses and allows the CPU to handle conflicts.
AML: ACPI machine language. Pseudocode for a virtual 
machine supported by an ACPI-compatible operating system and in which 
ACPI control methods and objects are written. See also 
ACPI.
application registers: 128 special-purpose registers 
used for various functions, labeled ar0 to ar127. For example, ar17 is 
the register-backing store pointer.
Aries: HP emulator/translator for HP Precision 
Architecture (PA) application code. Unlike 
VEST (the VAX-to-Alpha translator), Aries emulates 
only at run-time and does not produce a translated image. When the 
image exits, all the translated code is discarded and must be 
regenerated each time the program runs.
ASL: ACPI source language. The 
programming language for AML. ASL source code is 
compiled into AML images.
ASM: Address space match, part of virtual memory 
management.
branch registers: Itanium 64-bit registers, br0 to 
br7, used to specify the target addresses for indirect branches. The 
branch registers streamline call/return branching.
bundle: The basic instruction format for the Itanium 
architecture. A bundle is a 128-bit structure consisting of three 
41-bit instructions, plus a 5-bit template.
CISC: Complex instruction set computing. Includes 
numerous variable-length machine instructions that are more complex 
than RISC. See also RISC and VLIW.
COW: Copy-on-write. Refers to memory that is mapped by 
multiple processes provided each process does not attempt to write to 
it. If a process writes to a page, the page is copied to a 
process-private location and remapped, leaving the original shared page 
intact. COW is commonly used by the loader for memory-mapped shared 
libraries.
CVF: Compaq Visual Fortran.
DSDT: Differentiated system description table. Part of 
the ACPI subsystem. The DSDT contains the 
Differentiated Definition Block, which supplies the implementation and 
configuration information about the base system.
DVD: Digital versatile disk.
DWARF: Debugging and traceback information (embedded 
in ELF).
EFI: Extensible firmware interface. EFI's purpose is to initialize the hardware and start booting an operating system.
For more information, see Intel's EFI Page:
      http://developer.intel.com/technology/efi/index.htm  | 
ELF: Executable and linkable format (ELF) defines the file format for object files, shared libraries, and executable images on Itanium processors. ELF is not specific to the Itanium architecture; it has been used for years on various UNIX systems.
For more information, see the ELF specification from SCO:
      http://stage.caldera.com/developer/gabi/  | 
EPIC: Explicitly parallel instruction computing. A 
term coined by Intel to describe the Itanium architecture (comparable 
to CISC or RISC). EPIC provides 
architecturally visible access to parallelism in the CPU. For example, 
the Intel Itanium processor family defines data speculation and 
register renaming as part of the architecture, rather than hiding it in 
the chip implementation as was done with Alpha. EPIC is similar to the 
very long instruction word (VLIW) computing 
architecture.
FADT: Fixed ACPI description table. A table that 
contains the ACPI hardware register block 
implementation and configuration details, as well as the physical 
address of the DSDT.
FAT: File allocation table. The disk volume structure 
used by various Microsoft operating systems and by the Itanium 
EFI operating system loader. There are various FAT 
variants, including FAT8, FAT12, FAT16, and FAT32. These differ in 
total permitted volume size and various other changes.
fills: See spills and fills.
FIT: Firmware interface table.
GEM: The backend code generator used by most OpenVMS 
Alpha and I64 compilers.
general registers: Itanium processors have 128 64-bit 
general registers, numbered as r0 to r127 (sometimes called gr0 to 
gr127). However, only 32 registers are normally used directly; the 
other 96 are used for argument passing and to store local variables for 
the currently executing procedure. Registers r0 to r31 are static, but 
registers r32 and up are generally managed by the register stack engine 
(RSE) and might be renamed across procedure calls.
global pointer (GP): The base address of the current 
global data segment. The base address allows the use of compact, 
GP-relative addresses in machine code. Because the largest immediate 
value in an Itanium instruction is 22 bits wide, the global data 
segment is 4 MB in length. General register 1 holds the current GP.
HP OpenVMS Migration Software for Alpha to Integrity 
Servers: A tool that translates Alpha executable images to I64 
executable images.
HWPCB: Hardware process control block. The portion of 
the process context that is stored and retrieved by the hardware when a 
process is rescheduled.
HWRPB: Hardware restart parameter block. These data 
structures are used to communicate system-level configuration 
information between the console and OpenVMS both on system startups and 
system restarts.
IA: Intel architecture.
IA-32: An Intel 32-bit CISC microprocessor 
architecture. Examples of implementations include the Pentium®, 
Xeontm, and 80386 series.
IA-64: An old name for the Itanium processor family 
architecture. The term IA-64 is no longer officially used. However, it 
still appears in older documentation, and IA64 still occurs in some 
code.
Integrity: The brand name of the HP server product 
line based on the Itanium architecture. For example, the rx2600 server 
is sold as the HP Integrity rx2600.
ILP: Instruction level parallelism. The ability to 
execute multiple instructions in parallel during the same cycle.
instruction group: A sequence of one or more 
instructions, delimited by explicit stops or taken 
branches. Instructions within an instruction group must have no 
RAW or WAW dependencies. Instruction 
groups can cross bundle boundaries.
Intel® Itanium®: The name of both the 64-bit 
architecture (the itanium processor family) and the first chip to 
implement the architecture (the Itanium processor).
Intel® Itanium® 2: The second generation of the Itanium processor family. The rx2600 is an Itanium 2 system. For more information, refer to the following web site:
      http://www.cpus.hp.com/technical_references/ia64.shtml  | 
IPINT: Inter-processor interrupt. Also simply called 
IPI.
IPF: Itanium processor family.
IPMI: Intelligent platform management interface, a set of APIs used to manage servers. Functions include monitoring environmental data such as temperature, voltage, fans, and chassis switches, as well as alerting, remote console and control, and asset tracking. See the Intel web site for more details:
      http://www.intel.com/design/servers/ipmi/  | 
IVT: Interrupt vector table.
Jacket routines: Interface routines that transform the 
arguments from one calling standard to another.
MAS: Multiple address space. In an MAS operating 
system, all processes on the system have at least a partially private 
virtual address space. OpenVMS and Tru64 UNIX are both MAS operating 
systems. See also SAS.
MBR: Master boot record. The contents of the first 
disk block and the core data structure of a FAT32 partitionable disk.
NaT: Not a thing. An extra bit associated with various 
registers that indicates whether or not the register contents are 
valid. Used for speculative execution. For example, a 
read from a nonexistent virtual address would result in NaT. The NaT 
bit propagates as execution progresses so that any operation involving 
an NaT results in an NaT.
NMI: Non-maskable interrupt.
NUE: The Linux Native User Environment, a set of 
development software used in conjunction with the Ski 
Itanium emulator.
PA: Hewlett-Packard (HP) Precision Architecture, a 
computer architecture also known as PA-RISC. HP is porting its UNIX 
from PA the to Itanium architecture.
PAL (Alpha): Privileged architecture library. PAL is 
part of the Alpha architecture. It is a software mechanism for 
performing low-level operations such as interrupt handling, 
TLB management, and atomic operations that were 
implemented on VAX as microcode. On Itanium systems, the same 
functionality is provided as part of the operating system. Whenever 
possible, the BLISS, C, and Macro compilers for OpenVMS I64 convert 
CALL_PAL macros to the equivalent operating system calls for backward 
compatibility. Not all Alpha PAL operations are implemented on I64; in 
some cases, programs that call PALcode directly might need to change.
PAL (Itanium): Processor abstraction layer. Part of 
the Itanium architecture that is implemented in firmware. Provides a 
consistent interface for processor-specific functions such as hardware 
errors or system initialization. Generally speaking, 
SAL isolates the operating system from 
platform-specific implementation differences, while PAL isolates the 
operating system (and SAL) from processor-specific differences.
PIC: Position-independent code. Machine code that uses 
only relative address references. This strategy allows the code to be 
loaded to any memory location without modification.
POSSE: Pre-operating system startup environment. POSSE 
is the standard firmware user interface on Itanium® 
2 servers. It is an HP value-added component that is available 
only on HP systems.
PPN: Physical page number.
PTE: Page table entry.
predication: The conditional execution of instructions 
based on a set of special 1-bit registers called predicates. Most I64 
instructions include a predicate number. When the corresponding 
predicate register is true (1), the instruction is executed. When it is 
false (0), the instruction is treated as a "no-op."
RAW: Read-after-write violation. A type of data 
dependency between two instructions in one instruction group. The later 
instruction reads data from the same register to which the earlier 
instruction wrote.
RID: Region identifier.
RISC: Reduced instruction set computing. Fixed-size 
machine instructions that are intended to be simpler machine 
instructions than CISC. See also CISC and 
VLIW.
RSE: Register stack engine. An on-chip entity that 
handles register renaming and spills and fills across 
procedure calls.
rx2600: An HP server with up to two Itanium 2 CPUs. 
The rx2600 is the first platform for customer use to run the OpenVMS 
Itanium port.
SAL: System abstraction layer. Part of the Itanium 
architecture, implemented in firmware. Provides a consistent interface 
for platform-specific functions such as hardware errors or system 
initialization. Generally speaking, SAL isolates the operating system 
from platform-specific implementation differences, while 
PAL isolates SAL and the operating system from 
processor-specific differences.
SAS: Single address space. In an SAS operating system, 
all processes share the same address space. See also 
MAS.
SCI: System control interrupt. A system interrupt used 
by hardware to notify the operating system about ACPI 
events.
Ski: A free Itanium emulator for Linux. Ski emulates 
the Intel Itanium Processor Family architecture but not any particular 
implementation.
speculation: The process of moving memory accesses 
earlier in the code to hide memory access latencies. If it turns out 
that the memory access was invalid or unnecessary, it can easily be 
discarded. The Itanium processor instructions ld.a,ld.s, chk.a, and 
chk.s are used for speculation.
spills and fills: The rotating portion of the Itanium 
register file that is used as a stack. If it overflows, registers are 
saved to a memory region called the register backing store. A 
spill flushes one or more registers out to the backing store; 
a fill restores registers from the backing store. Spills and 
fills are handled automatically by the register stack engine 
(RSE) on the CPU without program intervention.
SRM console: Firmware for Alpha systems that includes boot support, PALcode, and platform-specific functionality used by OpenVMS, UNIX, and Linux. The chevron prompt (>>>) that you see when you power on any Alpha system is part of the SRM console. The console behavior is defined in the Alpha System Reference Manual (SRM).
The Itanium architecture does not have an equivalent to the SRM 
console. Instead, the SRM functionality is split between the 
PAL/SAL firmware, the 
EFI boot software, and the operating system.
stop: The end of an instruction 
group, designated in by a double semicolon (;;) in assembly 
listings.
Superdome: The high-end HP server product line. 
Superdome servers support about 64 CPUs, either PA-RISC or Itanium. 
Eventually, all new Superdome systems will be Itanium based.
SWIS: SoftWare interrupt support. The set of services 
that implement the interrupt model used by OpenVMS. This includes 
processor IPL, ASTs, mode changes, and software interrupts. On Alpha, 
this support was implemented in PALcode.
template: On Itanium processors, templates define the 
combinations of instructions that can be placed into a single 
bundle. For example, a bundle with the MFI template 
must have, in this order, a memory instruction (M), a floating-point 
instruction (F), and an integer instruction (I). Templates also define 
the location of stops. 24 templates are defined in the 
Itanium architecture, but there are only 12 combinations of letters. 
For each combination, there are two template versions: one with a stop 
at the end, and one without a stop. Some templates also contain stops 
within the bundle.
TLB: Translation lookaside buffer. An on-chip cache 
that stores recently used mappings between real and virtual memory. The 
Itanium architecture has separate TLBs for instructions and data.
USB: Universal Serial Bus. A connector for I/O devices 
such as keyboards, mouses, printers, cameras, external disks, and so 
forth.
VEST: A tool that translates VAX executable images to 
Alpha executable images. Also known as DECmigrate.
VHPT: Virtual hash page table.
VIAL: OpenVMS to itanium abstraction layer. VIAL is 
the equivalent of the OpenVMS SRM console PALcode layer.
VLIW: Very long instruction word computing 
architecture. Exceedingly complex instructions reminiscent of the 
microcode engine found deep within many VAX processors. See also 
CISC, RISC, and EPIC.
VPN: Virtual page number.
VRN: Virtual region number.
WAW: Write-after-write violation. A type of data 
dependency between two instructions in one instruction group. Both of 
the instructions write to the same destination register.
WWID: Worldwide ID. A globally unique Fibre Channel device identifier analogous to an Ethernet station address.
| Index | Contents |