handler() { if (user mode) { process_data[pid] = stored registers from kernel stack } else { handler_stack.push(stored registers from kernel stack) } do; work; for; this; interrupt if (user mode) { resume user mode longjmp(process_data[pid]) } else { longjmp(handler_stack.pop()) } }