• 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
      • Eingebettete Systemsoftware
      • 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 2024/25
      • Betriebssysteme
      • Middleware – Cloud Computing
      • Systemprogrammierung 2
      • Verlässliche Echtzeitsysteme
      • Virtuelle Maschinen
      • Web-basierte Systeme
    Portal Lehre
  • Examensarbeiten
  1. Startseite
  2. Extern

Extern

Bereichsnavigation: Lehre
  • Betriebssysteme
    • Vorlesung
      • Folien
    • Übung
      • Seminar
      • Aufgaben
      • Aufgabe 0: C++ Streams
        • Aufgabe 1: Ein-/Ausgabe
          • Aufgabe 2: Unterbrechungen
            • Aufgabe 3: Pro-/Epilog
              • Aufgabe 4: Kontextwechsel
                • Aufgabe 5: Zeitscheiben
                  • Aufgabe 6: Synchronisation
                    • Aufgabe 7: Anwendung
                      • Assembler Crashkurs
                        • C++ Crashkurs
                          • Entwicklungsumgebung
                            • FAQ
                              • Ruhmeshalle
                              • Evaluation

                              Aufgabe 2: Unterbrechungen

                              • Core
                              • Interrupt
                              Enumerations | Functions | Constants
                              Core::Interrupt Namespace Reference

                              Exception and Interrupt control. More...

                              Enumerations

                              enum  Vector {
                                DIVISON_BY_ZERO = 0 ,
                                DEBUG = 1 ,
                                NON_MASKABLE_INTERRUPT = 2 ,
                                BREAKPOINT = 3 ,
                                OVERFLOW = 4 ,
                                BOUND_RANGE_EXCEEDED = 5 ,
                                INVALID_OPCODE = 6 ,
                                DEVICE_NOT_AVAILABLE = 7 ,
                                DOUBLE_FAULT = 8 ,
                                INVALID_TSS = 10 ,
                                SEGMENT_NOT_PRESENT = 11 ,
                                STACK_SEGMENT_FAULT = 12 ,
                                GENERAL_PROTECTION_FAULT = 13 ,
                                PAGE_FAULT = 14 ,
                                FLOATING_POINT_EXCEPTION = 16 ,
                                ALIGNMENT_CHECK = 17 ,
                                MACHINE_CHECK = 18 ,
                                SIMD_FP_EXCEPTION = 19 ,
                                EXCEPTIONS = 32 ,
                                TIMER = 32 ,
                                KEYBOARD = 33 ,
                                GDB = 35 ,
                                MOUSE = 44 ,
                                PANIC = 99 ,
                                ASSASSIN = 100 ,
                                WAKEUP = 101 ,
                                VECTORS = 256
                              }
                               List of used interrupt vectors. More...
                               

                              Functions

                              bool isEnabled ()
                               Check if interrupts are enabled on this CPU. More...
                               
                              void enable ()
                               Allow interrupts. More...
                               
                              bool disable ()
                               Forbid interrupts. More...
                               
                              void restore (bool val)
                               Restore interrupt. More...
                               

                              Constants

                              const uintptr_t FLAG_ENABLE = 1 << 9
                               Bit in FLAGS register corresponding to the current interrupt state.
                               

                              Detailed Description

                              Exception and Interrupt control.

                              See also
                              ISDMv3, Chapter 6 Interrupt and Exception Handling

                              Enumeration Type Documentation

                              enum Core::Interrupt::Vector

                              List of used interrupt vectors.

                              The exception vectors from 0 to 31 are reserved for traps, faults and aborts. Their behavior is different for each exception, some push an error code, some are not recoverable.

                              The vectors from 32 to 255 are user defined interrupts.

                              See also
                              ISDMv3, 6.15 Exception and Interrupt Reference
                              Todo:
                              Add Panic vector
                              Optional:
                              Add interrupt vector for mouse
                              Enumerator
                              DIVISON_BY_ZERO 

                              Divide-by-zero Error (at a DIV/IDIV instruction)

                              DEBUG 

                              Debug exception.

                              NON_MASKABLE_INTERRUPT 

                              Non Maskable Interrupt.

                              BREAKPOINT 

                              Breakpoint exception (used for debugging: GDB_Stub)

                              OVERFLOW 

                              Overflow exception (at INTO instruction)

                              BOUND_RANGE_EXCEEDED 

                              Bound Range Exceeded (at BOUND instruction)

                              INVALID_OPCODE 

                              Opcode at Instruction Pointer is invalid (you probably shouldn't be here)

                              DEVICE_NOT_AVAILABLE 

                              FPU/MMX/SSE instruction but corresponding extension not activate

                              DOUBLE_FAULT 

                              Exception occurred while trying to call exception/interrupt handler.

                              INVALID_TSS 

                              Invalid Task State Segment selector (see error code for index)

                              SEGMENT_NOT_PRESENT 

                              Segment not available (see error code for selector index)

                              STACK_SEGMENT_FAULT 

                              Stack segment not available or invalid (see error code for selector index)

                              GENERAL_PROTECTION_FAULT 

                              Operation not allowed (see error code for selector index)

                              PAGE_FAULT 

                              Operation on Page (r/w/x) not allowed for current privilege (error code + cr2)

                              FLOATING_POINT_EXCEPTION 

                              x87 FPU error (at WAIT/FWAIT), accidentally Core::CR0_NE set?

                              ALIGNMENT_CHECK 

                              Unaligned memory access in userspace (Exception activated by Core::CR0_AM)

                              MACHINE_CHECK 

                              Model specific exception.

                              SIMD_FP_EXCEPTION 

                              SSE/MMX error (if Core::CR4_OSXMMEXCPT activated)

                              EXCEPTIONS 

                              Number of exceptions.

                              TIMER 

                              Periodic CPU local LAPIC::Timer interrupt.

                              KEYBOARD 

                              Keyboard interrupt (key press / release)

                              GDB 

                              Inter-processor interrupt to stop other CPUs for debugging in GDB.

                              MOUSE 

                              Mouse movement

                              PANIC 

                              Panic interrupt to stop CPU (default value for IOAPIC devices)

                              ASSASSIN 

                              Inter-processor interrupt to immediately stop threads running on other CPUs.

                              WAKEUP 

                              Inter-processor interrupt to WakeUp sleeping CPUs.

                              VECTORS 

                              Number of interrupt vectors.

                              Function Documentation

                              bool Core::Interrupt::isEnabled ( )
                              inline

                              Check if interrupts are enabled on this CPU.

                              This is done by pushing the FLAGS register onto stack, reading it into a register and checking the corresponding bit.

                              Returns
                              true if enabled, false if disabled
                              void Core::Interrupt::enable ( )
                              inline

                              Allow interrupts.

                              Enables interrupt handling by executing the instruction sti. Since this instruction is delayed by one cycle, an subsequent nop is executed (to ensure deterministic behavior, independent from the compiler generated code)

                              A pending interrupt (i.e., those arriving while interrupts were disabled) will be delivered after re-enabling interrupts.

                              See also
                              ISDMv2, Chapter 4. STI - Set Interrupt Flag
                              bool Core::Interrupt::disable ( void  )
                              inline

                              Forbid interrupts.

                              Prevents interrupt handling by executing the instruction cli. Will return the previous interrupt state.

                              Returns
                              true if interrupts were enabled at the time of executing this function, false if they were already disabled.
                              See also
                              ISDMv2, Chapter 3. CLI - Ckear Interrupt Flag
                              void Core::Interrupt::restore ( bool  val)
                              inline

                              Restore interrupt.

                              Restore the interrupt state to the state prior to calling disable() by using its return value.

                              Note
                              This function will never disable interrupts, even if val is false! This function is designed to allow nested disabling and restoring of the interrupt state.
                              Parameters
                              valif set to true, interrupts will be enabled; nothing will happen on false.
                              Friedrich-Alexander-Universität
                              Erlangen-Nürnberg

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