Ontwerp en bouw een besturingssysteem/Foutenopsporing/Global Descriptor Table
De Global Descriptor Table, of GDT, bevat een aantal descriptors die elk een deel van het geheugen beschrijven. De GDT is een onderdeel van het concept van segmentatie, maar wordt tegenwoordig nauwelijks nog gebruikt. Paging heeft veel van de voordelen van segmentatie, en meer. En paging kan bovenop segmentatie gebruikt worden.
Standaard descriptors
[bewerken]In Appendix B: GDT descriptors staan de verschillende descriptor types beschreven. Ook al gebruiken we geen segmentatie, de processor eist van ons dat we geldige descriptors in de GDT laden. Daarom gebruiken we een aantal standaard descriptors die het gehele 32-bit geheugenbereik van 4 GiB omvatten, het zogenaamde flat memory model. We moeten daarvoor de volgende descriptors definiëren:
- Null descriptor
Het eerste item in de GDT. Deze is vereist, maar wordt niet gebruikt door de processor. - Code segment descriptor
Geeft het bereik aan waarin uitvoerbare code mag staan. - Data segment descriptor
Geeft het bereik aan waarin lees- en schrijfbare data mag staan.
Null descriptor
[bewerken]De null descriptor wordt niet gebruikt door de processor, maar kan wel in een segment register geladen worden. Wordt dit adres gebruikt, dan ontstaat er een <<TODO: Link: General Protection Fault >>. De null descriptor was oorspronkelijk dan ook bedoeld om de segment registers op nul te kunnen zetten. Je mag alles wat je wilt in die 8 bytes van de null descriptor opslaan. Vaak slaat men er gewoon een nul-waarde in op, maar anderen gebruiken de null descriptor om een pointer naar de GDT zelf te bewaren [1].
Code segment descriptor
[bewerken]De code segment descriptor beschrijft het gebied met uitvoerbare code. In een 'flat memory model' heeft deze descriptor de volgende eigenschappen:
- Basis: 0
- Limiet: 0xFFFFF * 4 KiB = 4 GiB
- DPL: 0
- Conforming: nee
- Leesbaar: ja
- Opgevraagd: nee
Data segment descriptor
[bewerken]De data segment descriptor beschrijft het gebied met data. In een 'flat memory model' heeft deze descriptor de volgende eigenschappen:
- Basis: 0
- Limiet: 0xFFFFF * 4 KiB = 4 GiB
- DPL: 0
- Uitbreid richting: naar boven
- Leesbaar: ja
- Opgevraagd: nee