Fact-checked by Grok 2 weeks ago

Interrupt flag

An interrupt flag in is a bit or within a processor's or that signals the presence of an or controls the processor's ability to respond to such requests. It plays a crucial role in handling by allowing the CPU to temporarily suspend normal program execution, save the current , and service time-sensitive events from devices or software, thereby enabling efficient multitasking and responsiveness in systems. Interrupt flags can be categorized into two primary types: enable flags and pending flags. The enable flag, often denoted as IF (Interrupt Flag) in architectures like x86, is a single bit (bit 9 in the EFLAGS register) that determines whether the processor recognizes and processes maskable hardware interrupts. When IF is set to 1 using instructions like STI (Set Interrupt Flag), the processor checks for interrupts at the end of each instruction cycle and services them if pending; when cleared to 0 via CLI (Clear Interrupt Flag), maskable interrupts are ignored to protect critical code sections from interruption. This flag does not affect non-maskable interrupts (NMIs), which are high-priority events like hardware errors that cannot be disabled. In contrast, pending flags, such as those in an Interrupt Flag Register (IFR), are set by hardware when an interrupt source activates, indicating that an event requires attention; these flags are typically cleared only after the associated Interrupt Service Routine (ISR) completes processing. The operation of interrupt flags integrates with other registers, including the Interrupt Enable Register (IER) and Interrupt Mask Register (INTM), to prioritize and filter interrupts. For instance, in x86 systems, during interrupt entry via an interrupt gate, the IF is automatically cleared to prevent nested interrupts, and it is restored upon exit using IRET, ensuring atomic execution of handlers. Maskable interrupts, controlled by these flags, allow software to defer non-urgent events, while non-maskable ones bypass flags entirely for immediate response. Interrupt latency—the time from flag setting to ISR execution—varies by architecture, ranging from 3-4 clock cycles in simple microcontrollers like PIC16F to 7-13 cycles in DSPs like C55x, influencing system performance in embedded and general-purpose computing. Overall, interrupt flags are foundational to operating systems and device drivers, balancing efficiency and reliability in interrupt-driven environments.

Fundamentals

Definition and Purpose

The interrupt flag (IF) is a single bit within a CPU's flags or that controls the 's response to maskable external hardware interrupts. When set to 1, the flag enables the to recognize and handle these interrupts promptly upon their occurrence; when cleared to 0, the ignores them, deferring processing until the flag is subsequently set. This flag specifically governs maskable interrupts, such as those generated by IRQ lines from peripheral devices, but has no impact on non-maskable interrupts (NMIs), which are critical and cannot be disabled, or on software-generated interrupts like those triggered by the instruction. For instance, in the x86 architecture, the IF resides at bit 9 of the EFLAGS (or RFLAGS in 64-bit mode) register, allowing precise control over interrupt servicing in compatible systems. The primary purpose of the interrupt flag is to enable software to temporarily disable interrupt handling, thereby protecting critical code sections from asynchronous interruptions that could lead to race conditions or data inconsistencies. By clearing the flag, developers can ensure atomic execution of operations on shared resources, such as during manipulations or driver initializations, where concurrent access from an might otherwise corrupt the state. This mechanism is essential for maintaining system reliability without relying on more complex synchronization primitives in low-level environments.

Historical Development

The concept of an interrupt enable flag originated in systems of the 1960s and 1970s, such as the PDP-8 (1965), which included a single interrupt enable bit, and the PDP-11 (1970), featuring an interrupt enable bit in its processor status word (PSW) for controlling hardware interrupts. In s, early examples include the (1974), which used and instructions to control an internal interrupt enable (INTE) flag, though not part of the user-accessible . The interrupt enable flag (IF) was introduced in the (released in 1978) as bit 9 within the 16-bit , enabling or disabling the processor's response to maskable external interrupts via the INTR pin and allowing the CPU to handle asynchronous events from peripherals without constant polling—a key advancement for early PC architectures. This design drew conceptual influence from earlier systems like the PDP-11, adapting it to a complex instruction set (CISC) framework optimized for real-time responsiveness. Subsequent processors in the x86 lineage refined the interrupt flag's role amid growing demands for and multitasking. The , introduced in 1982, retained the IF in its but integrated it into , where interrupt handling began to interact with the new segmentation and mechanisms, imposing restrictions on flag modifications based on the current level to enhance system stability. The Intel 80386 in 1985 expanded the to 32 bits (EFLAGS) and incorporated the IF into a four-level ring system for operating system ; in this setup, clearing or setting the flag via CLI or instructions required sufficient (current level ≤ I/O level), preventing untrusted code from disrupting flows. Further evolution addressed virtualization needs in multitasking environments. The processor, launched in 1993, introduced the Virtual Interrupt Flag (VIF) as a bit in the extended EFLAGS to support virtual-8086 , allowing emulated 8086 environments to manage interrupts independently without affecting the host system's IF, thus improving compatibility for legacy software under protected-mode operating systems. By the advent of the architecture with AMD's AMD64 extension in 2003, the interrupt flag was seamlessly incorporated into the 64-bit RFLAGS , preserving the original IF behavior for maskable interrupts across compatibility and long without fundamental alterations, ensuring while enabling 64-bit addressing.

Manipulation

Setting the Interrupt Flag

The primary mechanism for setting the (IF) in the x86 architecture is the (Set Interrupt Flag) instruction, which directly sets the IF bit (bit 9) in the EFLAGS register to 1, thereby enabling the to recognize and service maskable external interrupts. This instruction has the opcode FB and operates without operands, modifying only the IF bit while leaving all other flags unaffected. Upon execution, sets IF immediately, but in practice, the delays recognition of pending interrupts until after the of the subsequent instruction; this design choice prevents reentrancy problems, such as an interrupt occurring midway through a return sequence from a prior handler. In , causes a (#GP) if the current privilege level (CPL) is greater than the I/O privilege level (IOPL). An alternative method to set the interrupt flag involves the POPF (pop flags), POPFD (pop flags doubleword), or POPFQ (pop flags quadword) instructions, which pop a 16-bit, 32-bit, or 64-bit value from the into the lower bits of the EFLAGS or RFLAGS , respectively, thereby setting IF according to the state of bit 9 in the popped value. These instructions, with 9D, are commonly employed in routines or during task switches to restore the full from a previously saved on the , ensuring that enablement aligns with the prior execution environment. Unlike STI, which unconditionally targets only IF, POPF variants can affect multiple flags simultaneously, but their impact on IF depends on the provided data and privilege level (IF is modified only if CPL ≤ IOPL). Regarding atomicity, the STI instruction executes as a single, indivisible operation at the level, ensuring that the modification cannot be interrupted or partially completed. The delayed effect of introduces some latency in enabling interrupts. In practical software usage, such as within operating system kernels, the instruction is typically invoked at the conclusion of a to re-enable interrupts and restore normal system responsiveness after a period of disablement. The counterpart operation of clearing the interrupt is handled by the CLI instruction, as detailed in the relevant section.

Clearing the Interrupt Flag

Clearing the interrupt flag in x86 architectures primarily involves instructions that set the Interrupt Flag (IF) bit in the EFLAGS register to 0, thereby suspending the processing of maskable hardware interrupts. The primary instruction for this purpose is CLI (Clear Interrupt Flag), which immediately clears the IF flag and disables recognition of maskable external interrupts. In protected mode, CLI causes a (#GP) if CPL > IOPL. In addition to CLI, the POPF (Pop Flags), POPFD (Pop Flags Doubleword), and POPFQ (Pop Flags Quadword) instructions can also clear the IF flag by popping a value from the into the or RFLAGS register, provided the corresponding bit in the popped value is 0. These instructions are commonly employed to restore the from a previously saved context on the , allowing IF to be cleared as part of broader state restoration. The effect on IF is subject to privilege checks (CPL ≤ IOPL). The CLI instruction takes effect immediately upon execution, preventing the processor from servicing any pending maskable until the flag is subsequently set, such as via its counterpart (Set Interrupt Flag). As a single, indivisible operation, CLI is inherently , making it suitable for brief critical sections where latency must be minimized to avoid system responsiveness issues. In practice, CLI is frequently used in device drivers to safeguard shared structures against from concurrent handlers; for instance, a driver might execute CLI before accessing a queue and STI afterward to ensure updates relative to potential interrupt-driven modifications.

Access Control

Privilege Requirements

In x86 , introduced with the processor, the CLI (Clear Interrupt Flag) and STI (Set Interrupt Flag) instructions are privileged operations that can only be executed at privilege level 0 (ring 0, corresponding to kernel mode). Execution attempts from higher privilege levels, such as ring 3 (user mode), generate a general protection exception (#GP(0)) unless the current privilege level (CPL) is less than or equal to the I/O privilege level (IOPL), which is typically set to 0 in user mode to enforce strict . This restriction ensures that only trusted operating system code can disable or enable maskable interrupts system-wide. The POPF (Pop Flags) instruction, which loads the EFLAGS register from the stack, follows a similar security model in protected mode. At non-zero CPL (e.g., ring 3), POPF modifies only non-privileged bits of EFLAGS, while the interrupt flag (IF) remains unchanged if CPL exceeds IOPL, preventing user-mode code from indirectly enabling interrupts. This selective modification avoids exceptions for IF but upholds the privilege boundary. The underlying rationale for these controls is to protect the system from untrusted user code that could disable interrupts, potentially leading to missed hardware events or denial of critical OS services, thereby preserving kernel authority over interrupt handling. In contrast, —used in early x86 environments like —lacks privilege levels entirely, permitting unrestricted execution of CLI, STI, and POPF to manipulate the interrupt flag without generating exceptions or requiring specific CPL or IOPL checks. The 8086 operated only in without protection rings. The 80286 introduced with multi-level privilege architecture, though many early systems primarily used ; the 80386 enhanced this with 32-bit support.

Legacy Compatibility Issues

In early x86 systems like the 8086, software operated in real mode without protection rings, allowing unrestricted access to instructions like CLI and STI for manipulating the interrupt flag (IF). The 80286 added protected mode privileges, but legacy applications often assumed real-mode behavior. This design assumption persisted in legacy DOS applications, which expected direct hardware control over interrupts. When running such real-mode DOS programs on modern operating systems like Windows NT and later, the NT Virtual DOS Machine (NTVDM), introduced in 1993 with Windows NT 3.1, emulates the 8086 environment using virtual 8086 (v86) mode. However, CLI and STI are privileged instructions in protected mode on 80386 and subsequent processors, triggering general protection faults (#GP) when executed in user mode (ring 3). NTVDM traps these faults and maintains a virtual interrupt enable state to simulate the expected behavior, but discrepancies in emulation—such as timing issues or incomplete handling of interrupt interactions—can cause applications to hang indefinitely. For instance, older DOS utilities or drivers that rely on precise interrupt masking may enter infinite loops if the virtual IF does not align with hardware reality during fault handling. A notable example involves 1990s games utilizing extenders like DOS/4GW, which switch from to to access via the (DPMI). These applications often use POPF to restore the , including IF, after handlers, assuming full control in a flat model. However, in user mode on modern OSes, POPF silently ignores attempts to modify IF unless the current level (CPL) is at most the I/O level (IOPL), preventing delivery and causing the software to malfunction, such as failing to respond to timer or input events. While NTVDM provides limited DPMI support for such applications, compatibility issues with extenders can arise due to constraints, and NTVDM may not fully host all DPMI features, leading to incompatibilities without external tools. The impact extends to 64-bit systems, where NTVDM was never implemented, and it remained available but deprecated as a legacy feature in 32-bit Windows 10 until the end of support on October 14, 2025. As of November 2025, with Windows 10 end of life and no 32-bit support in , NTVDM is no longer part of supported operating systems, affecting a wide range of x86 software. Without access to for modifications, workarounds are limited to third-party emulators like , which recreate the original environment but may not perfectly replicate hardware-specific behaviors. This incompatibility stems directly from the shift to ring-based protection in post-8086 architectures, highlighting the challenges of preserving assumptions from an era without enforced access controls.

Interrupt Management

Disabling Interrupts in Software

Disabling interrupts in software serves as a key mechanism for safeguarding short critical sections in and application code, ensuring execution in environments where asynchronous events could otherwise corrupt shared data structures. This technique is commonly employed during brief operations, such as updating linked lists or initializing spinlocks in uniprocessor s, where clearing the flag prevents higher-priority handlers from preempting the current execution flow. On x86 architectures, this is achieved locally on the current CPU, making it suitable for per-CPU data protection without affecting other processors. Best practices emphasize minimizing the duration of interrupt-disabled periods to maintain responsive system behavior and avoid issues like timeouts. Such sections must always be paired with a subsequent re-enabling of to promptly restore normal processing. For instance, in the , the local_irq_disable() macro implements this by invoking the CLI instruction on x86 systems, providing per-CPU interrupt masking for local critical sections like those in device drivers managing buffers. To support nested disabling, variants like local_irq_save(flags) and local_irq_restore(flags) are recommended, as they preserve and restore the prior interrupt state, preventing errors in reentrant code. However, overuse of interrupt disabling can significantly elevate overall interrupt latency by delaying the handling of pending events, and it is inappropriate for extended operations that could starve the system of timely responses. In such cases, alternatives like spinlocks offer better in multiprocessor settings without relying on global or prolonged interrupt suspension, as detailed in the Multiprocessor Environments section.

Enabling Interrupts in Software

In x86 architectures, the primary method for re-enabling interrupts in software involves executing the (Set Interrupt Flag) instruction after completing a of code that required interrupt disablement. This instruction sets the Interrupt Flag (IF) in the EFLAGS register, but maskable hardware are not recognized until the end of the subsequent instruction, ensuring that the immediate post-STI code executes atomically before any pending interrupts are serviced. Within interrupt handlers, the IRET (Interrupt Return) instruction automatically restores the state of the to its value prior to the interrupt entry, setting IF=1 if interrupts were enabled when the handler was invoked. Upon interrupt entry, the processor pushes the original EFLAGS (including IF=1) onto the stack and clears IF to prevent nested maskable interrupts during handler execution; IRET then pops and restores this saved state, thereby re-enabling interrupts as appropriate for the interrupted context. The deferred recognition of interrupts following STI provides a timing nuance that helps prevent reentrancy in interrupt handlers, particularly in scenarios involving nested interrupts where the handler must complete without immediate recursion from the same or higher-priority interrupt source. This one-instruction delay allows critical finalization steps in the handler or post-critical-section code to proceed uninterrupted, maintaining system stability in environments with varying interrupt priorities. For instance, in operating system schedulers such as those in the teaching kernel, is invoked after atomic operations like context switching to resume normal multitasking by re-enabling interrupts and allowing the scheduler to respond to timer or other events. Best practices for enabling interrupts emphasize maintaining a balanced pairing of CLI (Clear Interrupt Flag) and instructions to ensure interrupts are not left permanently disabled, which could lead to missed hardware events or system hangs; developers should verify enablement through flags inspection in kernel code.

System-Level Considerations

Multiprocessor Environments

In multiprocessor environments, the interrupt flag (IF) operates on a per-CPU basis, meaning that clearing it on one core using the CLI instruction affects only that core's EFLAGS register and does not influence other cores. This localized behavior allows interrupts to continue arriving and being processed on sibling cores, potentially leading to concurrent access to shared resources if not properly managed. To protect shared data across multiple cores in () systems, interrupt flag manipulation must be combined with additional primitives such as spinlocks or mutexes, ensuring that critical sections are with respect to both local interrupts and inter-core contention. For instance, in x86-based kernels like , the local_irq_disable() function implements CLI to mask interrupts solely on the current CPU, while spinlocks handle from other processors; a similar approach is used in kernels, where local interrupt disabling pairs with multiprocessor-safe locking mechanisms. This dual requirement introduces added complexity to and code, as developers must coordinate control with global locking, and overuse of such broad disabling can degrade scalability by serializing access on highly contended resources. Historically, early x86 designs assumed uniprocessor operation, with support beginning to emerge in the late with 80386 and 80486 systems using methods, and advanced in the mid-1990s through the introduction of the APIC architecture for efficient inter-processor routing, starting with discrete chips in 1993 and integration in processors.

Modern Architectures and Virtualization

In architectures, the interrupt flag (IF) continues to reside in bit 9 of the RFLAGS register, maintaining its role in controlling maskable external interrupts as in earlier x86 variants. This flag is preserved across 64-bit mode operations, with instructions like CLI and directly manipulating it to disable or enable interrupts, respectively. Virtualization extensions, such as VT-x introduced in 2005, enhance flag management through mechanisms like IF shadowing and the virtual flag (VIF). During VM entry, the guest's RFLAGS.IF is loaded from the virtual-machine control structure (VMCS), while on VM exit, it is saved to the guest-state area and the host's IF is restored, ensuring between guest and host states. VIF, located in bit 17 of the guest's virtual RFLAGS, allows guest operating systems to control recognition in virtual-8086 mode or shadowed contexts, with the using pin-based controls (e.g., external- exiting) to intercept and emulate delivery, preventing guest interference with the host. This shadowing minimizes overhead by avoiding unnecessary VM exits for routine IF manipulations. Equivalent mechanisms appear in other instruction set architectures (ISAs) to manage interrupt enabling at various privilege levels. In ARMv8-A and later, the DAIF bits in the processor state (PSTATE) register provide interrupt masking, with bit 7 (I) specifically disabling IRQ interrupts when set to 1, accessible via instructions like MSR for supervisor-level control. Similarly, RISC-V's privileged architecture uses the mstatus , where the MIE bit (bit 3) enables machine-mode interrupts and the SIE bit (bit 1) enables supervisor-mode interrupts, allowing hierarchical interrupt control without a single global flag like IF. In virtualized environments, hypervisors like KVM intercept and IF-related operations to maintain guest isolation. For x86 guests, CLI and instructions trigger VM exits if configured in the VMCS, with KVM updating the guest's virtual RFLAGS.IF in software to the effect, avoiding direct host interference while blocking unauthorized interrupt delivery. This emulation ensures that guest OS interrupt masking does not affect the host, supporting nested virtualization and secure multi-tenancy. Recent developments as of 2025 emphasize secure handling and enhancements to interrupt mechanisms. AMD's SEV-SNP, launched in 2021 with processors, introduces restricted injection and alternate injection modes to protect against malicious interrupt injections, allowing guests to validate and manage interrupt sources for enhanced and in encrypted VMs. In Intel's (12th Gen Core, 2021) and subsequent hybrid architectures, interrupt latency benefits from optimized core steering via Intel Thread Director, directing low-priority interrupts to efficiency cores to reduce overall system responsiveness delays without altering the IF mechanism. In October 2025, Intel and AMD standardized (Flexible Return and Event Delivery) as part of x86 ecosystem improvements, providing a modernized interrupt and exception delivery model that reduces latency and improves reliability while preserving compatibility with existing interrupt flags. Overall, these advancements integrate with , addressing legacy compatibility without fundamental redesigns to the core interrupt flag concept.

References

  1. [1]
    Interrupt Flag - an overview | ScienceDirect Topics
    An 'Interrupt Flag' is a register that is set when an interrupt request is sent to the CPU, indicating that an interrupt has occurred and needs to be processed.
  2. [2]
    Chapter 12: Interrupts
    An interrupt is the automatic transfer of software execution in response to a hardware event that is asynchronous with the current software execution.
  3. [3]
    [PDF] Intel® 64 and IA-32 Architectures Software Developer's Manual
    NOTE: The Intel® 64 and IA-32 Architectures Software Developer's Manual consists of nine volumes: Basic Architecture, Order Number 253665; Instruction Set ...
  4. [4]
    [PDF] Chapter 3 Traps, interrupts, and drivers - cs.wisc.edu
    A processor can control if it wants to receive interrupts through the IF flag in the eflags register. The instruction cli disables interrupts on the processor ...
  5. [5]
    Maskable Interrupt - an overview | ScienceDirect Topics
    A maskable interrupt is defined as a hardware interrupt that can be ignored by the microprocessor by setting a bit in an interrupt mask register's bit-mask, ...
  6. [6]
    STI — Set Interrupt Flag
    In most cases, STI sets the interrupt flag (IF) in the EFLAGS register. This allows the processor to respond to maskable hardware interrupts.
  7. [7]
    CLI — Clear Interrupt Flag
    The CLI instruction clears the interrupt flag, disabling maskable external interrupts by clearing the IF flag in the EFLAGS register.<|control11|><|separator|>
  8. [8]
    Interrupts — The Linux Kernel documentation
    Most interrupts are maskable, which means we can temporarily postpone running the interrupt handler when we disable the interrupt until the time the interrupt ...
  9. [9]
    [PDF] Users Manual - Bitsavers.org
    ... 8086Family. Users Manual. October1979. © Intel Corporation 1978 ... INTRODUCTION. Table 1-1. 8086 Component Family. Microprocessor. Technology Pins. Description.
  10. [10]
    Interrupts - Mark Smotherman - Clemson University
    Interrupts are external signals from devices that can interrupt a program's execution, enabling rapid reactions to external changes. They are a basis for ...
  11. [11]
    [PDF] Intel 80286 Programmer's Reference Manual - Bitsavers.org
    COMPLETE SET OF 9 HANDBOOKS. Save $50.00 off the retail price of $175.00. MEMORY COMPONENTS HANDBOOK. MICROCOMMUNICATIONS HANDBOOK.
  12. [12]
    [PDF] INTEL 80386 PROGRAMMER'S REFERENCE MANUAL 1986
    It includes factory repair services and worldwide field service offices providing hardware repair services, software support services, customer training classes ...
  13. [13]
    [PDF] Intel Reveals Pentium Implementation Details: 3/29/93 - CECS
    Mar 29, 1993 · The VIP (virtual interrupt pending) and VIF (virtual interrupt flag) bits support changes to the way virtual-86 mode is implemented on.<|separator|>
  14. [14]
    [PDF] AMD64 Architecture Programmer's Manual Volume 2
    ... 2003, 2004, 2005 Advanced Micro Devices, Inc. All rights reserved. The contents of this document are provided in connection with Advanced Micro Devices, Inc ...
  15. [15]
    POPF/POPFD/POPFQ — Pop Stack Into EFLAGS Register
    The AC and ID flags can only be modified if the operand-size attribute is 32. The interrupt flag (IF) is altered only when executing at a level at least as ...
  16. [16]
    [PDF] 4. Instruction tables - Agner Fog
    Sep 20, 2025 · The present manual contains tables of instruction latencies, throughputs and micro-operation breakdown and other tables for x86 family ...
  17. [17]
    Re: cli() and sti() - The Linux-Kernel Archive
    Mar 2, 1997 · After the critical section of code, where you don't care if the interrupts are enabled, the restore_flags() macro is executed instead of sti().
  18. [18]
    [PDF] Intel® 64 and IA-32 Architectures Software Developer's Manual
    NOTE: The Intel® 64 and IA-32 Architectures Software Developer's Manual consists of nine volumes: Basic Architecture, Order Number 253665; Instruction Set ...
  19. [19]
    [PDF] Exceptions/Interrupts and Concurrency - Duke Computer Science
    ➢ Solution: disable interrupts. • Disabling interrupts is a protected operation. ➢ Only the kernel can execute it. ➢ user vs. kernel mode. ➢ mode bit in CPU ...
  20. [20]
    NTVDM and 16-bit app support - Compatibility Cookbook
    Nov 17, 2021 · This component allows the execution of 16-bit Windows applications on 32-bit Windows operating systems, as well as the execution of both 16-bit and 32-bit DOS ...
  21. [21]
    [PDF] Sample Chapters from Windows Internals, Sixth Edition, Part 1
    them again (using the STI and CLI instructions on x86 and x64 processors) . This is desirable because significant parts of the idle thread execute with ...
  22. [22]
  23. [23]
    Floating-Point Exceptions and DOS Extenders | OS/2 Museum
    Sep 5, 2014 · For that reason, DOS/4GW installs its own protected-mode IRQ 13 handler which then calls the protected-mode interrupt 2 handler. Once the ...Missing: flag modern
  24. [24]
  25. [25]
  26. [26]
    IRET/IRETD/IRETQ — Interrupt Return
    If the NT flag (EFLAGS register) is cleared, the IRET instruction performs a far return from the interrupt procedure, without a task switch. The code ...
  27. [27]
    [PDF] xv6 - DRAFT as of September 5, 2016 - PDOS-MIT
    This is a draft text intended for a class on operating systems. It explains the main con- cepts of operating systems by studying an example kernel, ...
  28. [28]
    The kernel's command-line parameters
    The following is a consolidated list of the kernel parameters as implemented by the __setup(), core_param() and module_param() macros and sorted into English ...
  29. [29]
    Unreliable Guide To Locking - The Linux Kernel documentation
    This works perfectly for UP as well: the spin lock vanishes, and this macro simply becomes local_irq_disable() ( include/asm/smp.h ), which protects you from ...
  30. [30]
    Multiprocessor-Safe - Windows drivers - Microsoft Learn
    Dec 15, 2021 · The Microsoft Windows NT-based operating system is designed to run uniformly on uniprocessor and symmetric multiprocessor (SMP) platforms.
  31. [31]
    ibm pc - What was the first multiprocessor x86 motherboard?
    Aug 7, 2019 · The original 8086 was already not only capable of sharing the bus between multiple CPUs, it was a core feature to enable operation of configurations with an ...Did 486 SMP systems provide Total Store Ordering?Why did Intel abandon unified CPU cache?More results from retrocomputing.stackexchange.com
  32. [32]
    [PDF] Intel® 64 and IA-32 Architectures Software Developer's Manual
    NOTE: The Intel® 64 and IA-32 Architectures Software Developer's Manual consists of ten volumes: Basic Architecture, Order Number 253665; Instruction Set ...
  33. [33]
    [PDF] Intel® Virtualization Technology Specification for the IA-32 Intel ...
    This documents describes Intel® Virtualization Technology for IA-32 processors, referred to as. VT-x. VT-x constitutes a set of virtual-machine extensions (VMX) ...
  34. [34]
    [PDF] The RISC-V Instruction Set Manual - People @EECS
    Jul 8, 2016 · Interrupt-enable bits, MIE, HIE, SIE, and UIE, are provided for each privilege mode. These bits are primarily used to guarantee atomicity with ...
  35. [35]
    Hybrid Architecture (code name Alder Lake) - Intel
    A collection of technical white papers covering guidance for developing, debugging and optimizing your workloads for Intel's new Hybrid Architecture.Missing: interrupt improvements