O percentual de uso do processador é calculado com "o quantidade de tempo que o processador não está em inatividade ". Quero dizer, este calc é feito de um contador que registra o uso do processo de execução "inativo". Enquanto outro processo "rouba" a energia do processador do processo ocioso, o registro de consumidor do processador ocioso é diminuído por um fator; como a linha do tempo é fixa e constante, a (1 - "% de tempo nas idle taks") é a quantidade de carga do processador usada para todos os processos em execução em um processador:
DefinindoautilizaçãodaCPU
Forourpurposes,IdefineCPUutilization,U,astheamountoftimenotintheidletask,asshowninEquation1.
Theidletaskisthetaskwiththeabsolutelowestpriorityinamultitaskingsystem.Thistaskisalsosometimescalledthebackgroundtaskorbackgroundloop,showninListing1.Thislogictraditionallyhasawhile(1)typeofloop.Inotherwords,aninfiniteloopspinstheCPUwaitingforanindicationthatcriticalworkneedstobedone.
Listagem1:Exemplosimplesdeumloopdeplanodefundo
intmain(void){SetupInterrupts();InitializeModules();EnableInterrupts();while(1)/*endlessloop-spininthebackground*/{CheckCRC();MonitorStack();...doothernon-timecriticallogichere.}}
Thisdepictionisactuallyanoversimplification,assome"real" work is often done in the background task. However, the logic coded for execution during the idle task must have no hard real-time requirements because there's no guarantee when this logic will complete. In fact, one technique you can use in an overloaded system is to move some of the logic with less strict timing requirements out of the hard real-time tasks and into the idle task.