Naar inhoud springen

Protected mode

Uit Wikipedia, de vrije encyclopedie
Dit is een oude versie van deze pagina, bewerkt door Pompidombot (overleg | bijdragen) op 13 feb 2010 om 10:51. (Protected mode binnengaan en verlaten: lf, Help mee!, replaced: → [[Processor (ICT)| met [[Project:AWB|AWB)
Deze versie kan sterk verschillen van de huidige versie van deze pagina.

Protected mode is de toestand van een processor van de x86-architectuur (vanaf de 80286) waarin uitgebreidere adresseringsmogelijkheden zijn dan met de oorspronkelijke 8086. Bovendien bestaat de mogelijkheid gegevens te beveiligen tegen programma's die er geen toegang toe hebben.

Een x86-processor start na reset altijd in real mode. Hierdoor is elke processor compatibel met de oorspronkelijke 8086. Bovendien moeten er registers geïnitialiseerd worden die nodig zijn voordat de processor in protected mode kan werken, en die initialisatie kan natuurlijk niet in protected mode geschieden.

Na de introductie van de 80286 heeft het nog lang geduurd voor er besturingssystemen kwamen die volledig gebruik konden maken van de protected mode, zodat de real mode nog lang werd toegepast.

Segmentdescriptors

Een processor heeft naast de bekende 16-bits segmentregisters ook segmentdescriptors. De descriptors zijn voor een programma niet toegankelijk. Het besturingssysteem maakt echter een tabel waarin de waarden staan die in de segmentdescriptors komen te staan. Elke keer als er een segmentregister wordt geladen, zoekt de processor de bijbehorende gegevens voor de segmentdescriptor op. Hierdoor duurt het laden van een segmentregister vrij lang - veel langer dan in real mode.

De segmentdescriptors bevatten in de eerste plaats het basisadres waar de adressering begint. Dit adres heeft evenveel bits als er adreslijnen zijn, zodat het hele geheugen adresseerbaar is, terwijl men in real mode (met segmentregisters van 16 bits) niet veel verder komt dan 1 MiB.

Verder bevatten de segmentdescriptors gegevens voor virtueel geheugen en beveiligingsgegevens.

Protected mode binnengaan en verlaten

Het is met de 80286 niet mogelijk om van de protected mode terug te keren naar de real mode. Onder DOS werd dat een probleem gevonden, want DOS werkt nu eenmaal in real mode. Men moest naar protected mode om het geheugen boven 1 MB te kunnen adresseren of andere taken uit te voeren, en daarna wilde men weer terug naar real mode. Om het laatste mogelijk te maken, werd er hardwarematig een reset gegenereerd.

Om de protected mode binnen te gaan, moet eerst de Global Descriptor Table (GDT) aangemaakt worden met minimaal drie ingangen: een null descriptor, een code segment descriptor en een data segment descriptor. Ook moet de 20e adreslijn (A20) aangezet worden om het gebruik van al de adreslijnen mogelijk te maken, zodat de cpu geheugen kan gebruiken boven de 1 megabyte. Na deze stappen uitgevoerd te hebben kan de PE-bit in het CR0-register aangezet worden en moet een far jump uitgevoerd worden om de instructiewachtlijst leeg te maken.

               ; zet PE-bit aan
mov eax, cr0
or eax, 1
mov cr0, eax   ; Nu zijn we in de protected mode.

               ; far jump (cs = codesegment selector)
jmp cs:@pm     ; maak wachtlijst leeg 
@pm:

Toen de 386 uitgebracht werd, werd het mogelijk om weer terug te gaan naar de real mode door de segmentregisters met real mode waarden te laden, eventueel A20 uit te zetten en de PE-bit (in het CR0-register) weer uit te zetten. Bij moderne besturingssystemen is daar echter geen behoefte meer aan.