Ist die Pufferung des Primärspeichers die einzige Möglichkeit, auf E/A-Geräte und Sekundärspeicher zuzugreifen?

Ich bin mir nicht sicher, ob dies die richtige Stack-Exchange-Site ist, um diese Frage zu stellen. Tut mir leid, wenn dies nicht der Fall ist. Wenn jemand ein gutes Buch zitieren kann, das Computerarchitektur im Allgemeinen erklärt (nicht für einen bestimmten Computer), wäre das hilfreich.

Die Frage ist, ob auf eine Festplatte von der CPU zugegriffen wird, indem zuerst ein Datenblock von der Festplatte in den RAM übertragen wird und die CPU ihn dann aus dem RAM liest. Das gleiche passiert mit Ein- und Ausgabegeräten, wo RAM immer ein Zwischenspeicher für alle Datenübertragungen außerhalb des Primärspeichers ist. Ist dies der Fall?

Dies ist die Elektrotechnik-Site, also nicht der richtige Ort. Für "große" Allzweck-Rechensysteme werden solche Daten jedoch normalerweise gepuffert. Auf kleinen Systemen mit begrenzten Ressourcen wie Mikrocontrollern verbrauchen Puffer viel wertvollen RAM, sodass Daten oft Byte für Byte verarbeitet werden. Normalerweise sind diese Prozessoren nicht mit Geräten verbunden, die die Übertragung eines ganzen Puffers auf einmal erfordern, wie dies bei Festplattenlaufwerken normalerweise der Fall ist.
Gibt es eine bessere Stack-Austauschseite für diese Frage? Sie alle scheinen sich auf den Programmieraspekt von Computern zu konzentrieren.

Antworten (2)

Da dies eine Website für Elektrotechnik ist, werde ich versuchen, eine niedrigere Perspektive zu geben.

Jedes Gerät, wie z. B. ein Festplattencontroller, muss über eine Möglichkeit zum Übertragen von Daten verfügen. Dies könnte ein paralleler Datenbus oder ein serieller sein, es könnte durch Funkwellen oder sogar durch von Menschen gelesene LEDs und von Menschen eingestellte DIP-Schalter erfolgen (wodurch nicht unbedingt eine CPU benötigt wird). Da stellt sich die Frage: Wie schließe ich ein Gerät am besten an die CPU an? Sie könnten das Gerät dazu bringen, auf dem CPU-Adressbus nach einer bestimmten Adresse zu suchen, und es würde dann nur dann Daten senden oder empfangen, wenn die CPU diese Adresse liest oder schreibt. Dadurch würde RAM vollständig übersprungen, sodass die CPU Daten direkt vom Gerät in ein Prozessorregister kopieren kann. Natürlich müssten Sie in Ihrer Architektur sicherstellen, dass es keine Konflikte gibt und dass der RAM nicht auch auf die Anfrage reagiert, die eine Buskollision erzeugt. Um das zu vermeiden, Sie könnten Ihrer CPU-Architektur eine spezielle E / A-Leitung hinzufügen, die zum Lesen und Schreiben von Geräten bestimmt ist und den RAM deaktiviert. Sie könnten der CPU-Architektur sogar einen speziellen IO-Bus hinzufügen, wenn Sie möchten.

So viele Geräte waren in den frühen Tagen (dh in den 1970er und 80er Jahren) tatsächlich an die CPU angeschlossen. Betrachten Sie jedoch eine Festplatte und ihre typische Verwendung. Typischerweise manipuliert ein Prozessor Daten, die in Registern gespeichert sind, aber Register sind nicht sehr groß, sodass für große Datenmengen RAM als Hochgeschwindigkeitsort zum Speichern von Daten verwendet wird. Dafür wäre die Festplatte zu langsam. Sollen diese Daten jedoch dauerhaft gespeichert werden, müssen die Daten vom RAM auf die Festplatte übertragen werden. Mit der oben angegebenen Methode müsste die CPU ständig damit beschäftigt sein, Byte für Byte die Daten zu übertragen, die sie auf der Festplatte speichern möchte. Dies erwies sich in den frühen Tagen als ziemlich schmerzhaft, daher wurde ein Mechanismus namens Direct Memory Access (DMA) entwickelt, mit dem Geräte direkt aus dem RAM lesen und schreiben können. Die CPU könnte beispielsweise einfach einen Befehl an den Festplattencontroller senden, um einen Teil der Festplatte zu lesen und in den Arbeitsspeicher zu legen oder umgekehrt. Die CPU wäre dann frei, andere Dinge zu tun, während die HD ihre Arbeit erledigte. Die Übertragung war auch viel schneller als die alte CPU-basierte Methode.

Um Ihre Frage zu beantworten: Gibt es andere Möglichkeiten, Geräte zu verbinden? Absolut! Aber Sie werden feststellen, dass der schnellste Weg, große Datenmengen von einem Gerät zu übertragen, nicht über den Prozessor, sondern direkt vom Gerät in den Arbeitsspeicher führt, daher verwenden die meisten modernen Geräte den Arbeitsspeicher als Zwischenspeicher.

"Aber weil die CPU ständig gebunden sein müsste, nur um große Datenblöcke von Geräten in den Arbeitsspeicher zu übertragen." Was meinten Sie damit? Warum sollte die CPU ständig damit beschäftigt sein, große Datenblöcke in den Arbeitsspeicher zu übertragen? Hast du immer noch davon gesprochen, den RAM nicht einzubeziehen?
@mtanti Ich habe die Antwort aus Gründen der Klarheit in dieser Angelegenheit bearbeitet. Grundsätzlich ist RAM der nützlichste Bereich, um große Datenmengen zu manipulieren, und als solche landen Daten von Geräten normalerweise sowieso dort, daher die Erstellung von DMA, obwohl dies nicht unbedingt erforderlich ist.
Großartig! Hast du eine Quelle, aus der ich weitere Informationen dazu entnehmen kann?

Es ist nicht unbedingt so; Bei einfachen Mikrocontrollern oder alten Computern wie den beliebten Mikrocomputern der 80er Jahre werden die Peripheriegeräte direkt an die Adress- und Datenbusse angeschlossen, ohne die Daten im Zwischenspeicher zu speichern. Es kann eine zusätzliche Adressdecodierungsleitung geben, um zwischen Speicher und Peripheriegeräten zu unterscheiden, mit entsprechenden Anweisungen wie dem IN/OUT von x86.

Was ist mit Sekundärspeichern wie Festplatten? Wird auf diese unbedingt über den RAM zugegriffen?
In jedem modernen oder großen Design, ja. In alten Mikrocomputern nein; Beispielsweise las die ZX-Spektrumbandschnittstelle der CPU das "neueste" Byte von einer E / A-Adresse und speicherte es dann an der "nächsten" Adresse, an die es geladen wurde.
Ich dachte, das ist der Grund, warum es "Sekundärspeicher" genannt wird, weil Sie nur über den "Primärspeicher" auf die darin enthaltenen Daten zugreifen können, da der Primärspeicher vor dem Sekundärspeicher steht. Hat die Formulierung nichts damit zu tun, wie darauf zugegriffen wird?
Es hat mehr mit Priorität und Nähe zu tun : Auf den Primärspeicher kann fast sofort zugegriffen werden, der Sekundärspeicher hat mehr Platz, dauert aber viel länger für den Zugriff. Ich habe von "Tertiärspeicherung" in Bandbibliotheken gehört, wo es einen riesigen Speicher gibt, aber es kann eine Latenzzeit von mehreren Minuten geben, bis ein Roboter das Band findet und lädt.
@mtanti: Selbst wenn die Daten im Sekundärspeicher den Prozessor durchlaufen müssen, bevor sie in den RAM gelangen, werden sie im Allgemeinen im RAM gespeichert, bevor der Prozessor etwas "Nützliches" damit machen kann. Beispielsweise erfordert das Apple II-Diskettenlaufwerk, dass der Prozessor jedes Datenbyte innerhalb von sieben Taktzyklen lesen muss, wenn es verfügbar wird, und dieses Sieben-Zyklus-Fenster kann nur 20 Taktzyklen nach dem Lesen des vorherigen Bytes beginnen. Die einzige Möglichkeit, etwas Nützliches mit den Daten auf der Diskette zu tun, besteht darin, einen Haufen in den RAM zu lesen und dann dort darauf zu reagieren.