My thoughts:
Suppose two applications are running in parallel in Linux x86 (multi-tasking), and they both share keyboard peripheral. if I press a button on keyboard, interrupt occurs and control has to switch to corresponding interrupt routine. The starting address of interrupt routine for an interrupt source is obtained from Interrupt vector table which is already defined from 0x0000. But two applications may need different routines for the same keyboard interrupt. So the routine to be executed should depend on from which task it was actually interrupted.
So does this mean that two separate interrupt vector tables have to be kept for both processes and they are loaded by kernel while processes switch on time slices???