Я среднюю загрузку считаю так: 1. Делаю 2 переменные-счетчика unsigned long cpu_idle; и unsigned long cpu_task;.
2. Делаю указатель на unsigned long *cpu_tick;
3. В задаче с системными тиками делаю ( *cpu_tick )++;
4. В менеджере задач, при переключении на "idle-задачу" делаю cpu_tick = &cpu_idle;, а при переключении на другие задачи cpu_tick = &cpu_task;
Ну а дальше - дело техники.