Protected mode
From Wikipedia, the free encyclopedia
Protected mode is an operational mode of x86-compatible CPUs of the 80286 series or later. Protected mode has a number of new features designed to enhance multitasking and system stability, such as memory protection, a paging system, and hardware support for virtual memory. It is sometimes abbreviated p-mode and also called Protected Virtual Address Mode in the Intel iAPX 286 Programmer's Reference Manual (iAPX 286 is just another name for the Intel 80286) even though a 32-bit "virtual address" mentioned in the manual was actually a far pointer and true 32-bit virtual addresses came with the Intel 80386. Most modern x86 operating systems run in protected mode, including Linux, FreeBSD, and Microsoft Windows 3.0 (which also ran in real mode for compatibilty with Windows 2.x applications) and later.
The other operational mode of 286 and later CPUs is real mode, a backwards compatibility mode that disables these features, designed to allow old software to run on newer chips. As a design specification, all x86 CPUs, except the obscure embedded Intel 80376, start in real mode at boot time to ensure backwards compatibility with legacy operating systems. They must be manually switched into protected mode by a program before any protected mode features are available. In modern computers, this switch is usually one of the very first tasks performed by the operating system at boot time.
While software-mediated multitasking is certainly possible on systems running in real mode, the memory protection features of protected mode prevent an erroneous program from damaging the memory "owned" by another task or by the operating system kernel. Protected mode also has hardware support for interrupting a running program and shifting execution context to another, enabling pre-emptive multitasking.
386 and later CPUs capable of protected mode also feature 32 bit registers, leading to the confusion of protected mode as such with the idea of 32-bit processing. The 80286 chips do support protected mode, but still had only 16-bit registers. Contributing to the confusion, the protected mode and virtual 8086 mode enhancements in Windows/386 and later were called 386 enhanced mode because they required a 386 and later (thus its name) in addition to protected mode, and would not run on a 286 (even though 286es support protected mode).
Even when protected mode is enabled on a 286 or 386, on PC compatibles, memory above 1 MB is not accessible due to memory wrap-around, a feature designed to mimic (now obsolete) 8086 and 80186 21-bit warparound to 20-bit. This limitation can be circumvented by enabling the A20 line.
In protected mode, the first 32 interrupts are reserved for CPU exceptions. For instance, interrupt 0D (13 in decimal) is a general protection fault and interrupt 00 is division by zero.
Contents[hide] |
Compatibility with real mode programs
The Intel iAPX 286 Programmer's Reference Manual states the protected mode is just an overlay over the 80186 instruction set, and indeed the 80286 protected mode, for application programmers, didn't add much beyond having access to up to 16 MB of physical memory (and 1 GB of virtual (512 MB global, 512 MB local)), so in theory, 8086 and 80186 application code could run in protected mode if it followed these rules, although it will run slower than in real mode because loading segment registers is slower:
- no segment arithmetic
- no use of privileged instuctions
- no CS overrides
- no direct hardware access
- no writing to code segment (which means that self-modifying code are never allowed)
- no executing data (that, together with segmentation did provide some buffer overflow protection then)
- don't assume that segments overlap
In reality, almost all DOS application programs violated these rules, for lack of replacement DOS or BIOS calls or because of the insufficient level of performance of such calls. The most common violations were segment arithmetic and direct hardware access. In other words, protected mode was less compatible with DOS applications than Intel thought it would be and so there was a need for virtual 8086 mode, wich came with the 386.
386 extensions to protected mode
These included:
- paging
- 32-bit segment offsets (this and paging made it possible to make a 32-bit flat address space with the 80386, used in modern operating systems)
- 32-bit physical address space (this extension is not present on the 80386 processors that have a 80286 bus, for example the 80386SX)
- ability to switch back to real mode
- virtual 8086 mode
Some of them used what was documented (in the Intel iAPX 286 Programmer's Reference Manual) as reserved bits on the 286.
See also
- Real mode — Unreal mode — Virtual 8086 mode — Protected mode — Long mode
- x86
- x86 assembly language
External links
- http://x86.ddj.com/articles/pmbasics/tspec_a1_doc.htm
- http://www.soix.com.ar/links/mpbyexamples.html Protected mode by examples in Spanish