Ontwerp en bouw een besturingssysteem/Foutenopsporing/Segmentatie
In real mode heeft elk programma de beschikking over maximaal 1 MiB (220 bytes). Om de laatste byte hiervan te adresseren, zou je 20 bits op 1 moeten zetten. Maar omdat in real mode de processor maar kan rekenen met 16 bits, moest er een manier worden gevonden om die laatste 4 bits te kunnen uitdrukken. Daarvoor is het geheugen opgedeeld in segmenten van 64 KiB (16-bits segmenten, 216 bytes). Elk segment begint op een veelvoud van 16 bytes, en ze kunnen elkaar dus overlappen. Dit gebruik van segmenten heet segmentatie.
De x86 processoren hebben een aantal registers gereserveerd voor deze segmenten. Deze registers zijn onafhankelijk van elkaar:
Register | Naam | Beschrijving |
---|---|---|
CS | Code Segment | Voor uitvoerbare code. |
DS | Data Segment | Voor gegevens. |
SS | Stack Segment | Voor de stack. |
ES | Extra Segment | |
FS | - | Voor algemeen gebruik. |
GS |
Veel instructies hebben al een 'favoriet' segment register dat ze gebruiken als je niet expliciet wat anders aangeeft.
Protected Mode
[bewerken]In protected mode gebruik je segmenten net als in real mode, maar ze werken anders. De 32-bits segment selector is een offset in de Global Descriptor Table, of GDT. De GDT bevat een aantal 'descriptors'. Elke descriptor beschrijft een deel van het geheugen, en de bijbehorende attributen.
...