2016-05-03 15 views
0
void cpu_idle (void) 
{ 
    /* endless idle loop with no priority at all */ 

    while (1) { 
     void (*idle)(void) = pm_idle; 
     if (!idle) 
      idle = default_idle; 
     if (!current->need_resched) 
      idle(); 
     schedule(); 
     check_pgt_cache(); 
    } 
} 

Dieser Code existierte in: "arch/i386/kernel/process.c" im Zusammenhang 2.4.18-14Änderung while (1) Schleife zu busy wait in Linux-Kernel

dieser Code auf Linux ist responsable der (CPU Leerlaufschleife).

die frage ist: kann ich die while (1) schleife mit bust warten?

+0

Bitte bearbeiten Sie Ihre Frage, um den Code anstelle eines Screenshots –

+0

@NoamHacker, fertig. –

+0

Presumaby, 'pm_idle' existiert, so dass Sie die Standard-Leerlauf-Handler-Funktion 'überschreiben' können, was wahrscheinlich den aufrufenden Prozessorkern anhält. Vermutlich könnten Sie "pm_wait" auf eine Funktion richten, die nichts außer return tut, und cpu_idle würde dann den Raum aufwärmen, indem sie fortwährend "schedule" und "check_pgt_cache" aufruft. Selbst wenn das 'funktioniert', warum jemand das tun möchte, ist über mich hinaus :( –

Antwort

1

Durch die Schleife werden Prozesse ordnungsgemäß geplant, damit das System ordnungsgemäß ausgeführt wird. Der Wechsel zu einer reinen Busy-Wartezeit würde das System sperren, wenn die CPU untätig wird, was bedeutet, dass andere Prozesse nicht mehr geplant werden würden. Das wollen Sie definitiv nicht.