Segmentdescriptor

Uit Wikipedia, de vrije encyclopedie

Een segmentdescriptor is een cacheregister, of eigenlijk de inhoud daarvan, in de microprocessoren van de serie i86, vanaf de 80286.

Geschiedenis[bewerken | brontekst bewerken]

Het prototype van de serie microprocessoren is de 8086. Deze heeft 20 adreslijnen en kan dus 1 MiB geheugen adresseren. De registers zijn echter slechts 16 bits groot.

Om toch zo veel geheugen te kunnen adresseren, heeft de 8086 segmentregisters, eveneens van 16 bits. Telkens als het geheugen geadresseerd wordt, wordt daarbij gebruikgemaakt van een segmentregister, waarvan de inhoud wordt aangevuld met vier nulbits.

80286[bewerken | brontekst bewerken]

De 80286 heeft 24 adreslijnen en de 80386 zelfs 32. Eigenlijk hebben deze microprocessoren dan ook grotere segmentregisters nodig, maar dat zou problemen geven met bestaande programmatuur.

Bij de oplossing van dit probleem realiseerde men zich dat een segmentregister weliswaar 65 536 verschillende waarden kan bevatten, maar dat er nimmer zo veel segmenten in gebruik zijn.

In de protected mode van de 80286 en latere processoren bevat het segmentregister dan ook niet het adres van het segment, maar een index naar een tabel waarin de adressen staan. Behalve de adressen bevat de tabel ook informatie over de grootte van de segmenten en de beveiliging. Dit zijn de segmentdescriptors.

Steeds als een segmentregister geladen wordt, wordt de tabel geraadpleegd en de descriptor in een cacheregister geladen.

Het laden van een segmentregister is daardoor een vrij trage bewerking die in protected mode veel meer tijd kost dan in real mode.

De cacheregisters zijn met de programmatuur niet toegankelijk en kunnen niet door een programma geïnspecteerd worden. Ze worden door de processor geraadpleegd als het geheugen geadresseerd wordt.

Voor de segmentregisters geldt het omgekeerde: ze zijn voor de programmatuur wel toegankelijk en worden niet door de processor geraadpleegd.

Real mode[bewerken | brontekst bewerken]

Werkt de processor in real mode, dan wordt de tabel niet geraadpleegd. Elke keer als een segmentregister geladen wordt, wordt bovendien de nieuwe waarde met 16 vermenigvuldigd en in het bijbehorende cacheregister geplaatst.

Dit is het belangrijkste verschil tussen real mode en protected mode.

Bij het adresseren van het geheugen wordt, net als in protected mode, alleen het cacheregister geraadpleegd.