[ < ] [ globale Übersicht ] [ Kapitelübersicht ] [ Stichwortsuche ] [ > ]


Kapitel 2.4
Speicher


Speicher: (Erklärung der Diskrepanz zwischen steigender Prozessorleistung und fast gleichbleibender Speicherkapazität.) Der Hauptspeicher ist ein wichtiges Faktor bei der Beurteilung der Leistung eine Systems. Durch die enorme Wichtigkeit wird in diesem Sektor starke Forschung betrieben.

Für die Abarbeitung einer Instruktion sind unter Umständen mehrere Speicherzugriffe, also Laden bzw. Zwischenspeichern von Daten, Operanden oder Befehlscodes, erforderlich. Problem der Computerentwicklung ist es, daß die Zugriffszeiten auf den Hauptspeicher bei weitem nicht so rasch abnehmen, wie die Prozessorleistung steigt, da die Erhöhung der Integrationsdichte und somit der Speicherkapazität eine weitere wichtige Anforderung ist. Die Steigerung der Kapazität der Speicherbausteine von etwa 60 % pro Jahr. Allerdings wirkt sich jede Erhöhung der Speicherkapazität eines Speicherbausteins nachteilig auf dessen Zugriffsgeschwindigkeit aus. Der erhöhte Adressieraufwand macht die durch Steigerung der Transistorschaltgeschwindigkeit erzielte Verringerung der Zugriffszeiten weitgehend zunichte.

Zunahme der Zugriffsgeschwindigkeit bei den Speicherbausteinen etwa 6 % pro Jahr, bei der Prozessorleistung steigt die Leistung um 100 % pro Jahr. Etwaige Lösungsmöglichkeiten sind unter anderem immer breitere Datenbusse zwischen Prozessor und Speichern, wodurch mehrere Speicherworte gleichzeitig zwischen Prozessor und Speicher übertragen werden können. Auch die Abarbeitung von Speicherzugriffen nach dem Pipeline-Prinzip ermöglicht eine Durchsatzsteigerung bei den Speicherzugriffen.

Für den Software-Entwickler, der an der Leistungsoptimierung von Programmen der Numerischen Datenverarbeitung interessiert ist, sind diese technischen Neuerungen nur von geringer Bedeutung.

2.4.1.) Speicherhierarchie

Für Speicher mit kleiner Kapazität können schnellere Schaltkreistechnologien eingesetzt werden, wodurch kürzere Zugriffszeiten möglich sind. Bei sehr großen Speichern müssen unter Umständen relativ große Zugriffszeiten in Kauf genommen werden. Um dies auszugleichen verwendet man kleine, aber schnelle Zwischenspeichern (Pufferspeichern), dies sind Zwischenspeicher in denen man häufig verwendete Daten bzw. Programmteile ablegt.

Die Auswahl jener Daten bzw. Programmteile, die man im Zwischenspeicher ablegt, wird meist aufgrund der zeitlichen Referenz-Lokalität bestimmt. Verwendet man nicht nur einen einzigen Pufferspeicher, sondern ein abgestuftes System von Zwischenspeichern, so erhält man eine ganze Speicherhierarchie. Eine Speicherhierarchie besteht aus mehreren Speicherebenen. Jede dieser Ebenen hat einerseits eine geringere Kapazität und andererseits eine kürzere Zugriffszeit als darunterliegende Ebenen.Tiefere Speicherebenen enthalten im allgemeinen Kopien aller Daten der darüberliegenden Ebenen. Ein referenziertes Speicherwort wird in der höchsten Ebene abgelegt. Jedes in einer Speicherebene abgelegte Wort bleibt dort zumindest so lanqe, bis die Kapazität dieser Ebene erschöpft ist.

Die oberste Ebene hat zwar die kürzeste Zugriffszeit (im Nanosekundenbereich), aber auch die geringste Speicherkapazität (Kilobyte). Es folgen mehrere Ebenen mit um einige Zehnerpotenzen niedrigeren Zugriffszeiten, dafür aber deutlich höheren Speicherkapazitäten. Meist besteht eine Speicherhirachie aus sechs Speicherebenen. Die unterste Ebene ist meist ein externer Massenspeicher mit hoher Zugriffszeit (im Millisekundenbereich) und hoher Speicherkapazität (Giga-, Terabyte).

2.4.2.) Adressierungsarten

Die Lokalisierung eines Datums (Datenelements) im Speicher erfolgt durch eine Adresse.

Meist wird eine Gruppe von Speicherelementen zu einer Speicherzelle (kleinste adressierbare Einheit) zusammengefaßt. Diese Speicherzelle umfaßt 8Bit = 1Byte. Die Zusammenfassung, mehrerer Speicherzellen (meist 4 oder 8) nennt man Speicherwort. Die Adressierung bietet eine Möglichkeit zur eindeutigen Identifikation jener Speicherzelle oder jenes Speicherworts, in dem sich ein Datenelement befindet.

2.4.2.1.) Physische Adressierung:

Auf der schnellsten Ebene der Speicherhierarchie, bei der Speicherung von Programmdaten in den Operandenregistern eines Prozessors, erfolgt die Adressierung meist explizit durch den Compiler, d. h., der vom Compiler erzeugte Code enthält Registernamen, die eindeutig und unveränderbar den physischen Speicherworten, den Registern des Prozessors, zugeordnet sind.

2.4.2.2.) Logische Adressierung:

Bei logischer Adressierung ist es einfacher, Prograrnmdaten gleichzeitig in den verschiedenen physischen Ebenen (Adreßbereichen) einer Speicherhierarchie abzuspeichern. Bei der logischen Adressierung kann man grob zwei Methodenklassen unterscheiden: Seitenadressierung (Paging) und Segmentierung (Segmentation), die oft in kombinierter Form verwendet werden.

Die Verwendung von logischen Adressen erleichtert die "gleichzeitige" Ausführung verschiedener Programme im selben physischen Adreßbereich, wie dies für den Multitasking- und Multiuser-Betrieb notwendig ist.

2.4.2.3.) Seitenadressierung (Paging)

Es wird nicht für jede einzelne logische Adresse vermerkt, welcher physischen Adresse sie entspricht. Vielmehr unterteilt man den logischen Adreßraum in Blöcke konstanter Größe, sogenannte Seiten (pages), denen physische Speicherbereiche derselben Größe zugeordnet werden. Soll eine logische Adresse auf eine physische abgebildet werden, so genügt es, die physische Seite zu ermitteln, die der logischen Seite dieser Adresse entspricht. Die relative Lage der Adresse in Bezug auf den Beginn der Seite ist für logische und physische Seiten gleich.Der Vorteil der Seitenadressierung liegt in ihrer Einfachheit und Schnelligkeit. Die Seitengrößen werden meist an die Eigenheiten des jeweiligen Speichermediums angepaßt. Aus diesem Grund unterscheidet sich die Blockgröße eines Cache-Speichers meist von der ungefähr hundertmal so großen Seitengröße des Hauptspeichers (typischer Wert: 4 KByte).

2.4.2.4.) Segmentierung (Segmentation)

Aus der Sicht des Programmierers liegt es nahe, die Zerlegung des Adreßraumes nach inhaltlichen Gesichtspunkten vorzunehmen und diese Bereiche als sogenannte Segmente zu verwalten. Segmente sind voneinander unabhängige geschützte Adreßbereiche variabler Größe. Es ist sogar möglich, die Größe eines Segments dynamisch zu verändern. Segmente können mit einer Kennzeichnung ihres Typs (Codesegmente enthalten Programmteile, Datensegmente enthalten Daten eines Programmteils etc.) und der Zugriffsrechte (auf Systemsegmente hat nur das Betriebssystem Zugriff, auf Benutzersegmente nur die Anwenderprogramme etc.) versehen werden. Man kann damit ein hohes Maß an Schutz für die gespeicherte Information realisieren.

2.4.2.5.) Allgemeines

Um sowohl die Vorteile der Segment- als auch jene der Seitenverwaltung gleichermaßen nutzen zu können, werden beide Techniken oft miteinander kombiniert, indem man die Segmente in Seiten unterteilt. Die Adreßtransformation ist dann ein zweistufiger Prozeß.

Um von einer logischen Adresse zu einer physischen zu gelangen, ist daher stets eine Adreßtransformation notwendig. Eine physische Adressierung ermöglicht immer - weil kein Transformationsaufwand erforderlich ist - einen schnelleren Speicherzugriff als eine logische. Deshalb wird auf der obersten Ebene der Speicherhierarchie, den Prozessorregistern und eventuell auch bei den Cache-Speichern, wo die Minimierung der Zugriffszeit von größter Bedeutung ist, generell eine physische Adressierung verwendet. Der Cache-Speicher kann sowohl physisch als auch logisch adressiert werden. Auf die Software-Entwicklung hat das keinen Einfluß, da die Adressierungsart des Cache-Speichers für die Software völlig transparent, also unsichtbar und unzugänglich ist. Alle anderen Ebenen der Speicherhierarchie werden nur logisch adressiert: Die vom Compiler erzeugten Adressen beziehen sich nicht direkt auf physische Adressen des Hauptspeichers, des Sekundärspeichers etc.

2.4.3.) Register

Register sind spezielle Speicherzellen mit besonders kurzen Zugriffszeiten, die Teil des Prozessors sind. Um die elektrischen Signallaufzeiten möglichst kurz zu halten, befindet sich der Registersatz räumlich sehr nahe an den Funktionseinheiten des Prozessors. Außerdem kann auf mehrere Register gleichzeitig zugegriffen werden. Der Compiler muß für Register explizit kleine Lade- / Speicheroperationen erzeugen., bei jeder dieser Lade- / Speicheroperation wird nur ein einziges Speicherwort übertragen. Man unterscheidet Adreß-, Instruktions- und Operandenregister. Bei superskalaren Prozessoren mit ihren unabhängigen Funktionseinheiten für die gleichzeitige Ausführung von Ganzzahl und Gleitpunktoperationen wird das Registerfile oft noch weiter unterteilt in Ganzzahl- und Gleitpunkt-Instruktionsregister sowie Ganzzahl- und Gleitpunkt-Operandenregister. Da einerseits die Zugriffszeit auf das Registerfile linear mit dessen Größe steigt und sich andererseits hohe Zugriffszeiten in erhöhten Prozessorzykluszeiten auswirken, ist die sinnvolle Anzahl der Register sehr beschränkt. Außer bei Vektorregistern beträgt die gesamte Speicherkapazität des Registerfiles selten mehr als 1 KByte.

Beispiel(Register): Viele Workstations besitzen 32 Ganzzahl- und 32 Gleitpunkt-Register, die je ein 32-Bit-Wort aufnehmen können, also eine Gesamtkapazität von 256 Byte aufweisen.

2.4.3.1.) Vektorregister

Vektorcomputer besitzen spezielle Vektorregister, die ganze Vektoren von Daten enthalten. Länge und Anzahl der Vektorregister sind beschränkt und können manchmal umkonfiguriert werden.

Beispiel (Vektorregister): Der Vektorrechner Fujitsu VP100 besitzt ein Vektorregisterfile der Größe 32 KByte, das dynamisch (zur Laufzeit) aufteilbar ist: Anzahl der Vektorregister 8 16 32....... 256 64-Bit-Worte pro Register 512 256 128...... 16 Die Aufteilung des Vektorregisterfiles wird ausschließlich vom Compiler vorgenommen, der Benutzer hat darauf keinen direkten Zugriff.

2.4.4.) Cache-Speicher

Caches sind schnelle Zwischenspeicher (Pufferspeicher) zwischen den Registern des Prozessors und dem Hauptspeicher. Die meisten Mikroprozessoren haben einen internen Cache-Speicher (On-Chip-Cache). Der interne Cache-Speicher kann in der Speicherhierarchie zwei Ebenen einnehmen; man unterscheidet dann einen Level 1 Cache (näher beim Prozessor) und einen Level 2 Cache, sogenannte L1 bzw. L2 Cache-Speicher. Externe Cache-Speicher, die sich nicht auf dem Prozessorchip befinden, können wesentlich größer sein. Es gibt für interne Cache-Speicher getrennte Bereiche für Instruktionen und Daten.

Da die Prozessoren immer schneller und die Hauptspeicher immer größer werden, müßten die Cache-Speicher laufend kürzere Zugriffszeiten und auch größere Kapazitäten erhalten. Da sich beide Ziele gleichzeitig bei Verwendung einer Cache-Ebene nur schwer erreichen lassen, ist man zu Systemen mit zwei oder mehr Ebenen übergegangen: Der kleinere und schnellere interne Cache greift dabei nicht direkt auf den Hauptspeicher, sondern auf einen größeren und dafür langsameren externen Cache zu. Dieser wiederum bezieht seine Daten aus dem Hauptspeicher. Vom Prozessor kann immer nur ein Cache- oder Hauptspeicherwort gleichzeitig gelesen oder geschrieben werden. Bei Cache-Speichern wird aus Geschwindigkeitsgründen ein ganzer Block von Wörtern, eine sogenannte Cachezeile (auch Cacheblock genannt) übertragen.

2.4.4.1.) Laden und Aktualisieren

Zeitliche Referenz-Lokalität:

Auf ein einmal referenziertes Speicherwort wird in naher Zukunft mit hoher Wahrscheinlichkeit wieder zugegriffen. Nach diesem Prinzip wird jedes einmal referenzierte Speicherwort im schnellen Zwischenspeicher abgelegt und bleibt dort solange, bis auf Grund der begrenzten Kapazität des Zwischenspeichers der von ihm belegte Platz für neue aktuellere Daten benötigt wird.

Räumlichen Referenz-Lokaliltät:

Wird auf eine der Cache-Speicherzellen zugegriffen, so erfolgen mit hoher Wahrscheinlichkeit in naher Zukunft auch Zugriffe auf benachbarte Speicherzellen, d.h solche mit "ähnlichen" Adressen. Bringt man daher beim Zugriff auf ein Speicherwort nicht nur dieses, sondern auch eine bestimmte Anzahl benachbarter Speicherworte, eine ganze Cachezeile, in den Cache-Speicher, so geschieht dies in der Hoffnung, daß in naher Zukunft auch noch andere Speicherworte dieser Zeile benötigt werden. Deren Zugriffe erfordern dann keine weiteren Ladeoperationen aus dem Hauptspeicher und verursachen daher nur geringe Verzögerungen.

Bei Lesezugriffen kann zur Vermeidung unnötiger Wartezeiten sowohl der Cache und vorsorglich parallel dazu auch der Speicher der nächstlangsameren Ebene der Hierarchie adressiert werden. Bei Multiprozessor-Maschinen ist diese Vorgangsweise aber nicht ratsam, da man dadurch den Speicherbus viel zu stark belasten würde.

2.4.4.2.) Cache hit

Ist das adressierte Wort im Cache vorhanden, so spricht man von einem Cache Trefferzugriff.

2.4.4.3.) Cache miss

Ein referenziertes Speicherwort wird nicht als gültiger Eintrag im Cache gefunden. In diesem Fall muß die Programmausführung unterbrochen werden, bis der angeforderte Speicherinhalt aus einer der niedrigeren Ebenen der Speicherhierarchie in den Cache-Speicher geladen ist. Die Restrukturierung von Speicherzugriffen im Hinblick auf eine sinnvolle Nutzung des Cache-Speichers ist eine der wichtigsten Methoden zur Leistungsoptimierung moderner Einprozessor-Computer.

2.4.4.4.) Plazieren von Cachezeilen

Bei der Plazierung von Zeilen geht es zunächst um die Frage, in welchen der physischen Cachezeilen eine neu zu speichernde logische Zeile überhaupt abgelegt werden kann und ob diese logische Zeile bereits im Cache-Speicher enthalten ist. Dazu müssen jene physischen Zeilen, in denen diese logische Zeile bereits abgelegt sein könnte, überprüft werden. Je kleiner dabei die Menge der dafür in Frage kommenden Zeilen ist, desto einfacher und rascher gestaltet sich die Überprüfung, und desto geringer ist der erforderliche Hardware-Aufwand. In welcher der in Frage kommenden physischen Zeilen diese logische Zeile dann tatsächlich abgelegt wird, hängt von der noch zu besprechenden Ersetzungsstrategie des Cache-Speichers ab. Für das Plazieren von Datenblöcken in den Cachezeilen gibt es unterschiedliche Vorgangsweise, die sich in den Cache-Organisationsformen und den Cachetypen niederschlagen.

2.4.4.5.) Ersetzen von Cachezeilen

Sind alle für die Speicherung einer logischen Zeile in Frage kommenden physischen Zeilen bereits besetzt, so muß der Inhalt einer dieser physischen Zeilen durch die neu zu speichernde logische Zeile ersetzt werden. Dabei sollte natürlich nur eine solche Zeile überschrieben werden, deren Inhalt nicht mehr - oder jedenfalls nicht in naher Zukunft - gebraucht wird. Da derartige Voraussagen durch Hardware-Mechanismen aber nicht möglich sind, behilft man sich mit folgenden heuristischen Ersetzungsstrategien. Am einfachsten ist die Zufallsstrategie, bei der einfach (pseudo-) zufällig eine Zeile aus zum Überschreiben ausgewählt wird. Bei der Least-Recently-Used-Strategie (LRU-Strategie) wird aus jene Cache-Zeile zum Überschreiben gewählt, die am längsten nicht mehr (durch Zugriff) benutzt wurde. Da eine exakte LRU-Strategie sehr aufwendig ist, begnügt man sich oft mit einer näherungsweisen LRU-Strategie. Dabei kann z. B. jede physische Zeile mit einem Statusbit versehen werden, das einerseits bei jedem Cachezeilen-Zugriff gesetzt und andererseits periodisch zurückgesetzt wird. Aus jenen Zeilen, deren Statusbit nicht gesetzt ist, wird dann zufällig eine ausgewählt. Bei der First-In-First-Out-Strategie (FIFO-Strategie) wird jene Cachezeile ersetzt, die schon am längsten im Cache ist. Bei den einfach assoziativen (direct mapped) Cache-Speichern erübrigt sich jede spezielle Ersetzungsstrategie.

2.4.4.6.) Die drei wichtigsten Cachetypen

Einfach assoziativer Cache (direct rnapped cache): Bei diesem Cachetyp kann jede logische Zeile in jeweils genau einer physischen Zeile abgelegt werden. Die Prozessoren HP-PA 7100, DEC 21 064 (Alpha) und MIPSR4400 verwenden eine einfach assoziative Cache-Organisation (direct mapped caches). Einfach assoziative Plazierung (direct mapping) von Zeilen in einem hypothetischen Cache-Speicher mit 8 Zeilen.

Vollassoziativer Cache ist ein Cache-Speicher, bei dem jede logische Zeile ohne Einschränkung bezüglich ihrer Numerierung in jeder physischen Zeile abgespeichert werden kann Bei der vollassoziativen Platzierung von Cachezeilen wird gleichzeitig mit jedem Speicherwort auch dessen Hauptspeicheradresse im Cache abgespeichert. Der Zugriff auf Speicherworte im Cache erfolgt mit dieser Adresse als Schlüssel. Diese flexible Art der Platzierung erfordert einen hohen technischen Aufwand, der höhere Kosten verursacht und niedrigere Cache-Kapazitäten bedingt.

Beispiel (HP-Workstations) Der Prozessor HP-PA 7200 besitzt zur Unterstützung des externen Caches einen kleineren (nur 2 KByte großen) internen, vollassoziativen Cache.

Mengenassoziativer Cache (mehrfach assoziativer Cache) ist ein Cachetyp, der zwischen dem einfach assoziativen und dem vollassoziativen Cache steht: Zwar ist bei vorgegebener logischer Cachezeile die entsprechende physische Zeile nicht eindeutig bestimmt wie bei einem einfach assoziativen Cache, es kommen aber auch nicht alle physischen Zeilen wie bei einem vollassoziativen Cache in Frage. Beim mengenassoziativen Cache ist die Menge bei einem vorgegebenen Teiler gegeben. Jede logische Zeile kann also in bestimmten physischen Zeilen abgelegt werden. Man spricht in diesem Fall auch von einem 1-fach mengenassoziativen Cache.

Beispiel (IBM-Workstations) Die IBM POWER- und POWER2-Prozessoren haben interne 4-fach mengenassoziative Daten-Caches. Der Instruktionen-Cache dieser Prozessoren ist 2-fach mengenassoziativ.

2.4.5.) Virtueller Speicher

Beim virtuellen Speicher wird mit Hilfe von sekundären Speichermedien ein viel größerer Hauptspeicher simuliert. Programminstruktionen und -daten werden bei Bedarf dynamisch in den realen Hauptspeicher geladen und auch wieder in den Sekundärspeicher ausgelagert, um Platz für andere Daten zu schaffen. Der real vorhandene Speicher wird vor der Software verborgen, die nur den virtuellen Speicher "sieht". Ermöglicht wird dies durch die Verwendung logischer Adreßräume, die eine vollständige Entkopplung logischer und physischer Adressen bewirken. Beim virtuellen Speicher entspricht das Verhältnis des Hauptspeichers zum Sekundärspeicher im wesentlichen jenem zwischen Cache- und Hauptspeicher: Der Hauptspeicher übernimmt für den Sekundärspeicher die Rolle des Caches.

Wichtig für die Leistungsoptimierung numerischer Software ist die vom virtuellen Speicher verwendete Seiten-, Plazierungs- bzw. - Ersetzungsstrategie. Auch die Adreßtransformationsmethode - Seitenidentifikationsstrategie genannt - kann wesentlichen Einfluß auf die Programmleistung haben. Der Einfluß dieser Strategien ist beim virtuellen Speicher viel gravierender als beim Cache-Speicher. Ein Fehlzugriff auf den virtuellen Speicher bedingt einen Zugriff auf den Sekundärspeicher, dessen Zugriffszeiten um ca. einen Faktor von 100000 größer sind als jene des Hauptspeichers. Die Zugriffszeiten zwischen Cache-Speicher und Hauptspeicher unterscheiden sich hingegen oft nur um eine Größenordnung.

2.4.5.1.) Plazieren und Ersetzen von Seiten

Jede logische Seite des virtuellen Speichers kann Grundsätzlich in jede physische Hauptspeicherseite geladen werden. Dadurch ist sichergestellt, daß alle freien Hauptspeicherseiten genutzt werden und Zugriffe auf den Sekundärspeicher so weit wie möglich vermieden werden. Diese Minimierung der Zugriffe ist außerordentlich wichtig, weil die Zugriffszeiten auf den Sekundärspeicher um viele Größenordnungen höher sind als jene auf den Hauptspeicher. Seitenersetzungsstrategie wird auch beim virtuellen Speicher oft eine näherungsweise LRU-Strategie verwendet. Meist ist dies eine einfache Not-Used-Recently-Strategie (NUR-Strategie), die eine Seite dann ersetzt, wenn sie in letzter Zeit nicht benutzt wurde.

2.4.5.2.) Adressierung

Die Adreßtransformation der logischen Seiten in physische Adressen des Haupt- bzw. Sekundärspeichers erfolgt mit Hilfe einer sogenannten Seitentafel. In dieser sind - vereinfachend gesagt - für alle logischen Seiten eines Segments die Adressen der entsprechenden physischen Seiten eingetragen. Die Adreßtransformation besteht also im wesentlichen aus der Suche nach dem passenden Eintrag in der Seitentafel (table lookup).

Nach den empirischen Gesetzmäßigkeiten der Referenzlokalität wird oft eine logische Seite mehrmals unmittelbar hintereinander referenziert. Damit in diesem Fall die erforderlichen Adreßtransformationen möglichst rasch erfolgen, werden die momentan verwendeten Teile der Seitentafel in einem schnellen Zwischenspeicher abgelegt. Es handelt sich dabei meist um einen speziellen vollassoziativen Cache, den sogenannten Translation Lookaside Buffer (TLB), der - je nach System - zwischen 20 und 200 Einträgen enthalten kann. Wird eine gesuchte virtuelle Seite nicht im TLB gefunden, muß auf den, im Hauptspeicher abgelegten Teil der Seitentafel zugegriffen werden, was auf Grund der dabei erforderlichen Hauptspeicherzugriffe die Adreßtransformation verlangsamt. Für Seiten, die nicht im Hauptspeicher stehen, kann es sogar passieren, daß auch der entsprechende Teil der Seitentafel auf den Sekundärspeicher ausgelagert wurde, wodurch die Zugriffszeit stark anwächst.

2.4.6.) Speicherverschränkung

Die Speicherverschränkung (bank phasing, interleaving) ist ein Verfahren zur Zugriffsbeschleunigung, das in erster Linie für den Hauptspeicher angewendet wird. Dabei wird der Hauptspeicher in gleichgroße, voneinander unabhängige Bereiche (Module, Speicherbänke) unterteilt, die zeitlich verschränkt gelesen oder beschrieben werden können. Aufeinanderfolgende Speicherworte werden zyklisch in aufeinanderfolgenden Speicherbänken abgespeichert. Die Sinnhaftigkeit dieser Speicherverschränkung mit Speicherbänken. Maßnahme ergibt sich aus der Diskrepanz zwischen Zugriffs- und Zykluszeit der Hauptspeichermodule. Während die Zugriffszeit jene Zeit angibt, die zum Lesen bzw. Schreiben eines Speicherwortes benötigt wird, beschreibt die Zykluszeit eines Speichers die Zeitspanne vom Beginn eines Zugriffs bis zu jenem Zeitpunkt, zu dem der nächste Zugriff beginnen kann. Daß Zugriffs- und Zykluszeit für Hauptspeichermodule nicht übereinstimmen, liegt daran, daß sich der Speicher nach einem Zugriff zunächst regenerieren muß, bevor er neue Zugriffe erlaubt. Für gängige Halbleiterbauteile ist die Zykluszeit eines Speichers etwa drei- bis viermal so groß wie dessen Zugriffszeit. Für den Durchsatz eines nichtverschränkten Speichers ist dessen Zykluszeit, nicht die Zugriffszeit, ausschlaggebend.

Bei einem verschränkten Speicher ist, wenn auf die verschiedenen Module in geeigneter Reihenfolge zugegriffen wird, für den Durchsatz die deutlich kürzere Zugriffszeit sowie die Anzahl der Module entscheidend. Die größte Beschleunigung der mittleren Zugriffszeit wird erreicht, wenn aufeinanderfolgende Speicherzugriffe auf verschiedene Module erfolgen.

2.4.7.) Speicherarten

2.4.7.1.) SRAM (statische RAM)

SRAMs bestehen aus 4-6 Flip Flops, die entweder den Wert 0 oder 1 annehmen können. Sie werden einmal geschalten, es entfallen somit die Wiederauffrischungszyklen, die bei DRAMs relativ zeitaufwendig sind. SRAMs sind in der Herstellung allerdings etwas teurer als SRAMs, wodurch sie meist nur als Cache-Speicher Verwendung finden. Für den Hauptspeicher sind meist die billigeren, etwas langsameren DRAMs im Einsatz.

4-6 Transistoren(Flip-Flop)

2.4.7.2.) DRAM

Erfindung in den 60er Jahren

Pro Bit nur ein Transistor und ein Kondensator Die Kondensatoren speichern nur noch einige Elektronen Verfeinerung noch möglich durch Multi-Level Speicherzellen In Entwicklung: Kondensatoren mit abgestuften Ladungen, gleich mehrere Bits speichern Nachteil: Ladung geht mit der Zeit verloren, Refreshzyklen notwendig, Zeitverlust

Funktionsweise:

Ladephase: Durch die matrixartige Struktur bekommt das RAM erst eine Zeilenadresse mit dem Signal(RAS) zugewiesen, alle zugehörigen Spalten werden parallel in den Schreib/Leseverstärkern (Sense Amplifiers) zwischengespeichert. Die Spaltenadresse(CAS) wählt die Daten, die an den Ausgang gelegt werden, aus. Erholphase: Die ganze Page wird vom Schreib/Leseverstärker zurückgeschrieben.

2.4.7.3.) PM-DRAM (PageModeDRAM)

Fortentwicklung der DRAM- Technik

Man kann innerhalb einer durch RAS ausgewählten Page bis maximal 100 Mikrosekunden beliebig oft andere Spalten adressieren. Nach jedem CAS wird der Inhalt der Schreib/Leseverstärker zurückgeschrieben

2.4.7.4.) FPM-DRAM (FastPageModeDRAM)

Fortentwicklung der PMRAM- Technik

Erst bei einem Pagewechsel wird der Inhalt der Schreib/Leseverstärker zurückgeschrieben à Bei Page- Hit dreimal so schnelle Zugriffe möglich

2.4.7.5.) EDO-RAM (Extended Data Output)

Fortentwicklung der FPM-DRAM- Technik

Da das CAS Signal beim FPM- DRAM eine doppelte Funktion ausführen muß, geht wichtige Zeit verloren, die durch eine Entlastung des CAS- Signals durch ein bei herkömmlichen DRAMs bzw. FPM- DRAMs meist ingnoriertes Signal ersetzt wird. Vorteil: Verlängerter Datenoutput, verkürtzte CAS- Zyklus-Zeit (10-15 ns von rund 60-70 ns)

2.4.7.6.) BDRAM (BurstDRAM)

Fortentwicklung der DRAM- Technik

Bursts weisen eine vorgegebene Reihenfolge von Adressen auf daher entfallen einige Adreßangaben, wodurch Zeit gespart wird.

2.4.7.7.) PM-DRAM (PageModeDRAM)

Kreuzung der EDO- Technik mit Burst- DRAM- Technik

Sie benötigen eine komplett andere Ansteuerung, sind also inkompatibel zu FPMRAMs.

BEDO ist die derzeit schnellst existierende DRAM- Technologie für PCs. Da sich Intel jedoch diesem widersetzt hat,

2.4.7.8.) SDRAM (Synchron DRAM)

Aufbauend auf DRAM- Technologie Das besondere bei den synchronen DRAMs ist daß sich alle Signale auf ein Taktsignal beziehen, welches Vorteile für die interne Feinabstimmung und für das Zusammenspiel mit dem Memory-Controllern bringt.

2.4.7.9.) RAMbus

Findet bisher hauptsächlich in Spielkonsolen oder auf Graphikkarten verwendung.

Im Graphikbereich verbreiteter RAM

  • CDRAM
  • SGRAM
  • MDRAM
  • Dual-Ported-RAMs
  • VRAM
  • WRAM
  • 3D-RAM
  • Speicherzugriffsgeschwindigkeit)

    Speicherhirachie: (Bild(Pyramide)) Zugriffszeitenkleiner: (Speicher: kurz, großer Speicher: lang) Pufferspeicher: (=Zwischenspeicher) Speicherebenen: (mehrere kleine Speicherebenen: schneller, größere Speichere.: langsamer) Adressierungsarten: Register: Adressregister: Instruktionsregister: Operandenregister: Vektorregister: Cachespeicher: (Verbindungsebene zw. Register und Hauptspeicher, =schneller Zwischenspeicher) Cache greift gebündelt auf zumeist 4 aufeinanderfolgende Adressen zu, sogenannte Bursts(Burst- Cache) Cache faßt in der Regel mehrere Datenwörter zu Cachlines zusammen und tauscht mit dem Speicher nur ganze Cache- Lines aus. Der erste Zugriff(Lead- Off Cycle, Startzyklus) dauert erheblich länger als der Durchschnittszugriff, da erst Adressen ausgewertet werden müssen. internes Cache = On Chip Cache: (meist getrennt in Level 1 und Level 2 Cache) externes Cache: Funktionsweisen: