Recent from talks
Nothing was collected or created yet.
Triple fault
View on WikipediaThis article relies largely or entirely on a single source. (May 2012) |
On the x86 computer architecture, a triple fault is a special kind of exception generated by the CPU when an exception occurs while the CPU is trying to invoke the double fault exception handler, which itself handles exceptions occurring while trying to invoke a regular exception handler.
x86 processors beginning with the 80286 will cause a shutdown cycle to occur when a triple fault is encountered. This typically causes the motherboard hardware to initiate a CPU reset, which, in turn, causes the whole computer to reboot.[1][2]
Possible causes of triple faults
[edit]Triple faults indicate a problem with the operating system kernel or device drivers. In modern operating systems, a triple fault is typically caused by a buffer overflow or underflow in a device driver which writes over the interrupt descriptor table (IDT). If the IDT is corrupted, when the next interrupt happens, the processor will be unable to call either the needed interrupt handler or the double fault handler because the descriptors in the IDT are corrupted.[citation needed]
Virtual machines
[edit]In QEMU, a triple fault produces a dump of the virtual machine in the console, with the instruction pointer set to the instruction that triggered the first exception.
In VirtualBox, a triple fault causes a Guru Meditation error to be displayed to the user. A virtual machine in this state has most features disabled and cannot be restarted. If the VirtualBox Debugger is open, a message is printed indicating a triple fault has occurred, followed by a register dump and disassembly of the last instruction executed, similar to the output of the rg debugger command.
When using Intel VT-x, a triple fault causes a VM exit, with exit reason 2. The exit reason is saved to the VMCS and may be handled by the VMM software.
In VMware, an error message will be displayed and the virtual machine will need to be reset.
Other uses
[edit]The Intel 80386 processor was the first x86 processor to introduce the now-ubiquitous protected mode. However, the 286 could not revert to the basic 8086-compatible "real mode" without resetting the processor, which can only be done using hardware external to the CPU. On the IBM AT and compatibles, the documented method of doing this was to use a special function on the Intel 8042 keyboard controller, which would assert the RESET pin of the processor. However, intentionally triple-faulting the CPU was found to cause the transition to occur much faster (0.8 milliseconds instead of 15+ milliseconds) and more cleanly, permitting multitasking operating systems to switch back and forth at high speed.[3]
Some operating system kernels, such as Linux, still use triple faults as a last effort in their rebooting process if an ACPI reboot fails. This is done by setting the IDT register to 0 and then issuing an interrupt.[1] Since the table now has length 0, all attempts to access it fail and the processor generates a triple fault.
References
[edit]- ^ a b Collins, Robert (2000). "Triple Faulting the CPU". Productivity Enhancements and Programming Tricks. Archived from the original on 2017-09-09. Retrieved 2015-11-22.
- ^ Collins, Robert (2000). "ELEGANT RESET". Archived from the original on 2017-09-09. Retrieved 2017-09-09.
- ^ Osterman, Larry (2005-02-08). "Faster Syscall Trap redux". Larry Osterman's WebLog. MSDN Blogs. Archived from the original on 2017-09-09. Retrieved 2010-07-23.
Triple fault
View on GrokipediaOverview
Definition
In x86 processors, a triple fault represents an unrecoverable error condition that arises when a third exception is generated while the processor is attempting to invoke the double-fault handler.[3] This escalation occurs within the processor's exception-handling mechanism, which relies on the Interrupt Descriptor Table (IDT) to vector control to appropriate handlers.[4] A single fault refers to a standard exception, such as a divide-by-zero error or page fault, which the processor handles by transferring control to a dedicated routine via the IDT.[4] A double fault, assigned interrupt vector 8, is triggered when a second exception interrupts the handling of the initial single fault, such as a stack-segment fault during the first handler's execution.[4] The triple fault marks the final level of this hierarchy, where no further nesting of exceptions can be managed by the architecture.[3] According to Intel's architectural specifications, a triple fault initiates a processor shutdown cycle, equivalent to a reset, during which no interruptible processor state is preserved.[3] This mechanism ensures that critically flawed exception handling does not lead to indefinite loops, forcing a complete system reinitialization.[3]Mechanism in x86 Architecture
In protected mode, the x86 processor handles exceptions through a structured interrupt processing pipeline that relies on the Interrupt Descriptor Table (IDT) to locate and invoke appropriate handlers. When an initial exception occurs, such as a page fault or general protection fault, the CPU pushes the current processor state—including the flags register (EFLAGS), code segment selector (CS), and instruction pointer (EIP)—onto the stack. It then uses the exception's vector number to index the IDT, which contains 8-byte descriptors (gates or task gates) pointing to the handler routine. The processor loads the handler's segment selector and offset from the IDT entry, clears the interrupt flag (IF) if it's an interrupt gate, and transfers control to the handler, potentially performing a privilege-level check or task switch if a task gate is used.[5] If a second exception arises during this delivery process—for instance, a stack overflow preventing state saving or an invalid IDT entry causing a general protection fault—the processor generates a double fault, vectored as interrupt 8 (#DF). Unlike typical exceptions, the double-fault handler is invoked using a dedicated mechanism: it pushes an error code of 0 onto the stack and uses either a task gate (for task switching to a dedicated TSS) or an interrupt gate from the IDT's vector 8 entry to call the handler, without stacking additional state beyond the initial double-fault context. This escalation treats the nested exception as unrecoverable at the first level, prioritizing isolation of the fault through a separate handler invocation.[5] A triple fault, defined as the third consecutive exception in this chain, occurs when yet another exception interrupts the double-fault handler invocation, such as a general protection fault due to an invalid descriptor in the IDT's vector 8 entry. In this case, the processor does not attempt further stacking or handler delivery via vector 8; instead, it immediately enters shutdown mode, an unrecoverable state that halts normal operation. The shutdown clears all volatile registers, disables interrupts, and signals the system for a hardware reset, restarting execution from the processor's reset vector (typically physical address 0xFFFFFFF0) after an external reset signal (RESET# or INIT#) is asserted. This mechanism ensures fault isolation but results in a full system reinitialization, as detailed in the Intel SDM Volume 3, Chapter 6.[5]Causes
Exception Chain Leading to Triple Fault
In x86 architecture, the exception chain leading to a triple fault begins with an initial exception that triggers the CPU's interrupt handling mechanism, potentially escalating to a double fault if a secondary exception occurs during vectoring or state saving. The processor automatically vectors to the appropriate entry in the Interrupt Descriptor Table (IDT) based on the exception vector, pushing the current state—including the instruction pointer, flags, and segment registers—onto the stack to preserve context.[3] For certain exceptions, an error code is also pushed immediately after the return address, providing details about the fault.[3] This process can fail if the stack is insufficient or invalid, leading to a nested exception classified as a double fault (vector 8).[3] The most common initial exceptions that escalate to double faults are page faults (#PF, vector 14), general protection faults (#GP, vector 13), and stack-segment faults (#SS, vector 12), particularly when they occur due to insufficient stack space during the handling of another interrupt or exception.[3] A page fault arises from attempts to access a non-present page or violate protection rules in a paged environment, prompting the CPU to load the faulting linear address into the CR2 register before vectoring to the IDT entry.[3] The error code for #PF includes bits indicating the cause, such as whether the page was present (P=0), the access type (write/read, W/R), user/supervisor mode (U/S), and instruction/data fetch (I/D).[3] If this state-saving operation—pushing the error code, stack segment/pointer, flags, code segment, and return address—encounters a stack limit violation or non-present stack segment, it triggers a secondary #SS, escalating to a double fault.[3] General protection faults similarly contribute to these chains through privilege-level violations, invalid segment descriptors, or attempts to access non-canonical addresses in 64-bit mode.[3] The #GP error code specifies the segment selector index or IDT vector number involved (or 0 if inapplicable), and the CPU pushes this along with the standard state frame during vectoring.[3] Stack-segment faults occur directly from stack-related issues, such as exceeding the stack segment limit, using a non-present stack segment, or mismatched privilege levels during a stack switch.[3] The #SS error code includes the stack segment selector (or 0 for limit violations), and its handling involves similar pushes that can fail if the stack is already compromised.[3] A representative escalation example involves a page fault occurring during the handling of an external interrupt, where the CPU attempts to push the interrupt frame onto an exhausted or invalid stack.[3] This push failure generates a #SS (or another fault like #GP if the IDT entry is invalid), and since the processor is already in an exception context, it cannot nest further without invoking the double fault handler at vector 8.[3] At the hardware level, the CPU's vectoring process relies on present and conforming IDT gates (interrupt, trap, or task gates), with the double fault pushing a constant error code of 0 and using a dedicated Interrupt Stack Table (IST) entry if configured, to isolate it from the original stack issues.[3] This chain positions the system at the threshold of a triple fault, where any subsequent failure in double fault processing becomes unrecoverable.[3]Common Software Triggers
Common software triggers for triple faults in x86 systems primarily stem from misconfigurations in the Interrupt Descriptor Table (IDT) and errors within exception handlers, which prevent proper invocation or execution of the double-fault handler (vector 8). These issues arise during the setup of interrupt and exception handling mechanisms, often in kernel or bootloader code, leading to a chain of exceptions that culminates in an unrecoverable shutdown.[6] IDT setup issues frequently involve incorrect gate types or invalid segment selectors in IDT entries. More critically, an invalid segment selector in an IDT entry—such as a null selector, out-of-bounds index, or one referencing a non-present descriptor—triggers a general-protection exception (#GP, vector 13) during IDT access, which, if occurring while invoking another handler, escalates to a double fault and potentially a triple fault. The IDT must contain valid gate descriptors pointing to executable code segments at privilege level 0, and any misalignment or limit violation in the IDTR (e.g., improper LIDT loading) exacerbates these problems by making the entire table inaccessible.[6][6][6] Handler code bugs, particularly in the double-fault handler itself, often manifest as infinite recursion, invalid memory accesses, or privilege level violations. Infinite recursion can occur if an exception handler, such as for a page fault (#PF, vector 14), re-triggers the same exception due to unhandled conditions within its code, exhausting the stack and causing a stack-segment fault (#SS, vector 12) that leads to a double fault. Invalid memory accesses within the double-fault handler, like dereferencing unmapped pages or exceeding segment limits, generate a page fault or #GP during its execution, directly resulting in a triple fault since no further handler can be invoked. Privilege level violations arise when the current privilege level (CPL) exceeds the descriptor privilege level (DPL) of a gate or segment; for example, if the double-fault handler attempts to access a segment with DPL=0 from CPL=3 (user mode, though rare in kernel contexts), a #GP is raised, propagating the fault chain. These bugs are common in early kernel development where handlers lack robust error checking.[7][6][6] At the kernel level, improper paging setup during interrupt entry represents a prevalent trigger, as it can cause page faults precisely when the processor pushes state onto the stack or loads the handler. If paging is enabled without mapping the kernel's interrupt stack or handler code, an interrupt (e.g., timer IRQ0) may fault on unmapped pages during entry, invoking the page-fault handler; a subsequent fault there (due to the same paging issue) escalates to double fault. Bootloader errors in real-to-protected mode transitions, such as failures in loading the Global Descriptor Table (GDT) or IDT, are another key example: incomplete GDT initialization might leave segment descriptors invalid, causing #GP on the far jump to protected mode, while botched IDT loading (e.g., unaligned base or zero limit in IDTR) prevents any exception handling, leading directly to triple fault on the first anomaly post-transition. These kernel and bootloader missteps underscore the need for precise table initialization before enabling protected mode features.[6][7]Consequences and Handling
CPU Reset and Unrecoverability
Upon encountering a triple fault, the x86 processor immediately enters the shutdown state, halting instruction execution and issuing a special shutdown cycle on the system bus to signal the chipset.[8] This cycle typically triggers a hardware reset by the motherboard, which clears all processor internal state, including caches, pipelines, branch predictors, and control registers, before redirecting execution to the reset vector at physical address 0xFFFFFFF0.[8] The reset vector contains the initial instructions for bootstrapping, usually a jump to the BIOS or firmware entry point, effectively reinitializing the system from power-on conditions.[9] The unrecoverability of a triple fault is a deliberate architectural design to isolate severe errors and prevent the spread of corrupted state through further exception processing.[8] In contrast to handled exceptions, no error code is pushed onto the stack, and no stack frame is created, because the fault occurs during the invocation of the double-fault handler (vector 8), where stack operations have already proven unreliable—often due to stack overflow, invalid selectors, or segment faults.[8] Attempting to generate additional stack information would risk deepening the corruption, potentially leading to indeterminate behavior or infinite recursion in the exception mechanism.[10] In bare-metal environments without virtualization or OS intervention, the reset initiated by a triple fault results in a complete system reboot, restoring the processor to its initial real-mode state.[8] If the root cause—such as defective firmware, invalid interrupt descriptor table entries, or hardware faults—remains unaddressed, the system may repeatedly encounter the same conditions during boot, causing a reboot loop until manual intervention or power cycling occurs.[11] This behavior underscores the triple fault's role as a fail-safe mechanism for unhandled double-fault handler failures.[8]Debugging Techniques
Debugging a triple fault in x86 operating system development requires capturing the system state just prior to the fault, as the CPU resets immediately upon occurrence, erasing most traces. One effective tracing method involves using the GNU Debugger (GDB) in conjunction with the QEMU emulator to insert breakpoints before critical operations, such as Interrupt Descriptor Table (IDT) setup, allowing inspection of registers and memory.[12] For instance, developers can halt execution at the point of IDT loading and examine descriptor entries for errors like invalid selectors, which often trigger exception chains leading to triple faults.[13] Additionally, early logging via serial ports or VGA text mode output enables recording of pre-fault execution paths; serial output, redirected to a host file in emulators like Bochs or QEMU, persists even if the emulated system crashes, while VGA writes to memory address 0xB8000 provide immediate visual feedback during boot stages.[14][15] Simulation tools play a crucial role in safe debugging by emulating hardware behavior without risking real systems. The Bochs emulator, for example, can be configured to halt rather than reset on a triple fault, enabling dumps of CPU registers, IDT contents, and memory mappings to pinpoint issues like misaligned tables or faulty handlers.[16] QEMU similarly supports GDB remote debugging stubs, but Bochs excels in detailed trace logging for low-level x86 events. Initial testing should always occur in such emulators to avoid the unrecoverable resets on physical hardware, where debugging is limited to post-mortem analysis via external probes.[17] To resolve triple faults, developers follow systematic verification steps focused on common misconfigurations. First, ensure the IDT and Global Descriptor Table (GDT) are page-aligned (typically to 4 KiB boundaries) to prevent access faults during CPU loads, as non-aligned tables can cause general protection exceptions. Next, validate handler entry points in the IDT by checking for present bits, correct code segment selectors, and executable privilege levels, often using emulator dumps to confirm offsets point to valid kernel code. Finally, test double-fault handler stack allocation, ensuring at least 512 bytes of reserved space to accommodate error code pushes and context saves without overflow, which could escalate to a triple fault. These steps, applied iteratively with logging, address triggers like IDT entry errors without requiring hardware intervention.[18]Virtualization Contexts
Hypervisor Emulation
In virtualized environments, hypervisors detect triple faults in guest operating systems by intercepting double-fault exception vectors (interrupt 8) through VM exits, allowing them to monitor for subsequent exceptions that indicate a triple fault condition before the guest can trigger an unrecoverable state.[19] For instance, KVM extends this detection to all exception types beyond just page faults, tracking exception chains during emulation to identify when a double-fault handler itself faults, thereby confirming a triple fault. This interception preserves host stability by preventing the guest from emulating a full hardware reset, which would otherwise occur on bare metal.[20] Upon detection, hypervisors emulate the triple fault behavior in a controlled manner rather than allowing a physical CPU reset. In KVM, the handler for Intel VMX (Virtual Machine Extensions) reports a KVM_SYSTEM_EVENT_CRASH event to userspace, enabling components like QEMU to terminate the affected virtual CPU or inject a synthetic shutdown exception into the guest, thus avoiding propagation to the host kernel. Similarly, VMware ESXi places the virtual CPU into a shutdown state upon triple fault occurrence, powering off the VM by default or suspending it to a .vmss file if the monitor.suspend_on_triplefault option is enabled in the VM configuration, ensuring graceful isolation of the faulted guest.[20] A practical example of this emulation is seen in QEMU configured with KVM acceleration and the q35 machine model (-machine q35,accel=kvm), where a guest triple fault results in the generation of panic logs within the guest's context—such as kernel oops messages—without causing host disruption or requiring manual intervention, as QEMU handles the event by rebooting or exiting the VM as specified.[21] This approach allows developers and administrators to debug guest issues iteratively while maintaining overall system reliability.Prevention in Virtual Machines
In virtualized environments, guest operating systems mitigate the risk of triple faults by ensuring adequate configuration during initialization. Allocating sufficient virtual stack space is critical to prevent stack overflows, which can trigger exceptions that cascade into double faults. For instance, the Linux kernel employs virtually mapped kernel stacks with guard pages to detect overflows immediately upon access, thereby avoiding corruption that could lead to unhandled exceptions and subsequent triple faults.[22] Additionally, validating the Interrupt Descriptor Table (IDT) during guest kernel initialization establishes proper exception handlers, including a dedicated double fault handler, to interrupt potential fault chains before they escalate. Paravirtualization interfaces further enhance stability; in Xen, event channels serve as a mechanism for efficient interrupt delivery, offloading traditional hardware interrupt handling from the guest's IDT and reducing the likelihood of recursive exceptions in virtual machines.[23] Hypervisors implement safeguards to intercept and manage potential fault sources at the virtualization layer. Shadow paging, a common technique in type-1 hypervisors, maintains synchronized shadow page tables that mirror the guest's virtual-to-physical mappings while enforcing host-level isolation. This prevents invalid memory accesses by trapping and resolving guest page faults through the hypervisor's memory management unit (MMU), such as KVM's shadow MMU, which walks guest page tables on faults and updates shadow entries to avoid unhandled translations that could propagate to triple faults.[24] By write-protecting guest page tables and responding to TLB invalidations, shadow paging ensures that discrepancies in mappings do not result in cascading exceptions. In cloud environments like AWS EC2, best practices emphasize enabling nested virtualization on supported instance types, such as bare metal instances with the Nitro hypervisor, to facilitate stable guest operations without excessive overhead. Using Hardware Virtual Machine (HVM) AMIs optimizes performance and compatibility, while integrating monitoring tools like Amazon CloudWatch allows for proactive detection of exception patterns through metrics on CPU utilization and error rates, enabling preemptive adjustments to VM configurations before faults escalate.[25]Historical Development
Origins in Early x86
The triple fault mechanism originated with the Intel 80286 microprocessor, released on February 1, 1982, which introduced protected mode to enable advanced memory protection and multitasking capabilities in x86 architecture.[26] In this environment, the processor supported hardware task switching via task gates in the Interrupt Descriptor Table (IDT), allowing exceptions to transfer control to a dedicated handler task without corrupting the original context. Double faults, assigned to interrupt vector 8 (#DF), were specifically designed to handle scenarios where a second exception occurred during the processing of an initial fault, such as stack overflow or segment not present errors; these invoked a task switch to a double fault handler task, pushing a zero error code and the address of the failing instruction.[27] If the double fault handler itself encountered another exception—due to insufficient stack space (e.g., stack pointer SP = 1) or invalid descriptors—the processor escalated to a triple fault, entering an unrecoverable shutdown state without any software intervention. This shutdown was signaled by a special Halt bus cycle (with address line A1 = 0), triggering a hardware reset that could only be exited via a non-maskable interrupt (NMI) or external RESET pin, effectively rebooting the system. The mechanism was detailed in Intel's documentation as an escalation from vector 8 handling, ensuring no infinite loops or partial state corruption in protected mode operations.[27] This design was motivated by the need to manage unrecoverable errors in multitasking systems, where faulty tasks could otherwise cause indefinite hangs or undefined behavior in protected mode; by forcing a reset on triple faults, the 80286 prevented prolonged instability while leveraging its task-switching hardware to isolate error handling. Early Intel manuals, such as the 1987 Programmer's Reference, emphasized this as a safeguard for reliable operation in segmented, virtual memory environments supporting up to 16 MB of address space.[27]Evolution in Modern Processors
The double fault exception, vector 8, was present in the Intel 80286 but evolved significantly with the Intel 80386 processor, released in 1985. The 80386 shifted from the 80286's reliance on task gates in the interrupt descriptor table (IDT) for double fault handling—which required a task switch—to supporting interrupt gates, allowing invocation of a dedicated handler procedure within the current task context while pushing an error code of zero onto the stack.[28][29][30] This design prevented automatic task switching and enabled more precise error recovery attempts before escalation to a triple fault. This framework persisted into the x86-64 era, introduced by AMD in 2003 with the AMD64 architecture (first implemented in the Opteron processor) and adopted by Intel as IA-32e in 2004. The 64-bit mode extended the IDT and exception handling to support larger addresses and compatibility sub-modes, but retained the core triple fault semantics: a fault during double fault delivery triggers processor shutdown without further handler invocation. Both AMD and Intel implementations maintain this reset behavior for compatibility, issuing a special SHUTDOWN bus cycle that signals the chipset to initiate a system reset, though AMD's documentation emphasizes architectural alignment with Intel's IA-32 extensions.[31][32] In the multi-core era, beginning with processors like the Intel Core 2 Duo in 2006, triple fault handling gained per-core isolation capabilities. A triple fault confines the affected logical processor to a shutdown state (activity state 2), halting its execution while allowing other cores to continue operation temporarily; however, the chipset typically propagates an INIT signal across the system, leading to a full reset unless custom firmware intervenes. This enhancement reflects broader multi-processor management in x86 architectures, where exceptions like double faults are processed independently per core but escalate system-wide for unrecoverability. As of the latest Intel SDM updates in 2024, the fundamental shutdown and reset mechanics remain unchanged across generations, including those supporting AVX-512 instructions.[31][11]Other Uses
In Literature and Media
In the young adult fiction series Canterwood Crest, the title Triple Fault (2009) by Jessica Burkhart serves as the fourth installment, centering on protagonist Sasha Silver, a competitive equestrian at an elite boarding academy. The narrative follows Sasha's challenges in maintaining her position on the school's team amid intense rivalries, particularly with Heather, and personal betrayals involving her near-romantic interest, Jacob. The "triple fault" in the story metaphorically represents a series of critical errors during a high-stakes riding competition, triggered by Sasha's emotional distress, symbolizing compounded personal and professional setbacks in the world of teen equestrian sports.[33] Beyond this specific title, "triple fault" appears thematically in various dramatic works as a motif for successive failures or breakdowns, often evoking the idea of three irredeemable mistakes leading to collapse, distinct from its technical meaning in computing as an unrecoverable processor error. This usage emphasizes human or systemic vulnerabilities in narratives focused on pressure and resilience, without referencing hardware or software contexts. In media, the term features in tech-themed fiction, such as the 2016 episode "Triple Fault" of the animated web series Arby 'n' the Chief, where it titles a plot involving a malfunctioning AI robot, highlighting escalating dangers in a comedic sci-fi scenario. Additionally, educational videos on operating system development occasionally depict triple faults as dramatic crash events in simulations, akin to narrative climaxes of system failure in documentary-style content.[34]In Robotics and Sports
In the realm of competitive robotics, "Triple Fault" serves as the name for FIRST Tech Challenge (FTC) Team 23251, a student-led group based in San Diego, California, that debuted in the 2023 season.[35] The team, sponsored by family and community supporters, participates in FTC events focused on designing and programming robots for challenges like constructing reef scapes in the 2024 "Into the Deep" season.[35] Known for strong performances, Team 23251 achieved an Offensive Power Rating (OPR) of 225.36 in the "Into the Deep" season, ranking 18th overall among all teams and contributing to their advancement in regional qualifiers such as the San Diego Metro League.[36] As of the 2025 "Decode" season and November 2025, the team remains active, having participated in early qualifiers, competing in events including the California San Diego Championship, and preparing for the FIRST Championship in Houston.[37] The term "triple fault" has also appeared in sports literature as a metaphorical extension beyond computing, particularly in tennis coaching contexts. In a 2025 article from Long Island Tennis Magazine, "Triple Fault" describes emotional dynamics in youth training, analogizing the concept to a player's three consecutive serve faults but applied to breakdowns or successes within the child-coach-parent triad.[38] The piece outlines negative emotional "triple faults," such as lack of motivation or disrespect, attributing causes to factors like parental pressure or uninspired coaching, while contrasting them with positive scenarios emphasizing resilience and teamwork.[38] This usage highlights interdependence in athletic development, urging balanced environments to foster emotional growth without technical overlap to computing errors.[38] Within maker and hobbyist communities, "triple fault" occasionally receives a lighthearted reference as a nod to computing mishaps, inspiring team names like that of FTC Team 23251 to blend technical humor with educational robotics pursuits.[39] This adoption underscores the term's cultural resonance in creative, hands-on fields without implying any direct engineering application.[35]References
- https://wiki.xenproject.org/wiki/Introduction_to_Xen_3.x
