I have noticed that on a (linux) system if there are many processes in "D" (Uninterruptible) state, the system starts "hanging". The D state is mostly due to process waiting on I/O.
By "hang" I mean that, I can't type commands on the console or starting new processes is very slow, leading me to believe that the cpu is "busy" doing something. But my understanding is that a process in D state is not doing anything, but just waiting. This should need any cpu computation and in fact free the cpu and let it schedule other tasks.
I'm definitely missing something, cause the D state processes also add to the load average of a system. I don't understand why this is done, how does a process in uninterruptible sleep contribute to load?