A tarefa ociosa é usada para contabilidade de processo e também para reduzir o consumo de energia. No Linux, uma tarefa ociosa é criada para cada processador e bloqueada para esse processador; sempre que não houver outro processo para ser executado nessa CPU, a tarefa ociosa será agendada. O tempo gasto nas tarefas ociosas aparece como tempo "inativo" em ferramentas como top
. (O tempo de atividade é calculado de forma diferente.)
O Unix parece sempre ter um loop ocioso de algum tipo (mas não necessariamente uma tarefa ociosa real, consulte resposta de Gilles ), e mesmo em V1 usado uma instrução WAIT
que parou o processador até que ocorresse uma interrupção (significava “wait for interrupt”). Alguns outros sistemas operacionais usavam loops ocupados, DOS, OS / 2 , e versões antigas do Windows em particular. Por muito tempo agora, os processadores usaram esse tipo de instrução de "espera" para reduzir o consumo de energia e a produção de calor. Você pode ver várias implementações de tarefas ociosas, por exemplo, em arch/x86/kernel/process.c
no kernel Linux: o básico apenas chama HLT
, que pára o processador até que ocorra uma interrupção (e ativa o modo de economia de energia C1), as outras implementações lidam com vários erros ou ineficiências ( por exemplo usando MWAIT
em vez de HLT
em algumas CPUs).
Tudo isso é completamente separado dos estados ociosos nos processos, quando eles aguardam por um evento (I / O etc.).