previous | start | next

Deferred Processing

void TopLevelInterruptHandler(int dev) {
  InterruptVector[dev](); // call appropriate handler
  if (PreviousContext == ThreadContext) {
    UnMaskInterrupts();
    while(!Empty(WorkQueue)) {
      Work = DeQueue(WorkQueue);
      Work();
    }
  }
}

void NetworkInterruptHandler() {
  // deal with interrupt
  
  EnQueue(WorkQueue, MoreWork);
}
      
   

We'll come back to this, but for now look at signal handling which is simpler but has some of the same characteristics.



previous | start | next