Interrupts and Exceptions:
Interrupts represent only asynchronous interrupts, and exceptions represent synchronous interrupts, so system calls are exception handling, not interrupt processing.
Here the exception handling is can sleep block, because the exception processing required data is stored in the exception stack, and each process has an exception stack, so exception handling and process is associated, so that the exception processing can block, be dispatched out???
Synchronous interrupts (such as system calls, page faults) are representative of the current process, which can be block. My understanding is that the interruption is not associated with any process, if it is block, then its context must be saved to resume execution, but how to restore it to execute it? You can only set the state of the process that is running at that moment to block, and so on, to reschedule. This is obviously unreasonable for the process: I run well, you interrupt the priority high, then I can let you run, you are finished if the dispatch does not occur, then I run. But why would you interrupt the block to put me in the opposite block, the system call can be block because it is associated to a specific process. Is the process itself is not satisfied with the request, then should be block.
Http://bbs.chinaunix.net/thread-2115820-2-1.html
http://blog.csdn.net/lanmanck/article/details/7282667
Linux interrupts and abnormal sleep problems