A latência será um dos motivos. O atraso entre "disco me dá esses dados que eu preciso antes que eu possa fazer qualquer outra coisa" e o tempo que os dados retornam deixará a CPU inativa por esse tempo.
Os recursos provavelmente são executados em 100%, mas por períodos muito breves. A inicialização do sistema operacional seguirá o padrão geral de "processar ou decidir algo, buscar algo do disco, fazer algo na memória, fazer algo com um dispositivo", repetindo várias vezes por segundo. Então, quando você vê um disco a 25% em um período de 2 segundos, isso provavelmente significa que ele estava funcionando a 100% por 0,5 segundos e depois ocioso o resto do tempo.
Como o EEAA apontou, sistemas multicore tornam isso um pouco mais complexo. Um software de thread único em uma CPU que pode executar quatro threads só pode atingir 25% em velocidade máxima. Mesmo o software multithreaded raramente atinge 100%, porque os dados precisam fluir (geralmente) do disco rígido para a RAM, para o cache, para a CPU. Manter esse pipeline cheio é difícil e tende a acontecer principalmente com cargas de trabalho previsíveis, como a codificação de vídeo. Nesse caso, o sistema operacional pode observar padrões de leitura e recuperar dados antes de serem necessários, colocando-os em caches apropriados, como o cache de disco na RAM.