# Arbeitsspeicher

Der Arbeitsspeicher oder Hauptspeicher (englisch core, main store, main memory, primary memory, RAM = Random Access Memory) eines Computers ist die Bezeichnung für den Speicher, der die gerade auszuführenden Programme oder Programmteile und die dabei benötigten Daten enthält. Der Hauptspeicher ist eine Komponente der Zentraleinheit. Da der Prozessor unmittelbar auf den Hauptspeicher zugreift, beeinflussen dessen Leistungsfähigkeit und Größe in wesentlichem Maße die Leistungsfähigkeit der gesamten Rechenanlage.
Arbeitsspeicher wird charakterisiert durch die Zugriffszeit bzw. Zugriffsgeschwindigkeit und (damit verbunden) die Datenübertragungsrate sowie die Speicherkapazität. Die Zugriffsgeschwindigkeit beschreibt die Dauer, bis angefragte Daten gelesen werden können. Die Datenübertragungsrate gibt an, welche Datenmenge pro Zeit gelesen werden kann. Es können getrennte Angaben für Schreib- und Lesevorgang existieren. Zur Benennung der Arbeitsspeichergröße existieren zwei unterschiedliche Notationsformen, die sich aus der verwendeten Zahlenbasis ergeben. Entweder wird die Größe zur Basis 10 angegeben (als Dezimalpräfix; 1 kByte oder kB = 10$^3$ Bytes = 1000 Bytes, SI-Notation) oder zur Basis 2 (als Binärpräfix; 1 KiB = 2$^{10}$ Bytes = 1024 Bytes, IEC-Notation). Aufgrund der binärbasierten Struktur und Adressierung von Arbeitsspeichern (Byte-adressiert bei 8-Bit-Aufteilung, wortadressiert bei 16-Bit-Aufteilung, doppelwortadressiert bei 32-Bit-Aufteilung usw.) ist letztere Variante die üblichere Form, die zudem ohne Brüche auskommt.
Soweit Arbeitsspeicher über den Adressbus des Prozessors angesprochen wird oder direkt im Prozessor integriert ist, spricht man von physischem Speicher. Modernere Prozessoren und Betriebssysteme können durch virtuelle Speicherverwaltung mehr Arbeitsspeicher bereitstellen, als physischer Speicher vorhanden ist, indem sie Teile des Adressraums mit anderen Speichermedien hinterlegen (etwa mit einer Auslagerungsdatei, pagefile oder swap u. a.). Dieser zusätzliche Speicher wird virtueller Speicher genannt. Zur Beschleunigung des Speicherzugriffs – physisch oder virtuell – kommen heute zusätzliche Pufferspeicher zum Einsatz.

## Grundlagen

Der Arbeitsspeicher des Computers ist ein durch Adressen (in Tabellenform) strukturierter Bereich, der Binärwörter fester Größe aufnehmen kann. Durch die binäre Adressierung bedingt hat Arbeitsspeicher praktisch immer eine 'binäre' (auf Potenzen von 2 basierende) Größe, da andernfalls Bereiche ungenutzt blieben.
Der Arbeitsspeicher moderner Computer ist flüchtig, d. h., dass alle Daten nach dem Abschalten der Energieversorgung verloren gehen – der Hauptgrund dafür liegt in der Technologie der DRAMs. Verfügbare Alternativen wie etwa MRAM sind allerdings für die Verwendung als Arbeitsspeicher noch zu langsam. Deshalb enthalten Computer auch Festspeicher in Form von Festplatten oder SSDs, auf dem das Betriebssystem und die Anwendungsprogramme und Dateien beim Abschalten erhalten bleiben.
Die häufigste Bauform für den Einsatz in Computern ist das Speichermodul. Es ist zwischen verschiedenen RAM-Typen zu unterscheiden. Waren in den 1980ern noch übliche Bauweisen Speicher in Form von ZIP-, SIPP- oder DIP-Modulen, so wurden in den 1990ern vorwiegend SIMMs mit FPM- oder EDO-RAM genutzt. Heute kommen in Computern in erster Linie DIMMs mit z. B. SD-, DDR-SD-, DDR2-SD-, DDR3-SD oder DDR4-SDRAMs zum Einsatz.

## Geschichte

Die ersten Computer hatten keinen Arbeitsspeicher, nur einige Register, die mit der gleichen Technik wie das Rechenwerk aufgebaut waren, also Röhren oder Relais. Programme waren fest verdrahtet („gesteckt“) oder auf anderen Medien, wie zum Beispiel Lochstreifen oder Lochkarten gespeichert und wurden nach dem Lesen direkt ausgeführt.
„In Rechenanlagen der 2. Generation dienten Trommelspeicher als Hauptspeicher“ (Dworatschek). Zusätzlich wurde in der Anfangszeit auch mit eher exotischen Ansätzen experimentiert, beispielsweise mit Laufzeitspeichern in Quecksilberbädern oder in Glasstabspiralen (mit Ultraschallwellen beschickt). Später wurden Magnetkernspeicher eingeführt, die die Information in kleinen Ferritkernen speicherten. Diese waren in einer kreuzförmigen Matrix aufgefädelt, wobei sich je eine Adressleitung und eine Wortleitung in der Mitte eines Ferritkerns kreuzten. Der Speicher war nicht flüchtig, die Information ging jedoch beim Lesen verloren und wurde anschließend von der Ansteuerungslogik sofort wieder zurückgeschrieben. Solange der Speicher nicht beschrieben oder gelesen wurden, floss kein Strom. Er ist um einige Größenordnungen voluminöser und teurer herzustellen als moderne Halbleiterspeicher.
Typische Großrechner waren Mitte der 1960er Jahre mit 32 bis 64 Kibibyte großen Hauptspeichern ausgestattet (zum Beispiel IBM 360-20 oder 360-30), Ende der 1970er Jahre (zum Beispiel die Telefunken TR 440) mit 192.000 Worten à 52 Bit (netto 48 Bit), also mit über 1 Megabyte.
Der Kernspeicher als Ganzes bot ausreichend Platz, neben dem Betriebssystem, das aktuell auszuführende Programm zunächst von einem externen Medium in den Arbeitsspeicher zu laden und alle Daten zu halten. Programme und Daten liegen in diesem Modell aus Sicht des Prozessors im gleichen Speicher, die heute am weitesten verbreitete Von-Neumann-Architektur wurde eingeführt.
Mit Einführung der Mikroelektronik wurde der Arbeitsspeicher zunehmend durch integrierte Schaltungen (Chips) ersetzt. Jedes Bit wurde in einem bistabilen Schalter (Flipflop) gespeichert, das mindestens zwei, mit Ansteuerlogik aber bis zu sechs Transistoren benötigt und relativ viel Chipfläche verbraucht. Solche Speicher verbrauchen immer Strom. Typische Größen waren integrierte Schaltungen (ICs) mit 1 KiBit, wobei jeweils acht ICs gemeinsam adressiert wurden. Die Zugriffszeiten lagen bei einigen 100 Nanosekunden und waren schneller als die Prozessoren, die um ein Megahertz getaktet waren. Das ermöglichte zum einen die Einführung von Prozessoren mit sehr wenigen Registern wie dem MOS Technology 6502 oder dem TMS9900 von Texas Instruments, die ihre Berechnungen größtenteils im Arbeitsspeicher durchführten. Zum anderen ermöglichte es den Bau von Heimcomputern, deren Videologik einen Teil des Arbeitsspeichers als Bildschirmspeicher verwendete und parallel zum Prozessor darauf zugreifen konnte.
Ende der 1970er Jahre wurden dynamische Arbeitsspeicher entwickelt, die die Information in einem Kondensator speichern und nur noch einen zusätzlichen Feldeffekttransistor pro Speicherbit benötigen. Sie können sehr klein aufgebaut werden und benötigen sehr wenig Leistung. Der Kondensator verliert die Information allerdings langsam, die Information muss daher in Abständen von einigen Millisekunden immer wieder neu geschrieben werden. Das geschieht durch eine externe Logik, die den Speicher periodisch ausliest und neu zurückschreibt (Refresh). Durch die höhere Integration in den 1980er Jahren konnte diese Refreshlogik preiswert aufgebaut und in den Prozessor integriert werden. Typische Größen Mitte der 1980er waren 64 KBit pro IC, wobei jeweils acht Chips gemeinsam adressiert wurden.
Die Zugriffszeiten der dynamischen RAMs lagen bei preiswertem Aufbau ebenfalls bei einigen 100 Nanosekunden und haben sich seitdem nur wenig verändert, die Größen sind jedoch auf einige GBit pro Chip gewachsen. Die Prozessoren werden heute nicht mehr im Megahertz-, sondern im Gigahertz-Bereich getaktet. Daher werden, um die durchschnittliche Zugriffszeit zu reduzieren, Caches verwendet und sowohl die Taktrate als auch die Breite der Anbindung des Arbeitsspeichers an den Prozessor erhöht (siehe Front Side Bus).
Im Juni 2012 wurde bekannt gegeben, dass mit dem sogenannten Speicherwürfel (englisch Hybrid Memory Cube und kurz HMC genannt) eine neue kleinere und leistungsstärkere Bauform für Arbeitsspeicher entwickelt werden soll, bei der ein Stapel aus mehreren Dies genutzt werden soll. Eigens dafür wurde das Hybrid Memory Cube Konsortium gegründet, dem unter anderem ARM, Hewlett-Packard und Hynix beigetreten sind.

## Physischer und virtueller Arbeitsspeicher

Um den physischen Arbeitsspeicher zu erweitern, können moderne Betriebssysteme zusätzlichen virtuellen Arbeitsspeicher auf Massenspeichern allozieren (platzieren, zuteilen). Diesen Speicher nennt man auch Swapspeicher.
Um diese Erweiterung transparent zu realisieren, bedient sich das Betriebssystem eines virtuellen Speicherraumes, in dem sowohl der physische als auch der virtuelle Speicher vorhanden sind. Teile dieses virtuellen Speicherraumes – eine oder mehrere Speicherseiten – werden dabei entweder in das physisch vorhandene RAM oder in den Auslagerungsspeicher (Swapspace) abgebildet. Die Nutzungsrate der einzelnen Seiten bestimmt, welche Speicherseiten ausgelagert und nur auf Massenspeichern und welche im schnellen RAM existieren. Diese Funktionen werden von heutigen CPUs unterstützt, wobei die Menge des unterstützten Gesamtspeichers im Laufe der Entwicklung deutlich gestiegen ist.
Der Auslagerungsspeicher stellt eine sehr preiswerte, aber mit extrem schlechter Leistung verbundene Erweiterung zum physischen Arbeitsspeicher dar. Ein Missverhältnis zwischen beiden Speicherarten ist an häufigem „Swappen“, also dem Verschieben von Daten zwischen Massen- und physischem Arbeitsspeicher, zu erkennen. Verglichen mit dem Arbeitsspeicher benötigt die Festplatte mit mehreren Millisekunden sehr lange, um die Daten bereitzustellen. Die Zugriffszeit auf den Arbeitsspeicher beträgt nur wenige Nanosekunden, was einem Millionstel der Festplatte entspricht.

## Cache

Zugriffe auf den Arbeitsspeicher durch den Hauptprozessor werden zumeist über ein oder mehrere Pufferspeicher oder Cache-RAMs (kurz „Cache“) optimiert. Im Cache hält und benutzt der Rechner die am häufigsten angesprochenen Speicherbereiche, stellvertretend für die originären Hauptspeicherbereiche. Der Cache ist im Verhältnis zu anderen Speichern sehr schnell, da er möglichst direkt am Prozessor angebunden ist (bzw. sich in modernen Prozessoren direkt auf dem Die befindet). Allerdings ist er in der Regel nur wenige Megabyte groß.
Bei geringem Speicherbedarf können Programme oder Teile davon fast ausschließlich im Cache laufen, ohne dass der Hauptspeicher angesprochen werden muss.
Der Cache ist als Assoziativspeicher ausgeführt, kann also entscheiden, ob die Daten einer Adresse schon im Cache gespeichert sind oder noch vom Arbeitsspeicher geholt werden müssen. Dann wird ein anderer Teil des Caches aufgegeben. Der Cache wird dabei stets mit mehreren aufeinander folgenden Worten gefüllt, beispielsweise stets mit mindestens 256 Bit (sogenannter Burst-Modus), da es sehr wahrscheinlich ist, dass in Kürze auch Daten vor oder hinter den gerade benötigten gelesen werden sollen.

## Leistung von Speichermodulen

Die Leistung von Speichermodulen (Takt und Schaltzeitverhalten, englisch Timing) misst sich vor allem in der absoluten Latenz. Die theoretische Bandbreite ist ausschließlich beim Burst-Transfer relevant.
Ein weit verbreiteter Irrtum ist, dass höhere numerische Timings eine schlechtere Leistung zur Folge hätten. Das gilt jedoch nur bei gleichem Takt, da sich die absolute Latenz aus den Faktoren (effektiver) Takt und Schaltzeitverhalten (Timing) ergibt.
Beispiele :
| Bezeichnung | CAS | tRCD | tRP | tRAS |
| DDR400 CL2-2-2-5 | 10 ns | 10 ns | 10 ns | 25 ns |
| DDR500 CL3-3-2-8 | 12 ns | 12 ns | 8 ns | 32 ns |
| DDR2-667 CL5-5-5-15 | 15 ns | 15 ns | 15 ns | 45 ns |
| DDR2-800 CL4-4-4-12 | 10 ns | 10 ns | 10 ns | 30 ns |
| DDR2-800 CL5-5-5-15 | 12,5 ns | 12,5 ns | 12,5 ns | 37,5 ns |
| DDR2-1066 CL4-4-4-12 | 7,5 ns | 7,5 ns | 7,5 ns | 22,5 ns |
| DDR2-1066 CL5-5-5-15 | 9,38 ns | 9,38 ns | 9,38 ns | 28,13 ns |
| DDR3-1333 CL7-7-7-24 | 10,5 ns | 10,5 ns | 10,5 ns | 36 ns |
| DDR3-1333 CL8-8-8 | 12 ns | 12 ns | 12 ns |
| DDR3-1600 CL7-7-7 | 8,75 ns | 8,75 ns | 8,75 ns |
| DDR3-1600 CL9-9-9 | 11,25 ns | 11,25 ns | 11,25 ns |

### Berechnung

Formel:
    ${\frac {2\cdot \mathrm {Timing} }{\text{Geschwindigkeit}}}$
Beispiel:

#### DDR3-1333 CL8-8-8

    ${\frac {2\cdot 8}{1333\,{\text{MHz}}}}=1{,}20\cdot 10^{-8}\,\mathrm {s} =12{,}0\,\mathrm {ns}$
Daraus ergibt sich die Konsequenz, dass DDR2/3/4-SDRAM, obwohl sie höhere (numerische) Schaltzeiten (Timings) als DDR-SDRAM aufweisen, schneller sein können und eine höhere Bandbreite zur Verfügung stellen.
Einige Speicherhersteller halten die offiziellen Spezifikationen der JEDEC nicht ein und bieten Module mit höheren Taktraten oder besserem Schaltzeitverhalten (Timings) an. Während DDR3-1600 CL9-9-9 einer offiziellen Spezifikation unterliegt, handelt es sich bei DDR2-1066 CL4-4-4-12 um nicht standardkonforme Speichermodule. Diese schnelleren Speicher werden oft als Speichermodule für Übertakter bezeichnet.

#### CAS (column access strobe) – latency (CL)

    Gibt an, wie viele Taktzyklen der Speicher benötigt, um Daten bereitzustellen. Niedrigere Werte bedeuten höhere Speicherleistung.

#### RAS to CAS Delay (tRCD)

    Dabei wird über die Abtastsignale „Spalten“ und „Zeilen“ eine bestimmte Speicherzelle lokalisiert, ihr Inhalt kann dann bearbeitet werden (Auslesen/Beschreiben). Zwischen der Abfrage „Zeile“ und der Abfrage „Spalte“ befindet sich eine festgelegte Verzögerung ⇒ Delay. Niedrigere Werte bedeuten höhere Speicherleistung.

#### RAS (row access strobe) – precharge delay (tRP)

    Bezeichnet die Zeit, die der Speicher benötigt, um den geforderten Spannungszustand zu liefern. Erst nach Erreichen des gewünschten Ladezustandes kann das RAS-Signal gesendet werden. Niedrigere Werte bedeuten höhere Speicherleistung.

#### Row-Active-Time (tRAS)

    Erlaubte Neuzugriffe nach festgelegter Anzahl von Taktzyklen, setzt sich rein rechnerisch aus CAS + tRP + Sicherheit zusammen.

#### Command Rate (zu Deutsch Befehlsrate)

    Ist die Latenzzeit, welche bei der Auswahl der einzelnen Speicherchips benötigt wird, genauer gesagt, die Adress- und Command Decode Latency. Die Latenzzeit gibt an, wie lange ein Speicherbank-Adressierungssignal anliegt, bevor die Ansteuerung der Zeilen und Spalten der Speichermatrix geschieht. Typische Werte für DDR- und DDR2-Speichertypen sind 1–2T, meistens wird 2T genutzt.

### Praxis

In der Praxis konnten FSB1333-Prozessoren von Intel mit ihrem Front Side Bus maximal 10 GiB/s an Daten empfangen. Das wird im üblichen Dual-Channel-Betrieb mit zwei Speicher-Riegeln bereits von DDR2-667 (10,6 GiB/s) ausgereizt.
Aktuelle Prozessoren unterliegen dieser Beschränkung nicht mehr, da hier der Speichercontroller nicht mehr in der Northbridge, wie beim Sockel 775 und Vorgängern, sondern direkt auf der CPU verbaut ist.
Neben Dual Channel spielt es auch eine Rolle, ob der Speicher Dual-Rank unterstützt. Dual-Rank steht für die beidseitige Bestückung der Speicherriegel mit doppelt so vielen, aber nur halb so großen Speicherchips. Insbesondere CPUs mit interner GPU, wie die AMD-Kaveri-Architektur, können von dieser Form der Speicherverschränkung profitieren.

## Anbindung des Arbeitsspeichers

Die klassische Anbindung von physischem Speicher erfolgt über einen (bei Von-Neumann-Architektur) oder mehrere (bei der heute im PC-Bereich nicht mehr verwendeten Harvard-Architektur bzw. Super-Harvard-Architektur) Speicherbusse. Speicherbusse übertragen Steuerinformationen, Adressinformationen und die eigentlichen Nutzdaten. Eine von vielen Möglichkeiten ist es, für diese unterschiedlichen Informationen getrennte Leitungen zu nutzen und den Datenbus sowohl zum Lesen wie zum Schreiben von Nutzdaten zu verwenden.
Der Datenbus übernimmt dann den eigentlichen Datentransfer. Aktuelle PC-Prozessoren benutzen zwischen zwei und vier 64-Bit-Speicherbusse, die aber seit etwa dem Jahr 2000 keine generischen Speicherbusse mehr sind, sondern direkt die Protokolle der verwendeten Speicherchips sprechen. Der Adressbus dient zur Auswahl der angeforderten Speicherzellen; von seiner Busbreite (in Bit) ist die maximal ansprechbare Anzahl von Speicherworten abhängig. An jeder Adresse sind bei heute üblichen Systemen meist 64 Bit abgelegt (siehe 64-Bit-Architektur), früher wurden auch 32 Bit (Intel 80386), 16 Bit (Intel 8086) und 8 Bit (Intel 8080) verwendet. Viele, aber nicht alle Prozessoren unterstützen feiner granulare Zugriffe, meist auf Byteebene, durch ihre Art der Interpretation von Adressen (Endianness, „Bitabstand“ von Adressen, misalignte-Zugriffe) auf Software-Ebene wie auch durch das Hardware-Interface (Byte-Enable-Signale, Nummer der niederwertigsten Adressleitung).
Beispiel: Intel 80486
* Adressbus: A31 bis A2
* Datenbus: D31 bis D0
* Byte-Enable: BE3 bis BE0
* Endianness: Little Endian
* Unterstützung von misalignten Zugriffen: ja
* ansprechbarer Speicher: 4 Gi × 8 Bit als 1 Gi × 32 Bit
Einer der wesentlichen Unterschiede der beiden bei PCs aktuellen Prozessorgenerationen „32-Bit“ und „64-Bit“ ist also der bereits angesprochene maximal ansteuerbare Arbeitsspeicher, der jedoch zum Teil mit Hilfe von Physical-Address Extension noch etwas über das übliche Maß hinaus erweitert werden kann. Allerdings ist mit der Anzahl der Bits einer Prozessorgeneration im Allgemeinen die Breite des Datenbusses gemeint, die nicht notwendigerweise mit der Breite des Adressbusses übereinstimmt. Allein die Breite des Adressbusses bestimmt jedoch die Größe des Adressraums. Aus diesem Grund konnte beispielsweise der „16-Bit“-Prozessor 8086 nicht nur 64 KiB (theoretischer 16-Bit-Adressbus), sondern 1 MiB (tatsächlicher 20-Bit-Adressbus) adressieren.
Der Bus moderner Computer vom Cache zum Arbeitsspeicher wird schnell ausgeführt, also mit hoher Taktrate und Datenübertragung bei steigender und fallender Taktflanke (DDR: Double Data Rate). Er ist synchron und mit großer Wortbreite, zum Beispiel 64 Bit pro Adresse. Werden mehrere Speichersteckplätze auf der Hauptplatine eines PCs eingesetzt, so werden aufeinander folgende Adressen in verschiedenen Steckplätzen gespeichert. Das ermöglicht überlappenden Zugriff (Interleaved) bei Burst-Zugriffen.
Innerhalb der Speicherchips werden ganze Adresszeilen in Schieberegistern gespeichert. Ein 1-MiBit-Chip kann zum Beispiel 1024 Zeilen mit 1024 Bit haben. Beim ersten Zugriff wird ein schnelles, internes 1024-Bit-Register mit den Daten einer Zeile gefüllt. Bei Burst-Zugriffen sind die Daten der folgenden Adressen dann bereits im Schieberegister und können mit sehr geringer Zugriffszeit von diesem gelesen werden.
Sinnvollerweise überträgt man daher nicht nur das angeforderte Bit zum Prozessor, sondern gleich eine sogenannte „Cache-Line“, die heute 512 Bit beträgt (vgl. Prozessor-Cache).

## Hersteller

Die größten Speicherchiphersteller sind:
* Nanya Technology
* Hynix Semiconductor
* Micron Technology
* Promos
* Samsung
* Toshiba
* Winbond
* Etron
* Fujitsu Siemens Computers
Diese Hersteller teilen sich 97 Prozent Marktanteil. Anbieter von Speichermodulen, wie Corsair, Kingston Technology, MDT, OCZ, A-Data usw. (sogenannte Third-Party-Hersteller) kaufen Chips bei den genannten Herstellern und löten diese auf ihre Platinen, wofür sie ein eigenes Layout entwerfen. Außerdem programmieren sie die SPD-Timings gemäß ihren eigenen Spezifikationen, die durchaus schärfer eingestellt sein können als die der Originalhersteller.
Für Dual-Channel- oder Triple-Channel-Betrieb sollten nach Möglichkeit annähernd baugleiche Module verwendet werden, damit die Firmware (bei PCs das BIOS oder UEFI) den Parallel-Betrieb nicht aufgrund von unvorhersehbaren Inkompatibilitäten verweigert oder das System dadurch instabil läuft. Es ist gängige Praxis, dass ein Hersteller beim selben Produkt im Laufe der Produktion andere Chips auf seine Module lötet bzw. umgekehrt unterschiedliche Hersteller die gleichen Chips verwenden. Da diese Informationen jedoch in so gut wie allen Fällen nicht zugänglich sind, ist man beim Kauf von Speicher-Kits auf der sicheren Seite – obwohl der Dual-/Triple-Channel-Modus normalerweise auch mit unterschiedlichen Modulen funktioniert.
Als Mittler zwischen den großen Speicherchip- und Modulherstellern einerseits und dem Handel und den Verbrauchern andererseits haben sich in Deutschland Anbieter wie z. B. CompuStocx, CompuRAM, MemoryXXL und Kingston etabliert, die für die gängigsten Systeme spezifizierte Speichermodule anbieten. Das ist deshalb notwendig, weil einige Systeme durch künstliche Beschränkungen durch den Hersteller nur mit Speicher arbeiten, der proprietäre Spezifikationen erfüllt.