Which Stack Is Used by Interrupt Handler - Linux

Which stack is used by Interrupt Handler - Linux

All interrupts are handled by kernel. That is done by interrupt handler written for that particular interrupt. For Interrupt handler there is IRQ stack. The setup of an interrupt handler’s stacks is configuration option. The size of the kernel stack might not always be enough for the kernel work and the space required by
IRQ processing routines. Hence 2 stack comes into picture.

  1. Hardware IRQ Stack.
  2. Software IRQ Stack.

In contrast to the regular kernel stack that is allocated per process, the two additional stacks are allocated per CPU. Whenever a hardware interrupt occurs (or a softIRQ is processed), the kernel needs to switch to
the appropriate stack.
Historically, interrupt handlers did not receive their own stacks. Instead, interrupt handlers would share the stack of the running process, they interrupted. The kernel stack is two pages in size; typically, that is 8KB on 32-bit architectures and 16KB on 64-bit architectures. Because in this setup interrupt handlers share the stack, they must be exceptionally frugal with what data they allocate there. Of course, the kernel stack is limited to begin with, so all kernel code should be cautious.

Interrupt Handler time accounting

Executing an hardware-interrupt handler would mean that the process is pre-empted.

However the pre-empted process is not suspended, it remains in the TASK_RUNNING state; it simply no longer uses the CPU (which will be busy executing the Interrupt Service Routine)[1].

The time spent executing the ISR will count towards the interrupted process and hence the terminology that the ISR "steals" time from the process.

The following implementation of a simple kernel illustrates this in detail.



Related Topics



Leave a reply



Submit