uCLinux: Processes in kernel
Processes can be classified as either I/O-bound or processor-bound. As the name suggests, the former is a process where much of the time is spent in waiting for relatively slow I/O operations to complete. For instance, a process taking input for a word processor will be I/O-bound as it spends most of its time waiting for characters input. Such a process is runnable for only short duration, because it is eventually blocked to wait for more I/O.
On the other hand, processor-bound process spends most of the time utilizing processor to perform computation. One of the examples include programs that perform a lot of mathematical calculations, i.e. MATLAB. This type of process tends to run until they are preempted, owing to its behavior that they do not block on I/O requests very often.
It is not always clear whether a process should be considered CPU or I/O bound, because processes can exhibit both behaviors simultaneously. The X Window server, for example, is both processor and I/O-intense. Other processes can be I/O-bound but intense processing can also happened at some time instance. As the result, the scheduling policy in a system must attempt to satisfy two conflicting goals: low latency and high throughput. To satisfy these requirements, schedulers often employ complex algorithms to determine the most worthwhile process to run while not compromising fairness to other, lower priority, processes.
Linux is aimed to provide good interactive response, and so it is optimized for favoring I/O-bound processes over processor-bound processes. Linux scheduling policy give programs that deal with human interaction a higher priority, since lack of speed and responsiveness is more likely to be observed when a human is expecting an immediate response than when a human is waiting for some large job to finish. Furthermore, the system gives higher priority to I/O-bound programs because it usually time consuming, and it is beneficial to get them started as early as possible.