# Geheugenhiërarchie

Geheugenhiërarchie is in de computertechniek het geheel van mechanismen in een digitale computer dat als doel heeft een optimale prestatie te krijgen met een kleine hoeveelheid snel en duur geheugen en een grote hoeveelheid langzaam en goedkoop geheugen. Er wordt gesproken van een hiërarchie omdat de bovenkant, de top, van de hiërarchie (met het snelste geheugen) het smalst is (er wordt weinig van dit snelle geheugen gebruikt), en de onderkant van de hiërarchie het breedst is (er wordt relatief veel langzaam geheugen gebruikt).

## Werking

Een processor werkt vele malen sneller dan zelfs het snelste geheugen. Wanneer er wordt gekeken naar geheugen dat zich niet op dezelfde chip bevindt, dan kan dat tot 10 maal langzamer zijn. Vanuit een prestatie-oogpunt is het dus zeer onvoordelig om de processor te laten wachten op data die moet worden opgehaald van veel tragere componenten.
Aangezien het heel moeilijk en fysisch bijna onmogelijk is de snelst mogelijke geheugenschakelingen aan te bieden in een arbitraire grootte, wordt het fysisch geheugen gerangschikt in een hiërarchie die als doel heeft het verschil in snelheden optimaal te gebruiken. Dit gebeurt door de snelste geheugens (met de duurste schakelingen), het registergeheugen, in de processor te plaatsen. Buiten de processor, maar op dezelfde chip, wordt vervolgens een cachegeheugen gebruikt. De volgende trap vormt het hoofdgeheugen.
Ook is men in staat om door een combinatie van hardware- en softwaretechnieken het te doen lijken of de processor beschikking heeft over een bijna oneindige voorraad aan snel geheugen: stukken data worden alvorens die gebruikt worden overgebracht in een hoger niveau in de geheugenhiërarchie. Op het moment dat de processor deze gegevens nodig heeft, heeft die direct toegang ertoe (en bevinden de gegevens zich dicht bij de processor).
Gerelateerd met de geheugenhiërarchie is het processorgeheugenknelpunt. Jaarlijks wordt een processor gemiddeld 60% sneller, terwijl de toegangstijd tot het geheugen maar daalt met een 7% per jaar. Deze kloof wordt dus steeds groter en steeds knellender. Veel optimalisatietechnieken zijn dan ook gebaseerd op het verminderen van de gegeventransfers (data-overdracht) tussen de verschillende lagen in het fysisch geheugen enerzijds en het geheugen en de processor anderzijds.
Het cachegeheugen bevindt zich op dezelfde chip als de processor. Doordat voor de gegevenstransfers interne bussen op de chip gebruikt kunnen worden, gecombineerd met de snelle geheugenschakelingen, is dit snel en dus duur geheugen. Moderne Digital Signal Processors (DSPs) bezitten een cachebeheerder: aan de hand van een aantal heuristische technieken wordt er transparant een inschatting gemaakt voor het datagebruik: de cachebeheerder probeert te voorspellen wat de processor in de nabije toekomst nodig zal hebben. Hierbij wordt vermeden dat de processor moet wachten op data.
In gespecialiseerde processoren voor signaalverwerking is de indeling en plaatsing van gegevens in de geheugenhiërarchie van speciaal belang. Hoewel een cachebeheerder duidelijk een gedeelte van de werklast van de programmeur weghaalt, komt het toch aan een kostprijs: de schakelingen zijn niet in staat een intelligente inschatting te maken gebaseerd op de structuur van het algoritme.
Bij deze DSP-algoritmes wordt de transfer van geheugen van extern (dus op een andere siliconchip, en toegankelijk via een externe bus) naar intern geheugen gedaan door Direct Memory Access: de programmeur haalt de data op van en slaat die op naar extern geheugen. Daar kunnen andere componenten (zoals een Field Programmable Gate Array (FPGA)) dan de data verder verwerken.

## Voorbeeld

Van snel naar traag, enkele geheugentypes:
* cachegeheugen van een processor (duurst en snelst), bijvoorbeeld SRAM
* DRAM, bijvoorbeeld DDR SDRAM
* solid state drive (SSD, goedkoper)
* harde schijf (goedkoper dan een SSD maar duurder dan magneetband)
* magneetband (goedkoopst, maar traagst - de toegang is sequentieel in tegenstelling tot een harde schijf of SSD)