# Computersystemen/Geheugen
## Doelstellingen

Onderstaande doelstellingen komen in meer of mindere mate aan bod. De grijze doelstellingen komen hier niet aan bod. Dat zijn bv. praktijkoefeningen die aansluiten bij deze theorie, maar die in dit Wikibook niet behandeld worden. Of bv. theorie die in een ander hoofdstuk wordt behandeld.
Uit het leerplan van Applicatie- en Databeheer, een deel van leerplandoel 23:
* LPD 23: De leerlingen lichten de opbouw en werking van een computersysteem met zijn basiscomponenten en optionele componenten toe.
** Aansluitingen en connectoren
** Functie van controller en driver
* Lexicon. De basiscomponenten van een computersysteem zijn: moederbord, processor,intern geheugen (werkgeheugen, cache geheugen, systeemgeheugen, CMOS), koeling, voeding, grafische kaart, klok.
* Lexicon. De optionele componenten van een computersysteem zijn hardwarecomponenten die dienen voor invoer, uitvoer of opslag
* Wenk. Enkel de gangbare actuele basiscomponenten en optionele componenten van een computersysteem worden besproken. Je kan ook sensoren als mogelijk invoerapparaat voor een smartphone behandelen.
Uit het leerplan Toegepaste Informatica van de richting Informaticabeheer:
* 1.2.5 De soorten intern geheugen toelichten, onder meer cachegeheugen, werkgeheugen.
* 1.2.6 De basiswerking van het intern geheugen en de geheugenadressering toelichten.
* 1.2.7 Het onderscheid tussen (intern) geheugen en permanente gegevensopslag (storage) toelichten.
* 1.4.3 Actuele types intern geheugen toelichten in functie van hun gebruik.
* 1.4.6 Aan de hand van technische specificaties diverse uitvoeringen van optionele componenten vergelijken.

## Soorten

Het interne geheugen is een aanduiding voor computergeheugen dat zich op het moederbord bevindt. Traditioneel wordt er voor het interne geheugen een onderscheid gemaakt tussen:
* ROM-geheugen, bv. BIOS-ROM (voor het bewaren van de startprocedures).
* RAM-geheugen, toegepast bij bv.:
** het hoofd-, of werkgeheugen;
** cachegeheugen van een processor;
** cachegeheugen van een opslagmedium;
** de CMOS-RAM (voor het bewaren van de BIOS-instellingen).
Het systeemgeheugen is het geheugen dat het besturingssysteem ter beschikking heeft en fungeert op verschillende niveaus in de geheugenhiërarchie.

### ROM

ROM is een type van een niet-vluchtig (non-volatile) geheugen. Strikt gezien staat ROM voor read-only memory, maar zoals je merkt aan onderstaande evolutie van ROM is het ‘alleen lezen’ niet altijd meer van toepassing.
* MROM (Mask ROM) wordt in de chipfabriek van de nodige gegevens voorzien en kan daarna niet meer gewijzigd worden. Dus héél moeilijk te hacken, maar kan dus ook geen updates krijgen (bv. omwille van stabiliteit of veiligheid).
* EPROM (Erasable Programmable ROM) kan gewist worden met ultraviolet licht, om daarna nieuwe inhoud te voorzien. In de begindagen van BIOS werd deze manier gebruikt voor de BIOS-ROM.
* EEPROM (Electrically Erasable PROM) kan (delen van) dit geheugen via een elektrische spanning wissen en opnieuw van inhoud voorzien. Dit gaat dus al een stuk gemakkelijker in vgl. met EPROM (zowel voor updates ed., maar helaas ook voor eventuele hackers). Als toepassingen heb je de BIOS EEPROM of het EEPROM geheugen van de Arduino. Het flashgeheugen werkt ook op basis van deze EEPROM-techniek.
* EPROM
* EEPROM
* AMIBIOS
* ROM

### RAM

RAM-geheugen (ook bekend als het geheugen, hoofdgeheugen of werkgeheugen) is random-access memory. Dit wijst op het feit dat de data, zowel lezen als schrijven, in ongeveer dezelfde tijd kan gebeuren, onafhankelijk van de fysieke plaats waar de data staat. Het gaat hier om vluchtig (volatile) geheugen: als de spanning wegvalt, wordt de data “vergeten”. Dat is een duidelijk nadeel, maar het voordeel is dat het een heel snelle geheugenvorm is. Het kan dat het RAM-geheugen te vervangen is of uit te breiden valt (bv. met RAM-latjes of RAM-modules bij desktops, laptops en servers) of dat het vast geïntegreerd is met het systeem (smartphones, videokaart, Raspberry Pi, Arduino, cachegeheugen CPU,...).
* Verschillende RAM
* RAM-chip
* Logische organisatie van een DRAM-chip
* Fysische organisatie van een DRAM-chip
Bij sommige systemen zijn er enkele gigabytes ter beschikking (bij de meeste dekstops, laptops en smartphones) en hoef je je geen zorgen te maken om apps te sluiten. Het RAM-geheugen verbruikt vaak sowieso energie en als een applicatie die niet gesloten is terug wordt geopend, dan moet deze vaak van een trager opslagmedium komen (wat energie en tijd kost). Slimme besturingssystemen zullen de software in de achtergrond laten draaien, zelfs als de eindgebruiker deze heeft gesloten. Bij andere toepassingen heeft een afweging in kostprijs, grootte en/of verbruik ervoor gezorgd dat er een stuk minder RAM-geheugen aanwezig is (bv. Raspberry Pi, Arduino). De keuze van besturingssysteem en software wordt dan belangrijk. Ook in gebruik moet men rekening houden om ongebruikte programma's sneller te sluiten.
Er zijn verschillende types van RAM-geheugen, zoals T-RAM, Z-RAM, MRAM, NVRAM,… Wij beperken ons tot de twee bekendste: DRAM en SRAM:
* Dynamic RAM is de eenvoudigste constructie: ze vereist een veel kleinere oppervlakte dan SRAM en is dus goedkoper in productie. DRAM kan slechts enkele milliseconden zijn informatie behouden. Het gevolg hiervan is dat vele malen per seconde een refresh moet gebeuren. DRAM wordt gebruikt voor het werkgeheugen. Verder wordt SDRAM besproken.
* Static RAM is complexer in opbouw t.o.v. DRAM: ze vereist een grotere oppervlakte en is duurder in productie. SRAM hoeft geen refresh en is bovendien sneller dan DRAM. SRAM wordt gebruikt voor het (duurdere) cachegeheugen. Dit cachegeheugen bevindt zich (fysisch) zeer dicht bij de CPU. Daar het vaak op dezelfde chip als de CPU zit, is het al besproken bij het hoofdstuk van de processor.
Ook de GPU heeft nood aan (video)geheugen:
* Bij shared graphics memory heeft de grafische chip geen eigen geheugen, maar wordt het hoofdgeheugen gebruikt, dat dan moet gedeeld worden met de CPU en andere componenten.
* Bij dedicated memory heeft de GPU eigen grafisch geheugen op de chip kan dit uitgevoerd zijn met DDR, VRAM, WRAM, MDRAM, gDDR2-gDDR5,… Merk op dat DDR en gDDR twee verschillende technieken zijn! Dit geheugen is bijna altijd vast geïntegreerd op de videokaart.

### Systeemgeheugen

Als je een rekenbladprogramma opent, dan staat dit op je opslagmedium (bv. SSD of HDD). Dit bewaart het programma blijvend (permanent): ook als je computer uit staat, staat dat programma op jouw opslagmedium.
Om er ook iets mee te kunnen doen, moet het programma geladen worden, zodat het kan uitgevoerd worden door de processor. Het probleem is dat een opslagmedium véél trager is dan de processor, waardoor de processor vooral zou moeten wachten. Vandaar wordt een programma niet rechtstreeks uitgevoerd vanaf het opslagmedium, maar eerst gekopieerd naar het werkgeheugen. Deze wordt vaak ook aangegeven als intern geheugen of RAM. Het voordeel is dat deze een pak sneller is dan de gewone opslag. Nadelen zijn dat deze duurder is en de inhoud verliezen van zodra de spanning wegvalt.
Dat werkgeheugen is sneller dan de gewone opslag, maar helaas nog steeds trager dan de processor. Vaak wordt tussen het werkgeheugen en de processor nóg sneller geheugen gebruikt: het cachegeheugen. Dit is vaak nog duurder en daardoor vaak relatief klein, maar kan wel een snelheidsvoordeel opleveren. Dit is al besproken als component bij de processor.
Het rekenbladprogramma zelf zal dus geheugen innemen: het programmageheugen. Maar ook het rekenbladbestand wordt geladen vanaf het opslagmedium naar hetzelfde werkgeheugen. Om het verschil duidelijk te maken wordt hier gesproken over het datageheugen. Als je wijzigingen aanbrengt aan het rekenbladbestand, dan wordt dit onmiddellijk aangepast in het werkgeheugen (meer specifiek het datageheugen), maar niet noodzakelijk in het opslagmedium. Als automatisch opslaan uitstaat zal je jouw aanpassingen verliezen bij een crash of bij energieverlies.
Soms blijkt het werkgeheugen te klein te zijn en dan is er nood aan virtueel geheugen. Dit wordt besproken bij de geheugenbeheerder als onderdeel van de functie van een besturingssysteem.

### Verwarring

Mogelijke verwarring:
* ROM staat strikt gezien voor Read Only Memory, maar zoals je eerder kon lezen zijn sommige vormen van ROM tóch te herschrijven. Bv. BIOS EEPROM of het EEPROM geheugen van de Arduino.
* Geheugen (memory) en opslag (storage) worden soms onterecht door elkaar gebruikt. Het eerste bewaart de data echter vaak tijdelijk, terwijl de tweede dat permanent doet. Denk bij het tweede bv. aan een HDD, SSD of SD-kaartje (meer info bij opslagmedia).
* De term intern geheugen wordt vaak gebruikt, maar het is niet altijd duidelijk wat er precies wordt bedoeld. Meestal slaat het op 'intern in de computerbehuizing', waardoor het of werkgeheugen (RAM) of cachegeheugen kan zijn. Meestal bedoelt men echter met intern geheugen het RAM-geheugen.
* In het voorbeeld wordt een geladen rekenbladbestand als voorbeeld van datageheugen. Merk op dat het niet altijd afkomstig moet zijn van een bestand. Bv. een programma dat als invoer de straal van een cirkel aan de eindgebruiker vraagt en als uitvoer de oppervlakte berekent. De effectieve straal en de oppervlakte zijn dan onderdeel van het datageheugen.

## SDRAM

SDRAM (Synchronous DRAM) gaat van DDR SDRAM tot DDR4 SDRAM. In opeenvolgende versies zorgt men niet alleen voor geheugenmodules met grotere capaciteit en hogere snelheid, maar ook het energieverbruik krijgt meer aandacht.

### Werking

Uit het hoofdstuk van computerbussen weten we al hoe het gegevenstransport tussen het geheugen en de CPU gebeurt. Maar hoe werkt dit binnenin het RAM-geheugen? Hardwarematig bestaan de geheugencellen van de DRAM-chip uit miniscule transistoren die door een bepaalde lading vast te houden informatie kunnen bewaren. Bekijken we het op een logische manier, dan kunnen we dit geheugen bekijken als een geordende tabel met rijen en kolommen. In ieder knooppunt van een rij en een kolom kan 1 informatiebit bewaard worden (0 of 1). Als meerdere bits worden uitgelezen spreekt met over 'woorden'.
Het lezen van een bit gaat ongeveer als volgt te werk.
* Via de RW-lijn wordt aangegeven dat er zal worden gelezen (read) i.p.v. geschreven (write).
* De helft van het adres wordt op de adresingangen (A) gezet. De RAS-lijn (Row Address Strobe) wordt geactiveerd. De rijadresdecoder (groen, verticaal) decodeert het adres en selecteert een rij uit de matrix (blauw) van geheugenelementen. Deze rij wordt gekopieerd naar de buffer (rood).
* De andere helft van het adres op de adresingangen gezet en de CAS-lijn (Column Address Strobe) geactiveerd. De kolomadresdecoder (groen) decodeert het adres. De juiste bit wordt geplaatst op de datalijn.

### Specificaties

Specificaties zoals de capaciteit, de spanning waarop de RAM-module werkt (bv. 1,2 volt) of het aantal aansluitpunten hoeft geen verdere uitleg.

#### Snelheid

Er zijn heel wat DDR-generaties, waarvan we van enkele hun kenmerken bekijken:
| Standaardnaam | I/O bus clock (MHz) | Data rate (MT/s) | Modulenaam | Peak transfer rate (MB/s) |
| DDR2-667C DDR2-667D | 333,33 | 666,67 | PC2-5300 | 5333,33 |
| DDR3-800 | 400 | 800 | PC3-6400 | 6400 |
| DDR3-2133 | 1066,67 | 2133,33 | PC3-17000 | 17066,67 |
| DDR4-2400 | 1200 | 2400 | PC4-19200 | 19200 |
De cijfers zijn niet toevallig. Zo is de data rate dubbel zo groot als de I/O bus clock, omdat het hier gaat over DDR (zie basiskennis informatica > snelheid > transfers). Als je de data rate vermenigvuldigt met 64 bit (want de bus is zo breed) en deelt door 8 (8 bits is 1 byte), dan bekom je de peak transfer rate. Je merkt dat in de standaardnaam de data rate vermeld is en de peak transfer rate in de modulenaam.

#### Multi-channel memory architecture

Wat betekent precies dual, triple of quadchannel geheugen? We weten al dat de communicatie tussen geheugen en processor gebeurt via de databus. Standaard is die bus 64 bit breed, wat betekent dat er 64 “draden” zijn. In de geschiedenis van de computer bleef de processorsnelheid maar toenemen, waarbij de geheugentechnologie dit niet kon bijbenen. Vandaar heeft men dual channel bedacht: de technologie van de geheugenmodules bleef quasi hetzelfde, maar het aantal “draden” werd verdubbeld. Hierdoor verdubbelt ook de beschikbare bandbreedte. De bus wordt dan 128 bits breed.
Het verhaal stopt hier niet, daar de geheugenmodules nog steeds 64 bit hardware blijft. Willen we dus kunnen gebruikmaken van deze dubbele bandbreedte, dan moeten we twee identieke geheugenmodules gebruiken.
Hoe kan je deze techniek beschikbaar maken, bv. bij een moederbord met dual channel en 4 RAM slots:
* Het moederbord moet dual channel ondersteunen (meer specifiek de geheugencontroller van het moederbord).
* Je moet twee of vier geheugenmodules hebben. Per paar moeten ze identiek (type en capaciteit) zijn aan elkaar.
* Het paar kan je niet willekeurig installeren: je moet de handleiding nalezen hoe je ze moet installeren. Heel vaak wordt dit met kleuren aangegeven.
Bij het voorbeeld uit de afbeelding:
* Vier identieke RAM-modules van elk 2 GB kan je om het even waar installeren.
* Bij twee identieke RAM-modules van 2 GB en twee identieke van 1 GB, zullen deze van 2 GB in het eerste en derde slot moeten en de andere in de overige slots.
* Eén module van 8 GB zal een even grote capaciteit hebben als in het eerste voorbeeld, maar deze setup zal zonder dual channel werken. Dit betekent dat er 64 bits per klokcyclus verwerkt zullen worden.
* Als je twee identieke RAM-modules van 4 GB in de eerste twee slots stop, zal je een totale capaciteit hebben van 8 GB, maar zonder dual channel.
Drie belangrijke opmerkingen:
* Dual channel is geen synoniem voor DDR=double data rate (zie basiskennis informatica > snelheid > transfers)! DDR ed. heeft te maken met hoe men het kloksignaal gebruikt.
* De verdubbeling bij bv. dual channel is enkel een theoretische verdubbeling op het geheugendeelsysteem. Het gebruik van dual channel betekent dus zeker geen verdubbeling van de snelheid van het volledige systeem! Als een bakker een machine aanschaft die dubbel zo snel kan kneden, zal het brood niet dubbel zo snel klaar zijn, omdat o.a. de oven nog dezelfde is.
* Dit is een technologie die geïmplementeerd wordt op het moederbord, waarbij dus de techniek van geheugenmodules hetzelfde blijft, of ze nu werken in single channel of in multi channel modus.
Bij triple en quad-channel archituren is het verhaal gelijklopend. In de handleiding van het moederbord vind je vaak de aangeraden (recommended) manier terug om de modules te installeren, zodat je de best mogelijke prestaties haalt.

#### Bouwvorm

De geheugenmodules zijn DIMM-modules (dual in-line memory modules): de naam verwijst naar het feit dat er aan beide zijden aansluitpunten zijn. Voor laptops is er SO-DIMM, een kleiner alternatief (small outline).

#### Timings

Bij de specificaties vind je vaak timings terug, bv. CL15 15-15-29. Ter info geven we mee wat deze concreet betekenen:
* CAS Latency (CL) 15
* RAS-to-CAS-Delay (tRCD) 15
* RAS-Precharge-Time (tRP) 15
* Row-Active-Time (tRAS) 29
Het belangrijkste is dat je weet deze deze het aantal kloktikken illustreren i.v.m. vertragingen (latencies) die de snelheid van het RAM-geheugen bepalen. Hoe lager deze waarden, hoe beter de prestatie. Zo zit er een zekere tijd tussen het zenden van het kolomadres en het ontvangen van de data (bepaald door de CAS latency). Precharge heeft dan weer te maken met het refresh-circuit. Bij sommige geheugenmodules kan je deze timings lager zetten en daarmee het geheugen overklokken. Daardoor kan het wel zijn dat je systeem minder stabiel wordt!

#### ECC

ECC-geheugen (Error-correcting code memory) is een type RAM die de meeste bitfouten kan ontdekken en corrigeren om zo internal data corruption tegen te gaan. ECC-geheugenchips worden speciaal gemaakt voor wetenschappelijke of financiële computers: daar wil je zeker niet dat je iets opslaat in het RAM-geheugen, om dan iets anders terug te lezen. Bij consumentencomputers vind je ze meestal niet terug.

### Aansluiten en testen

Het RAM-geheugen kan rechtstreeks geïntegreerd zijn op het moederbord of in een chip, waardoor je deze niet kan vervangen. In het geval van een desktop, server of laptop kan je dit bijna altijd wél doen. Het vraagt wel wat voorbereiding:
* De handleiding is een belangrijke bron van informatie.
** Zoek welke types jouw moederbord ondersteunt. Vaak zijn de hoofdversies compatibel met elkaar, maar als je ze samen gebruikt, kan het zijn dat er teruggeklokt wordt naar de traagste. Zo kan je bv. een setup hebben met een DDR3-1600 geheugenmodule en een vrij RAM-slot. Als je het systeem uitbreidt met een DDR3-800 geheugenmodule heb je wel een toegenomen capaciteit, maar kan de snelheid (drastisch) afnemen als je moederbord terugklokt naar de traagste geheugenmodule. DDR2 en DDR3 geheugenmodules zijn onderling niet compatibel.
** Zoek de totale maximumcapaciteit dat het moederbord ondersteunt. Er kan ook een beperking zijn van maximumcapaciteit per RAM-module.
** Controleer in de handleiding waar je welke RAM-modules moet plaatsen op optimaal gebruik te maken van een eventuele multi-channel memory architecture. Vaak kan je afgaan op het kleur, maar lees toch best de handleiding na. Heb je bv. 4 RAM-slots en 4 identieke RAM-modules, dan maakt het uiteraard niet uit.
* Onderzoek wat jouw concrete mogelijkheden zijn.
** Als er geen vrije RAM-slots zijn zal je één of meerdere bestaande RAM-modules moet opofferen om extra capaciteit te hebben. Hopelijk kan je deze ergens anders gebruiken of vind je er een tweedehands markt voor.
** Het kan te overwegen zijn om bestaande RAM-modules te vervangen door een compatibele, maar snellere module. Verwacht hier echter geen wonderen van, want de vermelde snelheden zijn altijd theoretisch en bovendien wordt de snelheid ook door andere componenten van het systeem bepaald.
** Compatibele modules kan je in principe door elkaar gebruiken, maar als je de keuze hebt is het beter om hetzelfde type, capaciteit en van dezelfde fabrikant te nemen.
* Let goed op bij het aansluiten
** Zorg ervoor dat de (vaak witte of zwarte) vastzetpunten naar buiten gekanteld zijn.
** Bekijk de inkepingen in de RAM-modules en stem dit overeen met de RAM-slots. Lijkt het niet te passen? Dan heb je een RAM-module vast dat zeker niet compatibel is
** Voor het vaszetten van de RAM-module moet je enige druk uitoefenen. Vaak zullen de aansluitpunten vanzelf de RAM-module vaszetten, maar eventueel moet je ze extra vastklikken, om zeker te zijn.
Problemen met de pc kunnen soms te wijten zijn aan het RAM-geheugen. Het kan dat dit duidelijk wordt gemaakt door beep-geluiden (verkeerde RAM, slechte RAM,...). Het kan ook subtieler zijn dan dat. Als je pc willekeurig lijkt te crashen, dan kan dat zijn dat een programma in een slecht werkende RAM-chip wordt geladen. Wil je RAM-geheugen testen, dan kan dat met Memtest86+. Doorheen de jaren kan stof of trillingen zorgen dat het contact niet meer zo goed is. Het verwijderen van stof en de modules opnieuw vastzetten kan een probleem oplossen.
* ↑ Leerplan Informatica- en communicatiewetenschappen B + S - 3de graad - D-finaliteit
* ↑ Meer informatie op leerplan D/2015/7841/003
* ↑ Een veel uitgebreidere uitleg staat in het artikel 'How RAM Works'.
* ↑ Zie bv. het uitgebreide artikel 'Memories of an Arduino' die de verschillende geheugenvormen van Arduino bespreekt.
* ↑ Zie bv. het Tweakers.net-artikel 'Meer dan 20 techbedrijven richten zich gezamenlijk op mram-ontwikkeling' uit 2013 dat het heeft over meer dan 20 techbedrijven die zich richten op MRAM-ontwikkeling.
* ↑ Bron: Hardware Secrets, met Everything You Need to Know About the Dual-, Triple-, and Quad-Channel Memory Architectures. Het Tweakers.net-artikel Laptopgeheugen: Het verschil tussen single- en dualchannel is ook interessant