Wie viele Stapel enthält ein Prozessor?

432
Darien Springer

Ich lerne in meiner Klasse Betriebssysteme über CPU- und Speicherinteraktionen und bin darüber verwirrt, wie der Speicherstapel funktioniert. Ich verstehe, dass der Stack jeweils eine Zeile nach unten geht und entweder die Daten im Akkumulator speichert oder eine Anweisung an die IR sendet.

Meine Frage ist: Hat jeder Prozess einen eigenen Speicherstack oder hat jeder Prozessor einen riesigen Speicherstapel, der ständig zwischen verschiedenen Prozessen wechselt (und gelegentlich durch E / A-Aufrufe unterbrochen wird)? Wenn es einen gigantischen Stack gibt, gibt es nur einen Stack, weil die meisten modernen Prozessoren so viele Anweisungen pro Sekunde ausführen können, dass es so aussieht, als würden Prozesse für unsere langsamen menschlichen Gehirne gleichzeitig ausgeführt.

-2

1 Antwort auf die Frage

2
Austin Hemmelgarn

Die meisten modernen CPUs verfügen technisch gesehen über keinen Hardware-Stack (dh, es wird kein dedizierter Speicher nur für den Stack verwendet, vor allem, weil er ineffizient ist und Sie nicht genau wissen können, wie viel Speicherplatz Sie auf einem realen System benötigen). Fast alle haben jedoch ein Stack-Pointer-Register, das von Anweisungen verwendet wird, die auf dem Stack arbeiten. Jeder Prozess hat jedoch immer noch seinen eigenen Stack (in der Regel mindestens zwei Stacks, was jedoch in die Feinheiten der Privilegientrennung zwischen Betriebssystem und Benutzerprogramm gerät und für die Frage nicht völlig relevant ist), aber das Stackzeigerregister wird von allen Prozessen gemeinsam genutzt (dieses Register ist Teil dessen, was bei einem Kontextwechsel zusammen mit dem Rest des CPU-Status gespeichert und wiederhergestellt wird).

Um die zweite Hälfte Ihrer Frage etwas unverblümt zu beantworten, ist Multitasking eine Illusion, es hängt nur von der Skala ab. Jeder einzelne CPU-Kern kann jeweils einen Prozess ausführen und wechselt (normalerweise) zwischen allen Prozessen auf dem System, die nicht auf Frequenzen warten, deren Frequenzen hoch genug sind, damit sie aus einer menschlichen Perspektive gleichzeitig funktionieren (die meisten arbeiten) Systeme mit Prozessen mit einer Geschwindigkeit von 100 bis 1000 Mal pro Sekunde, was immer noch mehr als genug Zeit ist, um Hunderte Millionen CPU-Anweisungen in jedem Prozess auszuführen. Wenn man dies etwas anders betrachtet, ist eine Single-Core-CPU wie eine Person, sie muss ihren Fokus regelmäßig auf "Multitasking" ändern, und eine Multi-Core-CPU ist wie ein Team von Leuten, jede Person kann nur eine Sache tun zu einem Zeitpunkt zuverlässig, aber als Ganzes betrachtet,

Für die Zwecke Ihrer Klasse ist dies alles jedoch irrelevant (wenn die Klasse mit einem minimalistischen Betriebssystem wie CP / M oder DOS unterrichtet wird, das kein Multitasking ausführt und daher nur einen einzigen Stapel oder Punkt hat) zu gegebener Zeit abgedeckt werden (wenn es unter Verwendung eines echten Betriebssystems wie UNIX, MINIX oder sogar eines der verschiedenen modernen kommerziellen Angebote unterrichtet wird, die alle Multitasking-Aufgaben erfüllen, die häufig gegen Ende der Klasse behandelt werden, da das Verstehen sie erfordert Grundlagen (wie ein Stack funktioniert)).

Ich muss es nicht gut formuliert haben, aber was ich zu fragen versuchte, ist, da eine CPU jeweils nur einen Prozess ausführen kann, bedeutet das, dass jeder dieser Prozesse im selben Stack platziert wird? Darien Springer vor 7 Jahren 0
@ DavidSpringer Ah, Entschuldigung, das habe ich falsch verstanden. Die kurze Antwort lautet nein, jeder Prozess hat seinen eigenen Stapel, aber der Stapelzeiger ist Teil des Prozessorkontexts, der während eines Kontextwechsels gespeichert und wiederhergestellt wird. Austin Hemmelgarn vor 7 Jahren 1