UMBC CMSC 313 -- Interrupts Previous | Next


Interrupts

Generalities about Interrupts

An interrupt causes the computer to stop doing what it is doing, save the current state of the interrupted program and transfers control to an interrupt handler, which is in another program or the operating system. When it saves the state information, it must save all the of necessary information so that the interrupted program can resume without any indication of being interrupted. An interrupt is said to be transparent to the interrupted program. There are hardware and software interrupts. In general, interrupts can be viewed as a good thing, when the interrupts handlers are properly written and interrupts don't happen too often. Examples of when interrupts are used are: Each interrupt has an interrupt number which is communicated to the CPU in some whay by the causer of the interrupt. The number is used to index into a table of handler addresses, (vectored interrupts).

Interrupts can be enabled or disabled. There are some operations that can only take place reliably when interrupts are disabled, however disabling interrupts is not something that we want to happen indiscrimanately! Additionally, there are some interrupts that can not be disabled, such as caused by power failure or machine errors. We can disable some by changing a bit in a mask, and they are called maskable interrupts and the others are called non-maskable interrupts.

More than one interrupt can occur during the execution of an instruction. When this happens, at the end of the instruction, the CPU picks one interrupt to be serviced. The others are held until the end of another instruction, when another one will be serviced.

There are many ways to classify interrupts:

Interrupt Processing on the 80X86

There are 256 interrupts possible on the X86 computers. An interrupt can be either hardware or software. The hardware interrupts come from devices within the computer system. Software interrupts are caused to executing the instruction:
INTn;cause interrupt n
While in the user mode in Linux, we can only use INT 80h because this is a constraint imposed by the operating system so that we can have multiprocessing. Windows and DOS allow the applications access to all interrupts. In order to have more power, the DOS interrupt systems allowed sub-functions within a specific interrupt.

Interrupts can be enables or disable with the instructions:

sti ;set I flag to 1, enable
cli ;set I flag to 0, disable
Memory locations 0 - 1023 hold a four-byte address (segment:offset) in a interrupt vector table for each interrupt handler.

The interruption mechanism is:

  1. When an device wishes to cause an interrupt, it makes an interrupt request that includes the number of the interrupt. When arriving in the CPU it is held until the completion of the current instruction.
  2. At the end of each instruction, before the next instruction is fetched, the CPU checks to see if there are any interrupts waiting. If there is, one is selected for interrupt service and the others are held.
  3. The CPU does the following items:
    1. Push the flag register onto the stack
    2. Disable interrupts.
    3. Push the CS and IP registers.
    4. Load the address of the handler.
The rest is up to the specific interrupt handler, however, they should quickly reenable interrupts (which implies that the handler itself can be interrupted). Any other register will be used must first be pushed onto the stack. The handler then does what it is suppose to do. Finally, the handler must pop the saved registers, and issue a special return:
iret ;return from interrupt.
This will pop the IP, CS and flag registers, which will also reenable the interrupts.

The interrupt vector table is setup by the boot-up procedure in the BIOS when the computer starts up, setting addresses puter starts up, setting addresses of interrupt handlers for interrupts that the BIOS handles, and initializing the rest to a handler that consists of nothing but the iret instruction. This makes it easy to upgrade the handlers in future releases of the operating system or even to have a different operating system altogether. When the operating system loads, it puts in the address of its handlers where necessary. Additionally, the user can piggy-back on an interrupt, as we shall see.

WARNING: Since interrupts occur at any time, they wipe out anything that had been put onto the stack previously. Never assume that something you popped is still on the stack waiting for you!

A Short History of Interrupts

Early computers were purely uniprocessing. The CPU executed until I/O was required, and then cam a grinding halt until the I/O was complete. CPS's were very fast and expensive, operating at electronic speed while I/O devices were extremely slow and inexpensive, operating at mechanical speed. It became obvious that the I/O needed to be decoupled from computation.

With the introduction of the interrupt, I/O programming became much more complicated and the batch processing became popular. More and more demands were put on the system to increase productivity!

Certain operations became designated privileged. There were two states that the computer could operate in:

Privileged instructions could be executed only in the supervisor state. The way to get privileged operations was to interface to the kernel was through an approved API. The protected mode introduced with the 80286 was the first hardward to have the privileged instructions.


Previous | Next

©2005, Gary L. Burt