Aux dernières nouvelles, c'est fait par défaut sous Linux depuis la nuit des temps: les versions 1.0 mettaient déjà le CPU en idle lorsque le scheduler ne trouvait pas de processus à exécuter.
--
Il est intéressant d'aller faire un tour et un grep sur idle dans la partie correspondante des sources du noyau, dans arch/i386/kernel par exemple.
-- Dans un noyau 2.2 par exemple on a dans process.c :
/*
* The idle loop on a uniprocessor i386..
*/
static int cpu_idle(void *unused)
{
int work = 1;
unsigned long start_idle = 0;
/* endless idle loop with no priority at all */
current->priority = 0;
current->counter = -100;
for (;;) {
if (work)
start_idle = jiffies;
if (acpi_idle && (jiffies - start_idle > HARD_IDLE_TIMEOUT))
acpi_idle();
else {
if (boot_cpu_data.hlt_works_ok && !hlt_counter && !current->need_resched)
__asm__("hlt");
}
work = current->need_resched;
schedule();
check_pgt_cache();
}
}
# Re: CPU Idle && Linux
Posté par Sébastien Koechlin . En réponse au journal CPU Idle && Linux. Évalué à 7.
/* * The idle loop on a uniprocessor i386.. */ static int cpu_idle(void *unused) { int work = 1; unsigned long start_idle = 0; /* endless idle loop with no priority at all */ current->priority = 0; current->counter = -100; for (;;) { if (work) start_idle = jiffies; if (acpi_idle && (jiffies - start_idle > HARD_IDLE_TIMEOUT)) acpi_idle(); else { if (boot_cpu_data.hlt_works_ok && !hlt_counter && !current->need_resched) __asm__("hlt"); } work = current->need_resched; schedule(); check_pgt_cache(); } }