Protected Mode: Difference between revisions

From OSDev.wiki
Jump to navigation Jump to search
[unchecked revision][unchecked revision]
Content added Content deleted
m (Added real mode link)
m (Some more explanation and cleanup.)
Line 1:
'''Protected mode''' is the 'native'main operating mode of modern Intel processors (and clones) since the 80286 (there in 16 bit). On 80386s and later, itthe allows32 thebit developerProtected Mode (henceforth just called ''Protected Mode'') allows to work with several virtual address spaces, each of which has a maximum of 4GB of addressable memory; and allowsand enables the system to enforce strict memory and hardware I/O protection as well as restricting the available instruction set (so that your application cannot controlaccess the hard diskhardware directly; while the kernel can).
 
ProtectedA modeCPU unleashesthat theis realinitialized powerby ofthe your[[BIOS]] CPU,starts soin you[[Real betterMode]]. getEnabling informedProtected aboutMode itunleashes ifthe youreal arepower consideringof writingyour an OSCPU. However, it will prevent you from using virtually anymost of the BIOS interrupts, since these work in Real Mode (unless you have also written a [[Virtual 8086 Mode|V86]] monitor).
 
Before switchswitching to Protected Mode, you have to disable interrupts, andincluding [[Non Maskable Interrupt|NMI]] (as suggested by Intel Developers Manual), optionallypossibly enable the [[A20 Line]], and load the [[Global Descriptor Table]] with segment descriptors suitable for code, data, and stack.
 
Whether the CPU is in [[Real Mode]] or in protectedProtected modeMode is defined by the lowest bit of the CR0 or MSW register. Example:
 
An example (TODO: explain):
<source lang="asm">
cli ; disable interrupts
lgdt [gdtr] ; load GDT register with start address of Global Descriptor Table
mov eax, cr0
or al, 1 ; set PE (Protection Enable) bit in CR0 (Control Register 0)
mov cr0, eax
 
; Perform far jump to selector 08h (offset into GDT, pointing at a 32bit PM code segment descriptor)
CLI
; to load CS with proper PM32 descriptor)
LGDT [GDTR]
MOV EAX, CR0
OR AL, 1
MOV CR0, EAX
 
; Immediately after that you have to jump to the code segment in the GDT:
 
JMP 08h:PModeMain
 
; [...]
 
PModeMain:
; load DS, ES, FS, GS, SS, ESP.
</source>
 
This takes you to protectedProtected modeMode...
 
Good Luck

Revision as of 20:23, 6 May 2013

Protected mode is the main operating mode of modern Intel processors (and clones) since the 80286 (there in 16 bit). On 80386s and later, the 32 bit Protected Mode (henceforth just called Protected Mode) allows to work with several virtual address spaces, each of which has a maximum of 4GB of addressable memory; and and enables the system to enforce strict memory and hardware I/O protection as well as restricting the available instruction set (so that your application cannot access the hardware directly; while the kernel can).

A CPU that is initialized by the BIOS starts in Real Mode. Enabling Protected Mode unleashes the real power of your CPU. However, it will prevent you from using most of the BIOS interrupts, since these work in Real Mode (unless you have also written a V86 monitor).

Before switching to Protected Mode, you have to disable interrupts, including NMI (as suggested by Intel Developers Manual), possibly enable the A20 Line, and load the Global Descriptor Table with segment descriptors suitable for code, data, and stack.

Whether the CPU is in Real Mode or in Protected Mode is defined by the lowest bit of the CR0 or MSW register.

An example (TODO: explain):

cli          ; disable interrupts
lgdt [gdtr]  ; load GDT register with start address of Global Descriptor Table
mov eax, cr0 
or al, 1     ; set PE (Protection Enable) bit in CR0 (Control Register 0)
mov cr0, eax

; Perform far jump to selector 08h (offset into GDT, pointing at a 32bit PM code segment descriptor) 
; to load CS with proper PM32 descriptor)

JMP 08h:PModeMain

; [...]

PModeMain:
; load DS, ES, FS, GS, SS, ESP.

This takes you to Protected Mode...

Good Luck

See Also

Articles

External Links