Operationally we can distinguish between two levels of interrupt handling, namely that supported by the architecture and visible from the object code (or assembler language) level and that which is visible from a higher-level language.