Wikisage, de vrije encyclopedie van de tweede generatie, is digitaal erfgoed

Wikisage is op 1 na de grootste internet-encyclopedie in het Nederlands. Iedereen kan de hier verzamelde kennis gratis gebruiken, zonder storende advertenties. De Koninklijke Bibliotheek van Nederland heeft Wikisage in 2018 aangemerkt als digitaal erfgoed.

  • Wilt u meehelpen om Wikisage te laten groeien? Maak dan een account aan. U bent van harte welkom. Zie: Portaal:Gebruikers.
  • Bent u blij met Wikisage, of wilt u juist meer? Dan stellen we een bescheiden donatie om de kosten te bestrijden zeer op prijs. Zie: Portaal:Donaties.
rel=nofollow

Registergeheugen

Uit Wikisage
Versie door Lidewij (overleg | bijdragen) op 12 mrt 2010 om 11:44 (→‎Registers en compilerbouw)
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Naar navigatie springen Naar zoeken springen

Registergeheugen is intern geheugen dat gebruikt wordt in processoren om waarden op te slaan waar de processor direct toegang toe moet hebben om zijn werk te kunnen voltooien.

Registergeheugen

Bewerkingen van de processor

Een processor zoals die normaal voorkomt in computers is een Von Neumannmachine die in principe eeuwig de drie stappen van Von Neumann uitvoert: Haal de volgende instructie op - decodeer de instructie - voer de instructie uit.

Alle data in de computer is gecodeerd in de vorm van bitrijen -- rijen van 1'en en 0'en. Om de bovengenoemde stappen uit te kunnen voeren, moet de processor enig werk verzetten. Bijvoorbeeld moet de processor uit een gegeven bitrij ontcijferen welke instructie die bitrij voorstelt. Tijdens het uitvoeren van dit werk heeft de processor een plaats nodig om zijn invoer en eventuele tussenresultaten op te slaan. Iets dergelijks geldt voor het uitvoeren van instructies zoals het optellen of vermenigvuldigen van twee waarden: invoer, uitvoer en tussenresultaten moeten allemaal ergens opgeslagen worden totdat de processor het resultaat wegzet en met de volgende instructie kan beginnen.

Iedere computer is uitgerust met een redelijke hoeveelheid RAM-geheugen, het zogenaamde werkgeheugen. Dit geheugen is via een bus verbonden met de processor. Het is dus denkbaar om een systeem in te richten waarbij de processor een (mogelijk vast gekozen) deel van dit RAM-geheugen als tijdelijke werkplaats gebruikt. De afstand tussen processor en geheugen (te overbruggen via de bus) maakt een dergelijke oplossing echter ondoenlijk; voor iedere microstap van de processor zouden de bits af- en aangevoerd moeten worden over die enorm lange bus. Om deze reden beschikt de processor over een hoeveelheid geïntegreerd geheugen dat hij directer kan benaderen. Deze groepen cellen worden registers genoemd en vormen samen het registergeheugen.

Kosten en baten

Zoals eerder opgemerkt, bevindt het registergeheugen zich direct op de processor. De processor heeft hierdoor veel sneller toegang tot de data die in zijn registers opgeslagen liggen -- de datapaden tussen de registers en de bewerkingseenheden van de processor zijn extreem kort. Het gebruik van registergeheugen is dan ook ettelijke malen sneller dan het gebruik van RAM-geheugen, zowel in de toegangstijd tot het geheugen als in de opzoektijd (die gelijk is aan 0 μs).

Hier staat tegenover dat de registers in de processor geïntegreerd zijn; registers zijn dus vele malen duurder per eenheid van opslag dan RAM-geheugen en nog eens veel duurder dan bijvoorbeeld opslagruimte op een harde schijf. Bovendien is het aantal registers gelimiteerd door de beschikbare oppervlakte van de processor, hoewel steeds verdergaande miniaturisering de mogelijke hoeveelheid geheugen op de processor wel vergroot. Het is dus vooral zaak voor de besturing van de computer (zowel in de hardware-zin als in de zin van de programma's) om een optimale verdeling van de benodigde geheugencapaciteit tussen registergeheugen en RAM-geheugen te bereiken.

Het gebruik van registers

Registersoorten

In grote lijnen zijn er twee soorten bitrijen waar een processor mee te maken krijgt tijdens zijn werk:

  • Informatiedragende bitrijen : Dit zijn bitrijen die pure data bevatten, zoals een karakter dat op de monitor moet verschijnen of een getal dat ergens bij opgeteld moet worden
  • Besturingsgevoelige bitrijen : Dit zijn bitrijen die invloed hebben op de werking van de processor. Ze bevatten instructies voor de processor en verwijzingen naar cellen in het RAM-geheugen waar de processor weer andere bitrijen kan vinden die van belang zijn voor het uitvoeren van zijn werk. Deze verwijzingen worden adressen genoemd.

Hoewel beide bitrijen feitelijk niet meer zijn rijen dan 1'en en 0'en (strikt volgens het principe van John von Neumann), zijn er toch verscheidene processoren die hun beschikbare registers "specialiseren" naar toepassing (adressen of data). Hoewel de fysieke opbouw van de twee soorten registers niet verschilt, is het door deze onderverdeling vaak mogelijk om betere prestaties te behalen in de werking van de processor omdat er bij de implementatie van een aantal instructies in de processor van uit kan worden gegaan dat bepaalde registers bepaalde soorten data bevatten.

Overigens is de bovengenoemde scheiding ook weer geen wet van Meden en Perzen. Er zijn ook genoeg processoren op de markt die een dergelijk onderscheid niet aanbrengen, of die wel een onderscheid aanbrengen maar dan ook een derde groep van registers hebben die beide soorten data mogen bevatten, of waarvan de adresregisters puur voor adressen zijn en de data-registers data of adressen mogen bevatten.

Overzicht van typen

Er zijn verschillende soorten registers te onderscheiden:

  • Dataregisters slaan gehele getallen op. In sommige oudere architecturen en eenvoudige moderne processoren is er een speciaal dataregister, de accumulator, die impliciet wordt gebruikt voor veel bewerkingen.
  • Adresregisters bevatten geheugenadressen en worden gebruikt om computergeheugen te benaderen. In sommige processoren is er een speciaal adresregister, het indexregister.
  • General purpose-registers (GPRs) Deze registers kunnen zowel getallen als adressen bevatten.
  • Floating point-registers (FPRs) worden gebruikt om floating point getallen op te slaan.
  • Constante-registers bevatten waarden die constant zijn (nul, een, pi, ...).
  • Vectorregisters bevatten gegevens voor vector processoren uitgevoerd met SIMD instructies.
  • Special purpose-registers bevatten de status van een programma. Over het algemeen worden hier de instructie pointer, de stack pointer en het status register bijgehouden.
    • Instructieregisters bevatten de instructies die op dat moment worden uitgevoerd.
    • Indexregisters worden gebruikt voor het aanpassen van operand adressen tijdens de uitvoering van een programma.
  • Registers die worden gebruikt voor het lezen van gegevens uit het hoofdgeheugen, een verzameling van opslagregisters die op andere chips dan de processor aanwezig zijn:
    • Geheugenbufferregister
    • Geheugendataregister
    • Geheugenadresregister

Registers en compilerbouw

Deze wildgroei aan mogelijkheden zorgt voor een aanzienlijke uitdaging aan schrijvers van compilers. Hun compilers vertalen programma's in machine-instructies en bouwen daarbij ook een verdeling op van opslag van data over registers en geheugen. Het is voor de programmeur een grote uitdaging om programma's zo te vertalen dat de opgebouwde verdeling optimaal is en zo de beste prestaties uit het gehele systeem haalt.

rel=nofollow