A questão não está clara se você quer saber porque todos os núcleos não estão sendo utilizados, ou porque você tem alguns em 100%.
Um aplicativo determina quantos núcleos ou threads ele usará. A maioria dos aplicativos é de encadeamento único e usa apenas um núcleo. Isso é para que todas as operações ocorram na ordem esperada. Por exemplo, se a + b = c e c + d = e forem passados para 2 núcleos diferentes, como você saberia o que c é quando processando c + d = e se a + b = c não tiver sido concluída?
Você pode usar o comando top para visualizar quais aplicativos estão usando esses núcleos.