You would also want a 'waiting' state. When a process is waiting for some I/O input or input from another process, it would move to the waiting state and another process could run while it is waiting.
This might help you some: http://people.csail.mit.edu/rinard/osnotes/h6.html