• Navigation überspringen
  • Zur Navigation
  • Zum Seitenende
Organisationsmenü öffnen Organisationsmenü schließen
Friedrich-Alexander-Universität Lehrstuhl für Informatik 4 (Systemsoftware)
  • FAUZur zentralen FAU Website
  1. Friedrich-Alexander-Universität
  2. Technische Fakultät
  3. Department Informatik
Suche öffnen
  • English
  • Campo
  • StudOn
  • FAUdir
  • Stellenangebote
  • Lageplan
  • Hilfe im Notfall
  1. Friedrich-Alexander-Universität
  2. Technische Fakultät
  3. Department Informatik
Friedrich-Alexander-Universität Lehrstuhl für Informatik 4 (Systemsoftware)
Menu Menu schließen
  • Lehrstuhl
    • Team
    • Aktuelles
    • Kontakt und Anfahrt
    • Leitbild
    • 50-jähriges Jubiläum
    Portal Lehrstuhl
  • Forschung
    • Forschungsbereiche
      • Betriebssysteme
      • Confidential Computing
      • Embedded Systems Software
      • Verteilte Systeme
    • Projekte
      • AIMBOS
      • BALu
      • BFT2Chain
      • DOSS
      • Mirador
      • NEON
      • PAVE
      • ResPECT
      • Watwa
    • Projektkampagnen
      • maRE
    • Seminar
      • Systemsoftware
    Portal Forschung
  • Publikationen
  • Lehre
    • Sommersemester 2025
      • Applied Software Architecture
      • Ausgewählte Kapitel der Systemsoftware
      • Betriebssystemtechnik
      • Projekt angewandte Systemsoftwaretechnik
      • System-Level Programming
      • Systemnahe Programmierung in C
      • Systemprogrammierung 1
      • Verteilte Systeme
    • Wintersemester 2025/26
      • Systemprogrammierung 2
      • Betriebssysteme
      • Middleware – Cloud Computing
      • Echtzeitsysteme
      • Virtuelle Maschinen
      • Web-basierte Systeme
      • Projekt angewandte Systemsoftwaretechnik
      • Aktuelle Entwicklung in Verteilten und Objektorientierten Betriebssystemen (für Bachelor-/Masterarbeit)
    Portal Lehre
  • Examensarbeiten
  1. Startseite
  2. Extern

Extern

Bereichsnavigation: Lehre
  • Betriebssysteme

    Aufgabe 3: Pro-/Epilog

    • LAPIC
    • IPI
    Classes | Enumerations | Functions
    LAPIC::IPI Namespace Reference
    Interrupt Handling

    Inter-Processor Interrupts. More...

    Classes

    struct  InterruptCommand.__unnamed54__
     I/O redirection-table entry. More...
     

    Enumerations

    enum  DeliveryMode {
      FIXED = 0 ,
      LOWEST_PRIORITY = 1 ,
      SMI = 2 ,
      NMI = 4 ,
      INIT = 5 ,
      INIT_LEVEL_DEASSERT = 5 ,
      STARTUP = 6
    }
     Delivery mode specifies the type of interrupt sent to the CPU. More...
     
    enum  DestinationMode {
      PHYSICAL = 0 ,
      LOGICAL = 1
    }
     Way of interpreting the value written to the destination field. More...
     
    enum  DeliveryStatus {
      IDLE = 0 ,
      SEND_PENDING = 1
    }
     Interrupt state. More...
     
    enum  Level {
      DEASSERT = 0 ,
      ASSERT = 1
    }
     Interrupt level. More...
     
    enum  TriggerMode {
      EDGE_TRIGGERED = 0 ,
      LEVEL_TRIGGERED = 1
    }
     Trigger mode for DeliveryMode::INIT_LEVEL_DEASSERT. More...
     
    enum  DestinationShorthand {
      NO_SHORTHAND = 0 ,
      SELF = 1 ,
      ALL_INCLUDING_SELF = 2 ,
      ALL_EXCLUDING_SELF = 3
    }
     Shorthand for commonly used destinations. More...
     
    enum  InterruptMask {
      UNMASKED = 0 ,
      MASKED = 1
    }
     Interrupt mask. More...
     

    Functions

    bool isDelivered ()
     Check if the previously sent IPI has reached its destination. More...
     
    void send (uint8_t destination, uint8_t vector)
     Send an Inter-Processor Interrupt (IPI) More...
     
    void sendGroup (uint8_t logical_destination, uint8_t vector)
     Send an Inter-Processor Interrupt (IPI) to a group of processors. More...
     
    void sendAll (uint8_t vector)
     Send an Inter-Processor Interrupt (IPI) to all processors (including self) More...
     
    void sendOthers (uint8_t vector)
     Send an Inter-Processor Interrupt (IPI) to all other processors (all but self) More...
     
    void sendInit (bool assert=true)
     Send an INIT request IPI to all other processors. More...
     
    void sendStartup (uint8_t vector)
     Send an Startup IPI to all other processors. More...
     

    Detailed Description

    Inter-Processor Interrupts.

    For multi-core systems, the LAPIC enables sending messages (Inter-Processor Interrupts, IPIs) to other CPU cores and receiving those sent from other cores.

    See also
    ISDMv3 10.6 Issuing Interprocessor Interrupts

    Class Documentation

    struct LAPIC::IPI::InterruptCommand.__unnamed54__

    I/O redirection-table entry.

    Every entry in the redirection table represents an external source of interrupts and has a size of 64 bits. Due to the I/O APIC registers being only 32 bits wide, the 64-bit value is split in two 32 bit values.

    Class Members
    Register value_low First, low-order register.
    Register value_high Second, high-order register.

    Enumeration Type Documentation

    enum LAPIC::IPI::DeliveryMode

    Delivery mode specifies the type of interrupt sent to the CPU.

    Enumerator
    FIXED 

    "ordinary" interrupt; send to ALL cores listed in the destination bit mask

    LOWEST_PRIORITY 

    "ordinary" interrupt; send to the lowest priority core from destination mask

    SMI 

    System Management Interrupt; vector number required to be 0.

    NMI 

    Non-Maskable Interrupt, vector number ignored, only edge triggered.

    INIT 

    Initialization interrupt (always treated as edge triggered)

    INIT_LEVEL_DEASSERT 

    Synchronization interrupt.

    STARTUP 

    Dedicated Startup-Interrupt (SIPI)

    enum LAPIC::IPI::DestinationMode

    Way of interpreting the value written to the destination field.

    Enumerator
    PHYSICAL 

    Destination contains the physical destination APIC ID.

    LOGICAL 

    Destination contains a mask of logical APIC IDs.

    enum LAPIC::IPI::DeliveryStatus

    Interrupt state.

    Enumerator
    IDLE 

    No activity for this interrupt.

    SEND_PENDING 

    Interrupt will be sent as soon as the bus / LAPIC is ready.

    enum LAPIC::IPI::Level

    Interrupt level.

    Enumerator
    DEASSERT 

    Must be zero when DeliveryMode::INIT_LEVEL_DEASSERT.

    ASSERT 

    Must be one for all other delivery modes.

    enum LAPIC::IPI::TriggerMode

    Trigger mode for DeliveryMode::INIT_LEVEL_DEASSERT.

    Enumerator
    EDGE_TRIGGERED 

    edge triggered

    LEVEL_TRIGGERED 

    level triggered

    enum LAPIC::IPI::DestinationShorthand

    Shorthand for commonly used destinations.

    Enumerator
    NO_SHORTHAND 

    Use destination field instead of shorthand.

    SELF 

    Send IPI to self.

    ALL_INCLUDING_SELF 

    Send IPI to all including self.

    ALL_EXCLUDING_SELF 

    Send IPI to all except self.

    enum LAPIC::IPI::InterruptMask

    Interrupt mask.

    Enumerator
    UNMASKED 

    Interrupt entry is active (non-masked)

    MASKED 

    Interrupt entry is deactivated (masked)

    Function Documentation

    bool LAPIC::IPI::isDelivered ( )

    Check if the previously sent IPI has reached its destination.

    Returns
    true if the previous IPI was accepted from its target processor, otherwise false
    void LAPIC::IPI::send ( uint8_t  destination,
    uint8_t  vector 
    )

    Send an Inter-Processor Interrupt (IPI)

    Parameters
    destinationID of the target processor (use APIC::getLAPICID(core) )
    vectorInterrupt vector number to be triggered
    void LAPIC::IPI::sendGroup ( uint8_t  logical_destination,
    uint8_t  vector 
    )

    Send an Inter-Processor Interrupt (IPI) to a group of processors.

    Parameters
    logical_destinationMask containing the logical APIC IDs of the target processors (use APIC::getLogicalLAPICID())
    vectorInterrupt vector number to be triggered
    void LAPIC::IPI::sendAll ( uint8_t  vector)

    Send an Inter-Processor Interrupt (IPI) to all processors (including self)

    Parameters
    vectorInterrupt vector number to be triggered
    void LAPIC::IPI::sendOthers ( uint8_t  vector)

    Send an Inter-Processor Interrupt (IPI) to all other processors (all but self)

    Parameters
    vectorInterrupt vector number to be triggered
    void LAPIC::IPI::sendInit ( bool  assert = true)

    Send an INIT request IPI to all other processors.

    Note
    Only required for startup
    Parameters
    assertif true send an INIT, on false send an INIT Level De-assert
    void LAPIC::IPI::sendStartup ( uint8_t  vector)

    Send an Startup IPI to all other processors.

    Note
    Only required for startup
    Parameters
    vectorPointer to a startup routine
    Friedrich-Alexander-Universität
    Erlangen-Nürnberg

    Schlossplatz 4
    91054 Erlangen
    • Impressum
    • Datenschutz
    • Barrierefreiheit
    • Facebook
    • RSS Feed
    • Xing
    Nach oben