Es gibt noch einen weiteren Grund für das Selbst-IPI.
Wenn Sie einen SMI-Handler initialisieren, wird er zuerst auf eine niedrige Adresse in RAM gesetzt. Der gesamte CPU-Status wird im SMI gespeichert. Alle CPUs verwenden jedoch anfangs den gleichen Statusbereich und die neue verschobene Adresse wird durch Manipulation einer Statusvariablen festgelegt.
In diesem Fall möchten Sie den ersten SMI zu einer Zeit an eine CPU senden. Wenn Sie es an alle senden, werden alle denselben Bereich für die Speicherung des Status verwenden, und das wird eine Katastrophe sein.
Es ist praktisch, die gleiche Initialisierungsroutine für die SMI-Handler-Verlagerung für alle CPUs zu verwenden, damit Sie den SMI-Typ für die Eingabe des SMI-Verschiebungscodes mit dem Self-IPI verwenden können.
Der BSP kann den SMI IPI selbst und dann einen AP zu der Zeit senden. Sie werden dann nacheinander in nicht in Konflikt stehende Bereiche verlegt.
Ich bin sicher, dass es viele andere Situationen gibt, in denen ein Self-IPI benötigt wird. Wenn sich die CPUs wie in dem anfänglichen SMI-Zustand einen kritischen Bereich teilen, ist der Eigen-IPI für die Konsistenz motiviert.
Beide Gründe sind falsch, denke ich. Jeder logische Prozessor (also jeder Kern) hat seinen eigenen lokalen APIC. Dies bedeutet, dass nur ein Eigen-IPI von dem bestimmten Kern empfangen wird, der es gesendet hat.Zweitens gibt es eine spezielle Ziel-Kurzschrift, die zum Senden einer IPI an alle lokalen APICS in einem System, das sich selbst enthält, verfügbar ist. – jmiller
Bitte lesen Sie noch einmal, weil ich nur einen Grund für die Eigen-IPI (Konsistenz) und zwei Beispiele für die Konsistenz angegeben habe. –