Dies ist eine rein konzeptionelle Frage. Warum wechseln die OS-Aufgaben nicht immer dann, wenn ein Zweig, der nie ausgeführt wurde, auftritt? Die dynamische Verzweigungsvorhersage funktioniert nur mit Verzweigungen, die in der Vergangenheit erstellt wurden, und die statische Verzweigungsvorhersage ist nur in bestimmten Szenarien korrekt. Wenn Sie keine Daten zu einer Verzweigung haben, scheint es, als sollten das Betriebssystem und der Prozessor damit beginnen, eine separate Aufgabe in die Pipeline zu schreiben, anstatt die Verzweigung blind zu erraten. Dann können Sie das Ergebnis der Verzweigung berechnen und diese Verzweigung ausführen, wenn die ursprüngliche Aufgabe erneut geplant wird. Beim nächsten Auftreten der Verzweigung kann der Prozessor die dynamische Vorhersage verwenden.Warum planen Betriebssysteme keine neue Aufgabe, wenn eine unbekannte Verzweigung auftritt?
Gibt es einen Grund, warum diese Methode nicht verwendet wird? Oder wird es benutzt und ich bin mir nur nicht bewusst?
Ich bin nicht vertraut mit, wie ein Scheduler funktioniert. Entsteht der Overhead, wenn der Prozessor in den richtigen Zustand versetzt werden muss, um eine andere Aufgabe wieder aufzunehmen? – master565
Der Prozessor muss den vollständigen Status des Prozesses (oder Threads) speichern, dh alle Register, die den Status definieren. Dann muss er die Register für die neue Task laden. Das entspricht 20-30 Bewegungsbefehlen. – user3344003
Das macht Sinn. Ich denke, der einzige mögliche Weg wäre es wert, wenn Sie eine wahnsinnig große Pipeline hätten, die einen größeren Flush-Overhead hätte als der Kontext-Switching-Overhead. Danke für die Antwort! – master565